📄 rhel4.patch
字号:
goto fail_irq; }@@ -2745,7 +2794,10 @@ static void megasas_flush_cache(struct m dcmd->opcode = MR_DCMD_CTRL_CACHE_FLUSH; dcmd->mbox.b[0] = MR_FLUSH_CTRL_CACHE | MR_FLUSH_DISK_CACHE; - megasas_issue_blocked_cmd(instance, cmd);+ if (crashdump_mode())+ megasas_issue_polled(instance, cmd);+ else+ megasas_issue_blocked_cmd(instance, cmd); megasas_return_cmd(instance, cmd); @@ -2755,10 +2807,8 @@ static void megasas_flush_cache(struct m /** * megasas_shutdown_controller - Instructs FW to shutdown the controller * @instance: Adapter soft state- * @opcode: Shutdown/Hibernate */-static void megasas_shutdown_controller(struct megasas_instance *instance,- u32 opcode)+static void megasas_shutdown_controller(struct megasas_instance *instance) { struct megasas_cmd *cmd; struct megasas_dcmd_frame *dcmd;@@ -2781,7 +2831,7 @@ static void megasas_shutdown_controller( dcmd->flags = MFI_FRAME_DIR_NONE; dcmd->timeout = 0; dcmd->data_xfer_len = 0;- dcmd->opcode = opcode;+ dcmd->opcode = MR_DCMD_CTRL_SHUTDOWN; megasas_issue_blocked_cmd(instance, cmd); @@ -2791,136 +2841,6 @@ static void megasas_shutdown_controller( } /**- * megasas_suspend - driver suspend entry point- * @pdev: PCI device structure- * @state: - */-static int __devinit-megasas_suspend(struct pci_dev *pdev, pm_message_t state)-{- struct Scsi_Host *host;- struct megasas_instance *instance;-- instance = pci_get_drvdata(pdev);- host = instance->host;-- megasas_flush_cache(instance);- megasas_shutdown_controller(instance, MR_DCMD_HIBERNATE_SHUTDOWN);- tasklet_kill(&instance->isr_tasklet);-- pci_set_drvdata(instance->pdev, instance); - instance->instancet->disable_intr(instance->reg_set);- free_irq(instance->pdev->irq, instance);-- scsi_host_put(host);-- pci_save_state(pdev);- pci_disable_device(pdev);-- pci_set_power_state(pdev, pci_choose_state(pdev, state));-- return 0;-}--/**- * megasas_resume- driver resume entry point- * @pdev: PCI device structure- */-static int __devinit-megasas_resume(struct pci_dev *pdev)-{- int rval;- struct Scsi_Host *host;- struct megasas_instance *instance;- - instance = pci_get_drvdata(pdev);- host = instance->host;- pci_set_power_state(pdev, PCI_D0);- pci_enable_wake(pdev, PCI_D0, 0);- pci_restore_state(pdev);-- /*- * PCI prepping: enable device set bus mastering and dma mask- */- rval = pci_enable_device(pdev);-- if (rval) {- printk(KERN_INFO "megasas: Enable device failed\n");- return rval;- }-- pci_set_master(pdev);-- if (megasas_set_dma_mask(pdev))- goto fail_set_dma_mask;-- /*- * Initialize MFI Firmware- */-- *instance->producer = 0;- *instance->consumer = 0;-- atomic_set(&instance->fw_outstanding,0);-- /*- * We expect the FW state to be READY- */- if (megasas_transition_to_ready(instance))- goto fail_ready_state;-- if (megasas_issue_init_mfi(instance))- goto fail_init_mfi;-- tasklet_init(&instance->isr_tasklet, megasas_complete_cmd_dpc,- (unsigned long)instance); - /*- * Register IRQ- */- if (request_irq(pdev->irq, megasas_isr, IRQF_SHARED,- "megasas",instance)) {- printk(KERN_DEBUG "megasas: Failed to register IRQ\n");- goto fail_irq;- }-- instance->instancet->enable_intr(instance->reg_set);-- /*- * Store instance in PCI softstate- */- pci_set_drvdata(pdev, instance);-- /*- * Initiate AEN (Asynchronous Event Notification)- */- if (megasas_start_aen(instance))- printk(KERN_ERR "megasas: Start AEN failed\n");- - return 0; - - fail_irq:- fail_init_mfi:-- if (instance->evt_detail)- pci_free_consistent(pdev, sizeof(struct megasas_evt_detail),- instance->evt_detail,- instance->evt_detail_h);-- if (instance->producer)- pci_free_consistent(pdev, sizeof(u32), instance->producer,- instance->producer_h);- if (instance->consumer)- pci_free_consistent(pdev, sizeof(u32), instance->consumer,- instance->consumer_h);- scsi_host_put(host);- fail_set_dma_mask:- fail_ready_state:- pci_disable_device(pdev);-- return -ENODEV;-}--/** * megasas_detach_one - PCI hot"un"plug entry point * @pdev: PCI device structure */@@ -2936,7 +2856,7 @@ static void megasas_detach_one(struct pc sysfs_remove_bin_file(&host->shost_classdev.kobj, &sysfs_max_sectors_attr); scsi_remove_host(instance->host); megasas_flush_cache(instance);- megasas_shutdown_controller(instance, MR_DCMD_CTRL_SHUTDOWN);+ megasas_shutdown_controller(instance); tasklet_kill(&instance->isr_tasklet); /*@@ -2982,9 +2902,10 @@ static void megasas_detach_one(struct pc * megasas_shutdown - Shutdown entry point * @device: Generic device structure */-static void megasas_shutdown(struct pci_dev *pdev)+static void megasas_shutdown(struct device *device) {- struct megasas_instance *instance = pci_get_drvdata(pdev);+ struct megasas_instance *instance = (struct megasas_instance *)+ dev_get_drvdata(device); megasas_flush_cache(instance); } @@ -3023,11 +2944,11 @@ static int megasas_mgmt_fasync(int fd, s { int rc; - mutex_lock(&megasas_async_queue_mutex);+ down(&megasas_async_queue_mutex); rc = fasync_helper(fd, filep, mode, &megasas_async_queue); - mutex_unlock(&megasas_async_queue_mutex);+ up(&megasas_async_queue_mutex); if (rc >= 0) { /* For sanity check when we get ioctl */@@ -3166,6 +3087,7 @@ megasas_mgmt_fw_ioctl(struct megasas_ins * sense_buff points to the location that has the user * sense buffer address */+ sense_buff = (unsigned long *) ((unsigned long)ioc->frame.raw + ioc->sense_off); sense_ptr = (u32 *) ((unsigned long)ioc->frame.raw +@@ -3276,13 +3198,13 @@ static int megasas_mgmt_ioctl_aen(struct /** * megasas_mgmt_ioctl - char node ioctl entry point */-static long-megasas_mgmt_ioctl(struct file *file, unsigned int cmd, unsigned long arg)+static int+megasas_mgmt_ioctl(struct inode *inode, struct file *file, unsigned int cmd,+ unsigned long arg) { switch (cmd) { case MEGASAS_IOC_FIRMWARE: return megasas_mgmt_ioctl_fw(file, arg);- case MEGASAS_IOC_GET_AEN: return megasas_mgmt_ioctl_aen(file, arg); }@@ -3332,8 +3254,8 @@ static int megasas_mgmt_compat_ioctl_fw( } static long-megasas_mgmt_compat_ioctl(struct file *file, unsigned int cmd,- unsigned long arg)+megasas_mgmt_compat_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg,+ struct file *file) { switch (cmd) { case MEGASAS_IOC_FIRMWARE32:@@ -3349,15 +3271,12 @@ megasas_mgmt_compat_ioctl(struct file *f /* * File operations structure for management interface */-static const struct file_operations megasas_mgmt_fops = {+static struct file_operations megasas_mgmt_fops = { .owner = THIS_MODULE, .open = megasas_mgmt_open, .release = megasas_mgmt_release, .fasync = megasas_mgmt_fasync,- .unlocked_ioctl = megasas_mgmt_ioctl,-#ifdef CONFIG_COMPAT- .compat_ioctl = megasas_mgmt_compat_ioctl,-#endif+ .ioctl = megasas_mgmt_ioctl, }; /*@@ -3369,9 +3288,9 @@ static struct pci_driver megasas_pci_dri .id_table = megasas_pci_table, .probe = megasas_probe_one, .remove = __devexit_p(megasas_detach_one),- .suspend = megasas_suspend,- .resume = megasas_resume,- .shutdown = megasas_shutdown,+ .driver = {+ .shutdown = megasas_shutdown,+ } }; /*@@ -3395,13 +3314,13 @@ megasas_sysfs_show_release_date(struct d static DRIVER_ATTR(release_date, S_IRUGO, megasas_sysfs_show_release_date, NULL); -static ssize_t+static ssize_t megasas_sysfs_show_dbg_lvl(struct device_driver *dd, char *buf) { return sprintf(buf,"%u",megasas_dbg_lvl); } -static ssize_t+static ssize_t megasas_sysfs_set_dbg_lvl(struct device_driver *dd, const char *buf, size_t count) { int retval = count;@@ -3445,7 +3364,7 @@ static int __init megasas_init(void) /* * Register ourselves as PCI hotplug module */- rval = pci_register_driver(&megasas_pci_driver);+ rval = pci_module_init(&megasas_pci_driver); if (rval) { printk(KERN_DEBUG "megasas: PCI hotplug regisration failed \n");@@ -3465,6 +3384,12 @@ static int __init megasas_init(void) if (rval) goto err_dcf_dbg_lvl; +#ifdef CONFIG_COMPAT+ register_ioctl32_conversion(MEGASAS_IOC_FIRMWARE32,+ megasas_mgmt_compat_ioctl);+ register_ioctl32_conversion(MEGASAS_IOC_GET_AEN,+ megasas_mgmt_compat_ioctl);+#endif return rval; err_dcf_dbg_lvl: driver_remove_file(&megasas_pci_driver.driver,@@ -3475,7 +3400,7 @@ err_dcf_attr_ver: pci_unregister_driver(&megasas_pci_driver); err_pcidrv: unregister_chrdev(megasas_mgmt_majorno, "megaraid_sas_ioctl");- return rval;+ return rval; } /**@@ -3483,11 +3408,13 @@ err_pcidrv: */ static void __exit megasas_exit(void) {- driver_remove_file(&megasas_pci_driver.driver,- &driver_attr_dbg_lvl);+#ifdef CONFIG_COMPAT+ unregister_ioctl32_conversion(MEGASAS_IOC_FIRMWARE32);+ unregister_ioctl32_conversion(MEGASAS_IOC_GET_AEN);+#endif+ driver_remove_file(&megasas_pci_driver.driver, &driver_attr_version); driver_remove_file(&megasas_pci_driver.driver, &driver_attr_release_date);- driver_remove_file(&megasas_pci_driver.driver, &driver_attr_version); pci_unregister_driver(&megasas_pci_driver); unregister_chrdev(megasas_mgmt_majorno, "megaraid_sas_ioctl");diff -uprN base/megaraid_sas.h rhel4/megaraid_sas.h--- base/megaraid_sas.h 2007-10-13 20:37:32.000000000 -0700+++ rhel4/megaraid_sas.h 2007-10-13 20:42:13.000000000 -0700@@ -15,7 +15,7 @@ #ifndef LSI_MEGARAID_SAS_H #define LSI_MEGARAID_SAS_H -/*+/** * MegaRAID SAS Driver meta data */ #define MEGASAS_VERSION "00.00.03.16"@@ -27,6 +27,8 @@ */ #define PCI_DEVICE_ID_LSI_SAS1078R 0x0060 #define PCI_DEVICE_ID_LSI_VERDE_ZCR 0x0413+#define PCI_DEVICE_ID_LSI_SAS1064R 0x0411+#define PCI_DEVICE_ID_DELL_PERC5 0x0015 /* * =====================================@@ -40,7 +42,7 @@ * "message frames" */ -/*+/** * FW posts its state in upper 4 bits of outbound_msg_0 register */ #define MFI_STATE_MASK 0xF0000000@@ -58,7 +60,7 @@ #define MEGAMFI_FRAME_SIZE 64 -/*+/** * During FW init, clear pending cmds & reset state using inbound_msg_0 * * ABORT : Abort all pending cmds@@ -78,7 +80,7 @@ MFI_INIT_MFIMODE| \ MFI_INIT_ABORT -/*+/** * MFI frame flags */ #define MFI_FRAME_POST_IN_REPLY_QUEUE 0x0000@@ -92,12 +94,12 @@ #define MFI_FRAME_DIR_READ 0x0010 #define MFI_FRAME_DIR_BOTH 0x0018 -/*+/** * Definition for cmd_status */ #define MFI_CMD_STATUS_POLL_MODE 0xFF -/*+/** * MFI command opcodes */ #define MFI_CMD_INIT 0x00@@ -129,7 +131,7 @@ #define MR_DCMD_CLUSTER_RESET_ALL 0x08010100 #define MR_DCMD_CLUSTER_RESET_LD 0x08010200 -/*+/** * MFI command completion codes */ enum MFI_STAT {@@ -539,7 +541,6 @@ struct megasas_ctrl_info { #define MEGASAS_MAX_LD 64 #define MEGASAS_DEFAULT_CMD_PER_LUN 128 - #define MEGASAS_DBG_LVL 1 #define MEGASAS_FW_BUSY 1 @@ -555,7 +556,6 @@ struct megasas_ctrl_info { #define MEGASAS_RESET_NOTICE_INTERVAL 5 #define MEGASAS_IOCTL_CMD 0- #define MEGASAS_DEFAULT_CMD_TIMEOUT 90 /*@@ -1108,7 +1108,7 @@ struct megasas_instance { atomic_t fw_outstanding; u32 hw_crit_error;- + struct megasas_instance_template *instancet; struct tasklet_struct isr_tasklet;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -