scsi: message: fusion: Remove in_interrupt() usage in mpt_config()
authorThomas Gleixner <tglx@linutronix.de>
Thu, 26 Nov 2020 13:29:51 +0000 (14:29 +0100)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 1 Dec 2020 05:03:53 +0000 (00:03 -0500)
in_interrupt() is referenced all over the place in these drivers. Most of
these references are comments which are outdated and wrong.

Aside of that in_interrupt() is deprecated as it does not provide what the
name suggests. It covers more than hard/soft interrupt servicing context
and is semantically ill defined.

>From reading the mpt_config() code and the history this is clearly a debug
mechanism and should probably be replaced by might_sleep() or completely
removed because such checks are already in the subsequent functions.

Remove the in_interrupt() references and replace the usage in mpt_config()
with might_sleep().

Link: https://lore.kernel.org/r/20201126132952.2287996-14-bigeasy@linutronix.de
Cc: Sathya Prakash <sathya.prakash@broadcom.com>
Cc: Sreekanth Reddy <sreekanth.reddy@broadcom.com>
Cc: Suganath Prabu Subramani <suganath-prabu.subramani@broadcom.com>
Cc: MPT-FusionLinux.pdl@broadcom.com
Reviewed-by: Daniel Wagner <dwagner@suse.de>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/message/fusion/mptbase.c
drivers/message/fusion/mptfc.c
drivers/message/fusion/mptscsih.c
drivers/message/fusion/mptspi.c

index 3078fac34e51fb9a54c976871e327d3ee0ca9065..549797d0301d82a74cb380111884f7cbdae94961 100644 (file)
@@ -57,7 +57,7 @@
 #include <linux/kdev_t.h>
 #include <linux/blkdev.h>
 #include <linux/delay.h>
-#include <linux/interrupt.h>           /* needed for in_interrupt() proto */
+#include <linux/interrupt.h>
 #include <linux/dma-mapping.h>
 #include <linux/kthread.h>
 #include <scsi/scsi_host.h>
@@ -6335,7 +6335,6 @@ SendEventAck(MPT_ADAPTER *ioc, EventNotificationReply_t *evnp)
  *             Page header is updated.
  *
  *     Returns 0 for success
- *     -EPERM if not allowed due to ISR context
  *     -EAGAIN if no msg frames currently available
  *     -EFAULT for non-successful reply or no reply (timeout)
  */
@@ -6353,19 +6352,10 @@ mpt_config(MPT_ADAPTER *ioc, CONFIGPARMS *pCfg)
        u8               page_type = 0, extend_page;
        unsigned long    timeleft;
        unsigned long    flags;
-       int              in_isr;
        u8               issue_hard_reset = 0;
        u8               retry_count = 0;
 
-       /*      Prevent calling wait_event() (below), if caller happens
-        *      to be in ISR context, because that is fatal!
-        */
-       in_isr = in_interrupt();
-       if (in_isr) {
-               dcprintk(ioc, printk(MYIOC_s_WARN_FMT "Config request not allowed in ISR context!\n",
-                               ioc->name));
-               return -EPERM;
-    }
+       might_sleep();
 
        /* don't send a config page during diag reset */
        spin_lock_irqsave(&ioc->taskmgmt_lock, flags);
index f92b0433f599f698e9c386de5889384b50a2cbb4..0484e9c15c09734afc6492701e3d5f0068628d12 100644 (file)
@@ -50,7 +50,7 @@
 #include <linux/kdev_t.h>
 #include <linux/blkdev.h>
 #include <linux/delay.h>       /* for mdelay */
-#include <linux/interrupt.h>   /* needed for in_interrupt() proto */
+#include <linux/interrupt.h>
 #include <linux/reboot.h>      /* notifier code */
 #include <linux/workqueue.h>
 #include <linux/sort.h>
index a5ef9faf71c7d4f5a03ba7487ceb6c2d27198517..f441f433ad4df0bc8fdae5c72c63654f7f1bc92b 100644 (file)
@@ -52,7 +52,7 @@
 #include <linux/kdev_t.h>
 #include <linux/blkdev.h>
 #include <linux/delay.h>       /* for mdelay */
-#include <linux/interrupt.h>   /* needed for in_interrupt() proto */
+#include <linux/interrupt.h>
 #include <linux/reboot.h>      /* notifier code */
 #include <linux/workqueue.h>
 
index eabc4de5816cb4deef77cfcbe5d09cc34bf05ac6..af0ce5611e4accdd49d40041cce3488bf58c6d56 100644 (file)
@@ -52,7 +52,7 @@
 #include <linux/kdev_t.h>
 #include <linux/blkdev.h>
 #include <linux/delay.h>       /* for mdelay */
-#include <linux/interrupt.h>   /* needed for in_interrupt() proto */
+#include <linux/interrupt.h>
 #include <linux/reboot.h>      /* notifier code */
 #include <linux/workqueue.h>
 #include <linux/raid_class.h>