提交 7895f9c9 编写于 作者: A adam radford 提交者: James Bottomley

[SCSI] megaraid_sas: remove poll_mode_io code

This code has never worked correctly, doesn't disable interrupts when
set as a module parameter, doesn't disable interrupts when set after
driver load time in sysfs node, etc.
Signed-off-by: NAdam Radford <aradford@gmail.com>
Signed-off-by: NJames Bottomley <JBottomley@Parallels.com>
上级 882be7c3
...@@ -773,7 +773,6 @@ struct megasas_ctrl_info { ...@@ -773,7 +773,6 @@ struct megasas_ctrl_info {
#define MFI_OB_INTR_STATUS_MASK 0x00000002 #define MFI_OB_INTR_STATUS_MASK 0x00000002
#define MFI_POLL_TIMEOUT_SECS 60 #define MFI_POLL_TIMEOUT_SECS 60
#define MEGASAS_COMPLETION_TIMER_INTERVAL (HZ/10)
#define MFI_REPLY_1078_MESSAGE_INTERRUPT 0x80000000 #define MFI_REPLY_1078_MESSAGE_INTERRUPT 0x80000000
#define MFI_REPLY_GEN2_MESSAGE_INTERRUPT 0x00000001 #define MFI_REPLY_GEN2_MESSAGE_INTERRUPT 0x00000001
...@@ -1353,7 +1352,6 @@ struct megasas_instance { ...@@ -1353,7 +1352,6 @@ struct megasas_instance {
u32 mfiStatus; u32 mfiStatus;
u32 last_seq_num; u32 last_seq_num;
struct timer_list io_completion_timer;
struct list_head internal_reset_pending_q; struct list_head internal_reset_pending_q;
/* Ptr to hba specific information */ /* Ptr to hba specific information */
......
...@@ -58,14 +58,6 @@ ...@@ -58,14 +58,6 @@
#include "megaraid_sas_fusion.h" #include "megaraid_sas_fusion.h"
#include "megaraid_sas.h" #include "megaraid_sas.h"
/*
* poll_mode_io:1- schedule complete completion from q cmd
*/
static unsigned int poll_mode_io;
module_param_named(poll_mode_io, poll_mode_io, int, 0);
MODULE_PARM_DESC(poll_mode_io,
"Complete cmds from IO path, (default=0)");
/* /*
* Number of sectors per IO command * Number of sectors per IO command
* Will be set in megasas_init_mfi if user does not provide * Will be set in megasas_init_mfi if user does not provide
...@@ -1439,11 +1431,6 @@ megasas_build_and_issue_cmd(struct megasas_instance *instance, ...@@ -1439,11 +1431,6 @@ megasas_build_and_issue_cmd(struct megasas_instance *instance,
instance->instancet->fire_cmd(instance, cmd->frame_phys_addr, instance->instancet->fire_cmd(instance, cmd->frame_phys_addr,
cmd->frame_count-1, instance->reg_set); cmd->frame_count-1, instance->reg_set);
/*
* Check if we have pend cmds to be completed
*/
if (poll_mode_io && atomic_read(&instance->fw_outstanding))
tasklet_schedule(&instance->isr_tasklet);
return 0; return 0;
out_return_cmd: out_return_cmd:
...@@ -3370,47 +3357,6 @@ megasas_issue_init_mfi(struct megasas_instance *instance) ...@@ -3370,47 +3357,6 @@ megasas_issue_init_mfi(struct megasas_instance *instance)
return -EINVAL; return -EINVAL;
} }
/**
* megasas_start_timer - Initializes a timer object
* @instance: Adapter soft state
* @timer: timer object to be initialized
* @fn: timer function
* @interval: time interval between timer function call
*/
static inline void
megasas_start_timer(struct megasas_instance *instance,
struct timer_list *timer,
void *fn, unsigned long interval)
{
init_timer(timer);
timer->expires = jiffies + interval;
timer->data = (unsigned long)instance;
timer->function = fn;
add_timer(timer);
}
/**
* megasas_io_completion_timer - Timer fn
* @instance_addr: Address of adapter soft state
*
* Schedules tasklet for cmd completion
* if poll_mode_io is set
*/
static void
megasas_io_completion_timer(unsigned long instance_addr)
{
struct megasas_instance *instance =
(struct megasas_instance *)instance_addr;
if (atomic_read(&instance->fw_outstanding))
tasklet_schedule(&instance->isr_tasklet);
/* Restart timer */
if (poll_mode_io)
mod_timer(&instance->io_completion_timer,
jiffies + MEGASAS_COMPLETION_TIMER_INTERVAL);
}
static u32 static u32
megasas_init_adapter_mfi(struct megasas_instance *instance) megasas_init_adapter_mfi(struct megasas_instance *instance)
{ {
...@@ -3638,11 +3584,6 @@ static int megasas_init_fw(struct megasas_instance *instance) ...@@ -3638,11 +3584,6 @@ static int megasas_init_fw(struct megasas_instance *instance)
tasklet_init(&instance->isr_tasklet, instance->instancet->tasklet, tasklet_init(&instance->isr_tasklet, instance->instancet->tasklet,
(unsigned long)instance); (unsigned long)instance);
/* Initialize the cmd completion timer */
if (poll_mode_io)
megasas_start_timer(instance, &instance->io_completion_timer,
megasas_io_completion_timer,
MEGASAS_COMPLETION_TIMER_INTERVAL);
return 0; return 0;
fail_init_adapter: fail_init_adapter:
...@@ -4369,9 +4310,6 @@ megasas_suspend(struct pci_dev *pdev, pm_message_t state) ...@@ -4369,9 +4310,6 @@ megasas_suspend(struct pci_dev *pdev, pm_message_t state)
host = instance->host; host = instance->host;
instance->unload = 1; instance->unload = 1;
if (poll_mode_io)
del_timer_sync(&instance->io_completion_timer);
megasas_flush_cache(instance); megasas_flush_cache(instance);
megasas_shutdown_controller(instance, MR_DCMD_HIBERNATE_SHUTDOWN); megasas_shutdown_controller(instance, MR_DCMD_HIBERNATE_SHUTDOWN);
...@@ -4511,12 +4449,6 @@ megasas_resume(struct pci_dev *pdev) ...@@ -4511,12 +4449,6 @@ megasas_resume(struct pci_dev *pdev)
} }
instance->instancet->enable_intr(instance->reg_set); instance->instancet->enable_intr(instance->reg_set);
/* Initialize the cmd completion timer */
if (poll_mode_io)
megasas_start_timer(instance, &instance->io_completion_timer,
megasas_io_completion_timer,
MEGASAS_COMPLETION_TIMER_INTERVAL);
instance->unload = 0; instance->unload = 0;
/* /*
...@@ -4570,9 +4502,6 @@ static void __devexit megasas_detach_one(struct pci_dev *pdev) ...@@ -4570,9 +4502,6 @@ static void __devexit megasas_detach_one(struct pci_dev *pdev)
host = instance->host; host = instance->host;
fusion = instance->ctrl_context; fusion = instance->ctrl_context;
if (poll_mode_io)
del_timer_sync(&instance->io_completion_timer);
scsi_remove_host(instance->host); scsi_remove_host(instance->host);
megasas_flush_cache(instance); megasas_flush_cache(instance);
megasas_shutdown_controller(instance, MR_DCMD_CTRL_SHUTDOWN); megasas_shutdown_controller(instance, MR_DCMD_CTRL_SHUTDOWN);
...@@ -5221,60 +5150,6 @@ megasas_sysfs_set_dbg_lvl(struct device_driver *dd, const char *buf, size_t coun ...@@ -5221,60 +5150,6 @@ megasas_sysfs_set_dbg_lvl(struct device_driver *dd, const char *buf, size_t coun
static DRIVER_ATTR(dbg_lvl, S_IRUGO|S_IWUSR, megasas_sysfs_show_dbg_lvl, static DRIVER_ATTR(dbg_lvl, S_IRUGO|S_IWUSR, megasas_sysfs_show_dbg_lvl,
megasas_sysfs_set_dbg_lvl); megasas_sysfs_set_dbg_lvl);
static ssize_t
megasas_sysfs_show_poll_mode_io(struct device_driver *dd, char *buf)
{
return sprintf(buf, "%u\n", poll_mode_io);
}
static ssize_t
megasas_sysfs_set_poll_mode_io(struct device_driver *dd,
const char *buf, size_t count)
{
int retval = count;
int tmp = poll_mode_io;
int i;
struct megasas_instance *instance;
if (sscanf(buf, "%u", &poll_mode_io) < 1) {
printk(KERN_ERR "megasas: could not set poll_mode_io\n");
retval = -EINVAL;
}
/*
* Check if poll_mode_io is already set or is same as previous value
*/
if ((tmp && poll_mode_io) || (tmp == poll_mode_io))
goto out;
if (poll_mode_io) {
/*
* Start timers for all adapters
*/
for (i = 0; i < megasas_mgmt_info.max_index; i++) {
instance = megasas_mgmt_info.instance[i];
if (instance) {
megasas_start_timer(instance,
&instance->io_completion_timer,
megasas_io_completion_timer,
MEGASAS_COMPLETION_TIMER_INTERVAL);
}
}
} else {
/*
* Delete timers for all adapters
*/
for (i = 0; i < megasas_mgmt_info.max_index; i++) {
instance = megasas_mgmt_info.instance[i];
if (instance)
del_timer_sync(&instance->io_completion_timer);
}
}
out:
return retval;
}
static void static void
megasas_aen_polling(struct work_struct *work) megasas_aen_polling(struct work_struct *work)
{ {
...@@ -5504,11 +5379,6 @@ megasas_aen_polling(struct work_struct *work) ...@@ -5504,11 +5379,6 @@ megasas_aen_polling(struct work_struct *work)
kfree(ev); kfree(ev);
} }
static DRIVER_ATTR(poll_mode_io, S_IRUGO|S_IWUSR,
megasas_sysfs_show_poll_mode_io,
megasas_sysfs_set_poll_mode_io);
/** /**
* megasas_init - Driver load entry point * megasas_init - Driver load entry point
*/ */
...@@ -5567,11 +5437,6 @@ static int __init megasas_init(void) ...@@ -5567,11 +5437,6 @@ static int __init megasas_init(void)
&driver_attr_dbg_lvl); &driver_attr_dbg_lvl);
if (rval) if (rval)
goto err_dcf_dbg_lvl; goto err_dcf_dbg_lvl;
rval = driver_create_file(&megasas_pci_driver.driver,
&driver_attr_poll_mode_io);
if (rval)
goto err_dcf_poll_mode_io;
rval = driver_create_file(&megasas_pci_driver.driver, rval = driver_create_file(&megasas_pci_driver.driver,
&driver_attr_support_device_change); &driver_attr_support_device_change);
if (rval) if (rval)
...@@ -5580,10 +5445,6 @@ static int __init megasas_init(void) ...@@ -5580,10 +5445,6 @@ static int __init megasas_init(void)
return rval; return rval;
err_dcf_support_device_change: err_dcf_support_device_change:
driver_remove_file(&megasas_pci_driver.driver,
&driver_attr_poll_mode_io);
err_dcf_poll_mode_io:
driver_remove_file(&megasas_pci_driver.driver, driver_remove_file(&megasas_pci_driver.driver,
&driver_attr_dbg_lvl); &driver_attr_dbg_lvl);
err_dcf_dbg_lvl: err_dcf_dbg_lvl:
...@@ -5608,8 +5469,6 @@ static int __init megasas_init(void) ...@@ -5608,8 +5469,6 @@ static int __init megasas_init(void)
*/ */
static void __exit megasas_exit(void) static void __exit megasas_exit(void)
{ {
driver_remove_file(&megasas_pci_driver.driver,
&driver_attr_poll_mode_io);
driver_remove_file(&megasas_pci_driver.driver, driver_remove_file(&megasas_pci_driver.driver,
&driver_attr_dbg_lvl); &driver_attr_dbg_lvl);
driver_remove_file(&megasas_pci_driver.driver, driver_remove_file(&megasas_pci_driver.driver,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册