From 8aecac1698d4cecd80c2c1842c52b53cbaa2099e Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Thu, 18 Jan 2018 11:09:13 +0100 Subject: [PATCH] 4.9-stable patches added patches: scsi-sg-disable-set_force_low_dma.patch --- .../scsi-sg-disable-set_force_low_dma.patch | 111 ++++++++++++++++++ queue-4.9/series | 1 + 2 files changed, 112 insertions(+) create mode 100644 queue-4.9/scsi-sg-disable-set_force_low_dma.patch 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 index 00000000000..766f5f502ec --- /dev/null +++ b/queue-4.9/scsi-sg-disable-set_force_low_dma.patch @@ -0,0 +1,111 @@ +From 745dfa0d8ec26b24f3304459ff6e9eacc5c8351b Mon Sep 17 00:00:00 2001 +From: Hannes Reinecke +Date: Fri, 7 Apr 2017 09:34:12 +0200 +Subject: scsi: sg: disable SET_FORCE_LOW_DMA + +From: Hannes Reinecke + +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 +Reviewed-by: Johannes Thumshirn +Tested-by: Johannes Thumshirn +Reviewed-by: Christoph Hellwig +Signed-off-by: Martin K. Petersen +Signed-off-by: Greg Kroah-Hartman + +--- + 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 */ diff --git a/queue-4.9/series b/queue-4.9/series index b096a10e17b..edfea10b1c6 100644 --- a/queue-4.9/series +++ b/queue-4.9/series @@ -1 +1,2 @@ libnvdimm-btt-fix-an-incompatibility-in-the-log-layout.patch +scsi-sg-disable-set_force_low_dma.patch -- 2.47.3