]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.9-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 18 Jan 2018 10:09:13 +0000 (11:09 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 18 Jan 2018 10:09:13 +0000 (11:09 +0100)
added patches:
scsi-sg-disable-set_force_low_dma.patch

queue-4.9/scsi-sg-disable-set_force_low_dma.patch [new file with mode: 0644]
queue-4.9/series

diff --git a/queue-4.9/scsi-sg-disable-set_force_low_dma.patch b/queue-4.9/scsi-sg-disable-set_force_low_dma.patch
new file mode 100644 (file)
index 0000000..766f5f5
--- /dev/null
@@ -0,0 +1,111 @@
+From 745dfa0d8ec26b24f3304459ff6e9eacc5c8351b Mon Sep 17 00:00:00 2001
+From: Hannes Reinecke <hare@suse.de>
+Date: Fri, 7 Apr 2017 09:34:12 +0200
+Subject: scsi: sg: disable SET_FORCE_LOW_DMA
+
+From: Hannes Reinecke <hare@suse.de>
+
+commit 745dfa0d8ec26b24f3304459ff6e9eacc5c8351b upstream.
+
+The ioctl SET_FORCE_LOW_DMA has never worked since the initial git
+check-in, and the respective setting is nowadays handled correctly. So
+disable it entirely.
+
+Signed-off-by: Hannes Reinecke <hare@suse.com>
+Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
+Tested-by: Johannes Thumshirn <jthumshirn@suse.de>
+Reviewed-by: Christoph Hellwig <hch@lst.de>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/scsi/sg.c |   30 +++++++++---------------------
+ include/scsi/sg.h |    1 -
+ 2 files changed, 9 insertions(+), 22 deletions(-)
+
+--- a/drivers/scsi/sg.c
++++ b/drivers/scsi/sg.c
+@@ -149,7 +149,6 @@ typedef struct sg_fd {             /* holds the sta
+       struct list_head rq_list; /* head of request list */
+       struct fasync_struct *async_qp; /* used by asynchronous notification */
+       Sg_request req_arr[SG_MAX_QUEUE];       /* used as singly-linked list */
+-      char low_dma;           /* as in parent but possibly overridden to 1 */
+       char force_packid;      /* 1 -> pack_id input to read(), 0 -> ignored */
+       char cmd_q;             /* 1 -> allow command queuing, 0 -> don't */
+       unsigned char next_cmd_len; /* 0: automatic, >0: use on next write() */
+@@ -922,24 +921,14 @@ sg_ioctl(struct file *filp, unsigned int
+                               /* strange ..., for backward compatibility */
+               return sfp->timeout_user;
+       case SG_SET_FORCE_LOW_DMA:
+-              result = get_user(val, ip);
+-              if (result)
+-                      return result;
+-              if (val) {
+-                      sfp->low_dma = 1;
+-                      if ((0 == sfp->low_dma) && !sfp->res_in_use) {
+-                              val = (int) sfp->reserve.bufflen;
+-                              sg_remove_scat(sfp, &sfp->reserve);
+-                              sg_build_reserve(sfp, val);
+-                      }
+-              } else {
+-                      if (atomic_read(&sdp->detaching))
+-                              return -ENODEV;
+-                      sfp->low_dma = sdp->device->host->unchecked_isa_dma;
+-              }
++              /*
++               * N.B. This ioctl never worked properly, but failed to
++               * return an error value. So returning '0' to keep compability
++               * with legacy applications.
++               */
+               return 0;
+       case SG_GET_LOW_DMA:
+-              return put_user((int) sfp->low_dma, ip);
++              return put_user((int) sdp->device->host->unchecked_isa_dma, ip);
+       case SG_GET_SCSI_ID:
+               if (!access_ok(VERIFY_WRITE, p, sizeof (sg_scsi_id_t)))
+                       return -EFAULT;
+@@ -1860,6 +1849,7 @@ sg_build_indirect(Sg_scatter_hold * schp
+       int sg_tablesize = sfp->parentdp->sg_tablesize;
+       int blk_size = buff_size, order;
+       gfp_t gfp_mask = GFP_ATOMIC | __GFP_COMP | __GFP_NOWARN;
++      struct sg_device *sdp = sfp->parentdp;
+       if (blk_size < 0)
+               return -EFAULT;
+@@ -1885,7 +1875,7 @@ sg_build_indirect(Sg_scatter_hold * schp
+                       scatter_elem_sz_prev = num;
+       }
+-      if (sfp->low_dma)
++      if (sdp->device->host->unchecked_isa_dma)
+               gfp_mask |= GFP_DMA;
+       if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SYS_RAWIO))
+@@ -2148,8 +2138,6 @@ sg_add_sfp(Sg_device * sdp)
+       sfp->timeout = SG_DEFAULT_TIMEOUT;
+       sfp->timeout_user = SG_DEFAULT_TIMEOUT_USER;
+       sfp->force_packid = SG_DEF_FORCE_PACK_ID;
+-      sfp->low_dma = (SG_DEF_FORCE_LOW_DMA == 0) ?
+-          sdp->device->host->unchecked_isa_dma : 1;
+       sfp->cmd_q = SG_DEF_COMMAND_Q;
+       sfp->keep_orphan = SG_DEF_KEEP_ORPHAN;
+       sfp->parentdp = sdp;
+@@ -2608,7 +2596,7 @@ static void sg_proc_debug_helper(struct
+                          jiffies_to_msecs(fp->timeout),
+                          fp->reserve.bufflen,
+                          (int) fp->reserve.k_use_sg,
+-                         (int) fp->low_dma);
++                         (int) sdp->device->host->unchecked_isa_dma);
+               seq_printf(s, "   cmd_q=%d f_packid=%d k_orphan=%d closed=0\n",
+                          (int) fp->cmd_q, (int) fp->force_packid,
+                          (int) fp->keep_orphan);
+--- a/include/scsi/sg.h
++++ b/include/scsi/sg.h
+@@ -197,7 +197,6 @@ typedef struct sg_req_info { /* used by
+ #define SG_DEFAULT_RETRIES 0
+ /* Defaults, commented if they differ from original sg driver */
+-#define SG_DEF_FORCE_LOW_DMA 0  /* was 1 -> memory below 16MB on i386 */
+ #define SG_DEF_FORCE_PACK_ID 0
+ #define SG_DEF_KEEP_ORPHAN 0
+ #define SG_DEF_RESERVED_SIZE SG_SCATTER_SZ /* load time option */
index b096a10e17b65619a5d126239b6150440dbe412f..edfea10b1c62c1835187bc0544065ae055347c76 100644 (file)
@@ -1 +1,2 @@
 libnvdimm-btt-fix-an-incompatibility-in-the-log-layout.patch
+scsi-sg-disable-set_force_low_dma.patch