stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 3.16 028/133] scsi: zfcp: fix payload with full FCP_RSP IU in SCSI trace records
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (13 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 013/133] printk/console: Always disable boot consoles that use init memory before it is freed Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 011/133] asm/sections: add helpers to check for section data Ben Hutchings
                   ` (118 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Steffen Maier, Martin K. Petersen, Benjamin Block

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Steffen Maier <maier@linux.vnet.ibm.com>

commit 12c3e5754c8022a4f2fd1e9f00d19e99ee0d3cc1 upstream.

If the FCP_RSP UI has optional parts (FCP_SNS_INFO or FCP_RSP_INFO) and
thus does not fit into the fsp_rsp field built into a SCSI trace record,
trace the full FCP_RSP UI with all optional parts as payload record
instead of just FCP_SNS_INFO as payload and
a 1 byte RSP_INFO_CODE part of FCP_RSP_INFO built into the SCSI record.

That way we would also get the full FCP_SNS_INFO in case a
target would ever send more than
min(SCSI_SENSE_BUFFERSIZE==96, ZFCP_DBF_PAY_MAX_REC==256)==96.

The mandatory part of FCP_RSP IU is only 24 bytes.
PAYload costs at least one full PAY record of 256 bytes anyway.
We cap to the hardware response size which is only FSF_FCP_RSP_SIZE==128.
So we can just put the whole FCP_RSP IU with any optional parts into
PAYload similarly as we do for SAN PAY since v4.9 commit aceeffbb59bb
("zfcp: trace full payload of all SAN records (req,resp,iels)").
This does not cause any additional trace records wasting memory.

Decoded trace records were confusing because they showed a hard-coded
sense data length of 96 even if the FCP_RSP_IU field FCP_SNS_LEN showed
actually less.

Since the same commit, we set pl_len for SAN traces to the full length of a
request/response even if we cap the corresponding trace.
In contrast, here for SCSI traces we set pl_len to the pre-computed
length of FCP_RSP IU considering SNS_LEN or RSP_LEN if valid.
Nonetheless we trace a hardcoded payload of length FSF_FCP_RSP_SIZE==128
if there were optional parts.
This makes it easier for the zfcpdbf tool to format only the relevant
part of the long FCP_RSP UI buffer. And any trailing information is still
available in the payload trace record just in case.

Rename the payload record tag from "fcp_sns" to "fcp_riu" to make the new
content explicit to zfcpdbf which can then pick a suitable field name such
as "FCP rsp IU all:" instead of "Sense info :"
Also, the same zfcpdbf can still be backwards compatible with "fcp_sns".

Old example trace record before this fix, formatted with the tool zfcpdbf
from s390-tools:

Timestamp      : ...
Area           : SCSI
Subarea        : 00
Level          : 3
Exception      : -
CPU id         : ..
Caller         : 0x...
Record id      : 1
Tag            : rsl_err
Request id     : 0x<request_id>
SCSI ID        : 0x...
SCSI LUN       : 0x...
SCSI result    : 0x00000002
SCSI retries   : 0x00
SCSI allowed   : 0x05
SCSI scribble  : 0x<request_id>
SCSI opcode    : 00000000 00000000 00000000 00000000
FCP rsp inf cod: 0x00
FCP rsp IU     : 00000000 00000000 00000202 00000000
                                       ^^==FCP_SNS_LEN_VALID
                 00000020 00000000
                 ^^^^^^^^==FCP_SNS_LEN==32
Sense len      : 96 <==min(SCSI_SENSE_BUFFERSIZE,ZFCP_DBF_PAY_MAX_REC)
Sense info     : 70000600 00000018 00000000 29000000
                 00000400 00000000 00000000 00000000
                 00000000 00000000 00000000 00000000<==superfluous
                 00000000 00000000 00000000 00000000<==superfluous
                 00000000 00000000 00000000 00000000<==superfluous
                 00000000 00000000 00000000 00000000<==superfluous

New example trace records with this fix:

Timestamp      : ...
Area           : SCSI
Subarea        : 00
Level          : 3
Exception      : -
CPU ID         : ..
Caller         : 0x...
Record ID      : 1
Tag            : rsl_err
Request ID     : 0x<request_id>
SCSI ID        : 0x...
SCSI LUN       : 0x...
SCSI result    : 0x00000002
SCSI retries   : 0x00
SCSI allowed   : 0x03
SCSI scribble  : 0x<request_id>
SCSI opcode    : a30c0112 00000000 02000000 00000000
FCP rsp inf cod: 0x00
FCP rsp IU     : 00000000 00000000 00000a02 00000200
                 00000020 00000000
FCP rsp IU len : 56
FCP rsp IU all : 00000000 00000000 00000a02 00000200
                                       ^^=FCP_RESID_UNDER|FCP_SNS_LEN_VALID
                 00000020 00000000 70000500 00000018
                 ^^^^^^^^==FCP_SNS_LEN
                                   ^^^^^^^^^^^^^^^^^
                 00000000 240000cb 00011100 00000000
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                 00000000 00000000
                 ^^^^^^^^^^^^^^^^^==FCP_SNS_INFO

Timestamp      : ...
Area           : SCSI
Subarea        : 00
Level          : 1
Exception      : -
CPU ID         : ..
Caller         : 0x...
Record ID      : 1
Tag            : lr_okay
Request ID     : 0x<request_id>
SCSI ID        : 0x...
SCSI LUN       : 0x...
SCSI result    : 0x00000000
SCSI retries   : 0x00
SCSI allowed   : 0x05
SCSI scribble  : 0x<request_id>
SCSI opcode    : <CDB of unrelated SCSI command passed to eh handler>
FCP rsp inf cod: 0x00
FCP rsp IU     : 00000000 00000000 00000100 00000000
                 00000000 00000008
FCP rsp IU len : 32
FCP rsp IU all : 00000000 00000000 00000100 00000000
                                       ^^==FCP_RSP_LEN_VALID
                 00000000 00000008 00000000 00000000
                          ^^^^^^^^==FCP_RSP_LEN
                                   ^^^^^^^^^^^^^^^^^==FCP_RSP_INFO

Signed-off-by: Steffen Maier <maier@linux.vnet.ibm.com>
Fixes: 250a1352b95e ("[SCSI] zfcp: Redesign of the debug tracing for SCSI records.")
Reviewed-by: Benjamin Block <bblock@linux.vnet.ibm.com>
Signed-off-by: Benjamin Block <bblock@linux.vnet.ibm.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/s390/scsi/zfcp_dbf.c | 21 +++++++++++++++++----
 1 file changed, 17 insertions(+), 4 deletions(-)

--- a/drivers/s390/scsi/zfcp_dbf.c
+++ b/drivers/s390/scsi/zfcp_dbf.c
@@ -571,19 +571,32 @@ void zfcp_dbf_scsi(char *tag, int level,
 
 	if (fsf) {
 		rec->fsf_req_id = fsf->req_id;
+		rec->pl_len = FCP_RESP_WITH_EXT;
 		fcp_rsp = (struct fcp_resp_with_ext *)
 				&(fsf->qtcb->bottom.io.fcp_rsp);
+		/* mandatory parts of FCP_RSP IU in this SCSI record */
 		memcpy(&rec->fcp_rsp, fcp_rsp, FCP_RESP_WITH_EXT);
 		if (fcp_rsp->resp.fr_flags & FCP_RSP_LEN_VAL) {
 			fcp_rsp_info = (struct fcp_resp_rsp_info *) &fcp_rsp[1];
 			rec->fcp_rsp_info = fcp_rsp_info->rsp_code;
+			rec->pl_len += be32_to_cpu(fcp_rsp->ext.fr_rsp_len);
 		}
 		if (fcp_rsp->resp.fr_flags & FCP_SNS_LEN_VAL) {
-			rec->pl_len = min((u16)SCSI_SENSE_BUFFERSIZE,
-					  (u16)ZFCP_DBF_PAY_MAX_REC);
-			zfcp_dbf_pl_write(dbf, sc->sense_buffer, rec->pl_len,
-					  "fcp_sns", fsf->req_id);
+			rec->pl_len += be32_to_cpu(fcp_rsp->ext.fr_sns_len);
 		}
+		/* complete FCP_RSP IU in associated PAYload record
+		 * but only if there are optional parts
+		 */
+		if (fcp_rsp->resp.fr_flags != 0)
+			zfcp_dbf_pl_write(
+				dbf, fcp_rsp,
+				/* at least one full PAY record
+				 * but not beyond hardware response field
+				 */
+				min_t(u16, max_t(u16, rec->pl_len,
+						 ZFCP_DBF_PAY_MAX_REC),
+				      FSF_FCP_RSP_SIZE),
+				"fcp_riu", fsf->req_id);
 	}
 
 	debug_event(dbf->scsi, level, rec, sizeof(*rec));

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 030/133] scsi: mac_esp: Fix PIO transfers for MESSAGE IN phase
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (8 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 021/133] ARM: OMAP2+: omap_device: drop broken RPM status update from suspend_noirq Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 031/133] cs5536: add support for IDE controller variant Ben Hutchings
                   ` (123 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Martin K. Petersen, Stan Johnson, Finn Thain

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Finn Thain <fthain@telegraphics.com.au>

commit 7640d91d285893a5cf1e62b2cd00f0884c401d93 upstream.

When in MESSAGE IN phase, the ESP device does not automatically
acknowledge each byte that is transferred by PIO. The mac_esp driver
neglects to explicitly ack them, which causes a timeout during messages
larger than one byte (e.g. tag bytes during reconnect). Fix this with an
ESP_CMD_MOK command after each byte.

The MESSAGE IN phase is also different in that each byte transferred
raises ESP_INTR_FDONE. So don't exit the transfer loop for this interrupt,
for this phase.

That resolves the "Reconnect IRQ2 timeout" error on those Macs which use
PIO transfers instead of PDMA. This patch also improves on the weak tests
for unexpected interrupts and phase changes during PIO transfers.

Tested-by: Stan Johnson <userm57@yahoo.com>
Fixes: 02507a80b35e ("[PATCH] [SCSI] mac_esp: fix PIO mode, take 2")
Signed-off-by: Finn Thain <fthain@telegraphics.com.au>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
[bwh: Backported to 3.16: adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/scsi/mac_esp.c | 35 ++++++++++++++++++-----------------
 1 file changed, 18 insertions(+), 17 deletions(-)

--- a/drivers/scsi/mac_esp.c
+++ b/drivers/scsi/mac_esp.c
@@ -348,25 +348,23 @@ static void mac_esp_send_pio_cmd(struct
 {
 	struct mac_esp_priv *mep = MAC_ESP_GET_PRIV(esp);
 	u8 *fifo = esp->regs + ESP_FDATA * 16;
+	u8 phase = esp->sreg & ESP_STAT_PMASK;
 
 	cmd &= ~ESP_CMD_DMA;
 	mep->error = 0;
 
 	if (write) {
+		u8 *dst = (u8 *)addr;
+		u8 mask = ~(phase == ESP_MIP ? ESP_INTR_FDONE : ESP_INTR_BSERV);
+
 		scsi_esp_cmd(esp, cmd);
 
 		while (1) {
-			unsigned int n;
-
-			n = mac_esp_wait_for_fifo(esp);
-			if (!n)
+			if (!mac_esp_wait_for_fifo(esp))
 				break;
 
-			if (n > esp_count)
-				n = esp_count;
-			esp_count -= n;
-
-			MAC_ESP_PIO_LOOP("%2@,%0@+", n);
+			*dst++ = esp_read8(ESP_FDATA);
+			--esp_count;
 
 			if (!esp_count)
 				break;
@@ -374,14 +372,17 @@ static void mac_esp_send_pio_cmd(struct
 			if (mac_esp_wait_for_intr(esp))
 				break;
 
-			if (((esp->sreg & ESP_STAT_PMASK) != ESP_DIP) &&
-			    ((esp->sreg & ESP_STAT_PMASK) != ESP_MIP))
+			if ((esp->sreg & ESP_STAT_PMASK) != phase)
 				break;
 
 			esp->ireg = esp_read8(ESP_INTRPT);
-			if ((esp->ireg & (ESP_INTR_DC | ESP_INTR_BSERV)) !=
-			    ESP_INTR_BSERV)
+			if (esp->ireg & mask) {
+				mep->error = 1;
 				break;
+			}
+
+			if (phase == ESP_MIP)
+				scsi_esp_cmd(esp, ESP_CMD_MOK);
 
 			scsi_esp_cmd(esp, ESP_CMD_TI);
 		}
@@ -401,14 +402,14 @@ static void mac_esp_send_pio_cmd(struct
 			if (mac_esp_wait_for_intr(esp))
 				break;
 
-			if (((esp->sreg & ESP_STAT_PMASK) != ESP_DOP) &&
-			    ((esp->sreg & ESP_STAT_PMASK) != ESP_MOP))
+			if ((esp->sreg & ESP_STAT_PMASK) != phase)
 				break;
 
 			esp->ireg = esp_read8(ESP_INTRPT);
-			if ((esp->ireg & (ESP_INTR_DC | ESP_INTR_BSERV)) !=
-			    ESP_INTR_BSERV)
+			if (esp->ireg & ~ESP_INTR_BSERV) {
+				mep->error = 1;
 				break;
+			}
 
 			n = MAC_ESP_FIFO_SIZE -
 			    (esp_read8(ESP_FFLAGS) & ESP_FF_FBYTES);

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 044/133] media: lirc_zilog: driver only sends LIRCCODE
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (39 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 046/133] pwm: tiehrpwm: Fix runtime PM imbalance at unbind Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 010/133] fcntl: Don't use ambiguous SIG_POLL si_codes Ben Hutchings
                   ` (92 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Sean Young, Mauro Carvalho Chehab

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Sean Young <sean@mess.org>

commit 89d8a2cc51d1f29ea24a0b44dde13253141190a0 upstream.

This driver cannot send pulse, it only accepts driver-dependent codes.

Signed-off-by: Sean Young <sean@mess.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
[bwh: Backported to 3.16: adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/staging/media/lirc/lirc_zilog.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

--- a/drivers/staging/media/lirc/lirc_zilog.c
+++ b/drivers/staging/media/lirc/lirc_zilog.c
@@ -300,7 +300,7 @@ static void release_ir_tx(struct kref *r
 	struct IR_tx *tx = container_of(ref, struct IR_tx, ref);
 	struct IR *ir = tx->ir;
 
-	ir->l.features &= ~LIRC_CAN_SEND_PULSE;
+	ir->l.features &= ~LIRC_CAN_SEND_LIRCCODE;
 	/* Don't put_ir_device(tx->ir) here, so our lock doesn't get freed */
 	ir->tx = NULL;
 	kfree(tx);
@@ -1271,14 +1271,14 @@ static long ioctl(struct file *filep, un
 		if (!(features&LIRC_CAN_SEND_MASK))
 			return -ENOSYS;
 
-		result = put_user(LIRC_MODE_PULSE, uptr);
+		result = put_user(LIRC_MODE_LIRCCODE, uptr);
 		break;
 	case LIRC_SET_SEND_MODE:
 		if (!(features&LIRC_CAN_SEND_MASK))
 			return -ENOSYS;
 
 		result = get_user(mode, uptr);
-		if (!result && mode != LIRC_MODE_PULSE)
+		if (!result && mode != LIRC_MODE_LIRCCODE)
 			return -EINVAL;
 		break;
 	default:
@@ -1516,7 +1516,7 @@ static int ir_probe(struct i2c_client *c
 		kref_init(&tx->ref);
 		ir->tx = tx;
 
-		ir->l.features |= LIRC_CAN_SEND_PULSE;
+		ir->l.features |= LIRC_CAN_SEND_LIRCCODE;
 		mutex_init(&tx->client_lock);
 		tx->c = client;
 		tx->need_boot = 1;

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 012/133] printk: only unregister boot consoles when necessary
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (19 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 007/133] powerpc/mm: Build fix for non SPARSEMEM_VMEMAP config Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 003/133] iio: magnetometer: st_magn_core: enable multiread by default for LIS3MDL Ben Hutchings
                   ` (112 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Arnd Bergmann, Thierry Reding, Linus Torvalds, Joe Perches,
	Greg Kroah-Hartman

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Thierry Reding <treding@nvidia.com>

commit 81cc26f2bd11ba4421a17a2d5cebe4bba206c239 upstream.

Boot consoles are typically replaced by proper consoles during the boot
process.  This can be problematic if the boot console data is part of
the init section that is reclaimed late during boot.  If the proper
console does not register before this point in time, the boot console
will need to be removed (so that the freed memory is not accessed),
leaving the system without output for some time.

There are various reasons why the proper console may not register early
enough, such as deferred probe or the driver being a loadable module.
If that happens, there is some amount of time where no console messages
are visible to the user, which in turn can mean that they won't see
crashes or other potentially useful information.

To avoid this situation, only remove the boot console when it resides in
the init section.  Code exists to replace the boot console by the proper
console when it is registered, keeping a seamless transition between the
boot and proper consoles.

Signed-off-by: Thierry Reding <treding@nvidia.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Joe Perches <joe@perches.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 kernel/printk/printk.c | 26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
@@ -47,6 +47,7 @@
 #include <linux/utsname.h>
 
 #include <asm/uaccess.h>
+#include <asm-generic/sections.h>
 
 #define CREATE_TRACE_POINTS
 #include <trace/events/printk.h>
@@ -2558,13 +2559,36 @@ int unregister_console(struct console *c
 }
 EXPORT_SYMBOL(unregister_console);
 
+/*
+ * Some boot consoles access data that is in the init section and which will
+ * be discarded after the initcalls have been run. To make sure that no code
+ * will access this data, unregister the boot consoles in a late initcall.
+ *
+ * If for some reason, such as deferred probe or the driver being a loadable
+ * module, the real console hasn't registered yet at this point, there will
+ * be a brief interval in which no messages are logged to the console, which
+ * makes it difficult to diagnose problems that occur during this time.
+ *
+ * To mitigate this problem somewhat, only unregister consoles whose memory
+ * intersects with the init section. Note that code exists elsewhere to get
+ * rid of the boot console as soon as the proper console shows up, so there
+ * won't be side-effects from postponing the removal.
+ */
 static int __init printk_late_init(void)
 {
 	struct console *con;
 
 	for_each_console(con) {
 		if (!keep_bootcon && con->flags & CON_BOOT) {
-			unregister_console(con);
+			/*
+			 * Make sure to unregister boot consoles whose data
+			 * resides in the init section before the init section
+			 * is discarded. Boot consoles whose data will stick
+			 * around will automatically be unregistered when the
+			 * proper console replaces them.
+			 */
+			if (init_section_intersects(con, sizeof(*con)))
+				unregister_console(con);
 		}
 	}
 	hotcpu_notifier(console_cpu_notify, 0);

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 023/133] scsi: zfcp: fix queuecommand for scsi_eh commands when DIX enabled
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (4 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 018/133] wcn36xx: Introduce mutual exclusion of fw configuration Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 022/133] x86/fsgsbase/64: Report FSBASE and GSBASE correctly in core dumps Ben Hutchings
                   ` (127 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Martin K. Petersen, Steffen Maier, Benjamin Block

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Steffen Maier <maier@linux.vnet.ibm.com>

commit 71b8e45da51a7b64a23378221c0a5868bd79da4f upstream.

Since commit db007fc5e20c ("[SCSI] Command protection operation"),
scsi_eh_prep_cmnd() saves scmd->prot_op and temporarily resets it to
SCSI_PROT_NORMAL.
Other FCP LLDDs such as qla2xxx and lpfc shield their queuecommand()
to only access any of scsi_prot_sg...() if
(scsi_get_prot_op(cmd) != SCSI_PROT_NORMAL).

Do the same thing for zfcp, which introduced DIX support with
commit ef3eb71d8ba4 ("[SCSI] zfcp: Introduce experimental support for
DIF/DIX").

Otherwise, TUR SCSI commands as part of scsi_eh likely fail in zfcp,
because the regular SCSI command with DIX protection data, that scsi_eh
re-uses in scsi_send_eh_cmnd(), of course still has
(scsi_prot_sg_count() != 0) and so zfcp sends down bogus requests to the
FCP channel hardware.

This causes scsi_eh_test_devices() to have (finish_cmds == 0)
[not SCSI device is online or not scsi_eh_tur() failed]
so regular SCSI commands, that caused / were affected by scsi_eh,
are moved to work_q and scsi_eh_test_devices() itself returns false.
In turn, it unnecessarily escalates in our case in scsi_eh_ready_devs()
beyond host reset to finally scsi_eh_offline_sdevs()
which sets affected SCSI devices offline with the following kernel message:

"kernel: sd H:0:T:L: Device offlined - not ready after error recovery"

Signed-off-by: Steffen Maier <maier@linux.vnet.ibm.com>
Fixes: ef3eb71d8ba4 ("[SCSI] zfcp: Introduce experimental support for DIF/DIX")
Reviewed-by: Benjamin Block <bblock@linux.vnet.ibm.com>
Signed-off-by: Benjamin Block <bblock@linux.vnet.ibm.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/s390/scsi/zfcp_fsf.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

--- a/drivers/s390/scsi/zfcp_fsf.c
+++ b/drivers/s390/scsi/zfcp_fsf.c
@@ -2259,7 +2259,8 @@ int zfcp_fsf_fcp_cmnd(struct scsi_cmnd *
 	fcp_cmnd = (struct fcp_cmnd *) &req->qtcb->bottom.io.fcp_cmnd;
 	zfcp_fc_scsi_to_fcp(fcp_cmnd, scsi_cmnd, 0);
 
-	if (scsi_prot_sg_count(scsi_cmnd)) {
+	if ((scsi_get_prot_op(scsi_cmnd) != SCSI_PROT_NORMAL) &&
+	    scsi_prot_sg_count(scsi_cmnd)) {
 		zfcp_qdio_set_data_div(qdio, &req->qdio_req,
 				       scsi_prot_sg_count(scsi_cmnd));
 		retval = zfcp_qdio_sbals_from_sg(qdio, &req->qdio_req,

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 034/133] btrfs: resume qgroup rescan on rw remount
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (29 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 006/133] media: docs-rst: v4l: Fix sink compose selection target documentation Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 036/133] perf events parse: Use just one parse events state struct Ben Hutchings
                   ` (102 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, David Sterba, Nikolay Borisov, Jeff Mahoney, Aleksa Sarai

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Aleksa Sarai <asarai@suse.de>

commit 6c6b5a39c4bf3dbd8cf629c9f5450e983c19dbb9 upstream.

Several distributions mount the "proper root" as ro during initrd and
then remount it as rw before pivot_root(2). Thus, if a rescan had been
aborted by a previous shutdown, the rescan would never be resumed.

This issue would manifest itself as several btrfs ioctl(2)s causing the
entire machine to hang when btrfs_qgroup_wait_for_completion was hit
(due to the fs_info->qgroup_rescan_running flag being set but the rescan
itself not being resumed). Notably, Docker's btrfs storage driver makes
regular use of BTRFS_QUOTA_CTL_DISABLE and BTRFS_IOC_QUOTA_RESCAN_WAIT
(causing this problem to be manifested on boot for some machines).

Cc: Jeff Mahoney <jeffm@suse.com>
Fixes: b382a324b60f ("Btrfs: fix qgroup rescan resume on mount")
Signed-off-by: Aleksa Sarai <asarai@suse.de>
Reviewed-by: Nikolay Borisov <nborisov@suse.com>
Tested-by: Nikolay Borisov <nborisov@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
[bwh: Backported to 3.16: add #include "qgroup.h"]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
--- a/fs/btrfs/super.c
+++ b/fs/btrfs/super.c
@@ -59,6 +59,7 @@
 #include "free-space-cache.h"
 #include "backref.h"
 #include "tests/btrfs-tests.h"
+#include "qgroup.h"
 
 #define CREATE_TRACE_POINTS
 #include <trace/events/btrfs.h>
@@ -1495,6 +1496,8 @@ static int btrfs_remount(struct super_bl
 			goto restore;
 		}
 
+		btrfs_qgroup_rescan_resume(fs_info);
+
 		if (!fs_info->uuid_root) {
 			btrfs_info(fs_info, "creating UUID tree");
 			ret = btrfs_create_uuid_tree(fs_info);

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 027/133] scsi: zfcp: fix missing trace records for early returns in TMF eh handlers
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (31 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 036/133] perf events parse: Use just one parse events state struct Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 038/133] iwlwifi: pci: add new PCI ID for 7265D Ben Hutchings
                   ` (100 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Martin K. Petersen, Steffen Maier, Benjamin Block

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Steffen Maier <maier@linux.vnet.ibm.com>

commit 1a5d999ebfc7bfe28deb48931bb57faa8e4102b6 upstream.

For problem determination we need to see that we were in scsi_eh
as well as whether and why we were successful or not.

The following commits introduced new early returns without adding
a trace record:

v2.6.35 commit a1dbfddd02d2
("[SCSI] zfcp: Pass return code from fc_block_scsi_eh to scsi eh")
on fc_block_scsi_eh() returning != 0 which is FAST_IO_FAIL,

v2.6.30 commit 63caf367e1c9
("[SCSI] zfcp: Improve reliability of SCSI eh handlers in zfcp")
on not having gotten an FSF request after the maximum number of retry
attempts and thus could not issue a TMF and has to return FAILED.

Signed-off-by: Steffen Maier <maier@linux.vnet.ibm.com>
Fixes: a1dbfddd02d2 ("[SCSI] zfcp: Pass return code from fc_block_scsi_eh to scsi eh")
Fixes: 63caf367e1c9 ("[SCSI] zfcp: Improve reliability of SCSI eh handlers in zfcp")
Reviewed-by: Benjamin Block <bblock@linux.vnet.ibm.com>
Signed-off-by: Benjamin Block <bblock@linux.vnet.ibm.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/s390/scsi/zfcp_scsi.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

--- a/drivers/s390/scsi/zfcp_scsi.c
+++ b/drivers/s390/scsi/zfcp_scsi.c
@@ -294,8 +294,10 @@ static int zfcp_task_mgmt_function(struc
 
 		zfcp_erp_wait(adapter);
 		ret = fc_block_scsi_eh(scpnt);
-		if (ret)
+		if (ret) {
+			zfcp_dbf_scsi_devreset("fiof", scpnt, tm_flags, NULL);
 			return ret;
+		}
 
 		if (!(atomic_read(&adapter->status) &
 		      ZFCP_STATUS_COMMON_RUNNING)) {
@@ -303,8 +305,10 @@ static int zfcp_task_mgmt_function(struc
 			return SUCCESS;
 		}
 	}
-	if (!fsf_req)
+	if (!fsf_req) {
+		zfcp_dbf_scsi_devreset("reqf", scpnt, tm_flags, NULL);
 		return FAILED;
+	}
 
 	wait_for_completion(&fsf_req->completion);
 

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 024/133] scsi: zfcp: add handling for FCP_RESID_OVER to the fcp ingress path
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (42 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 035/133] perf events parse: Rename parsing state struct to clearer name Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 020/133] media: v4l2-compat-ioctl32: Fix timespec conversion Ben Hutchings
                   ` (89 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Benjamin Block, Steffen Maier, Martin K. Petersen,
	Luke M. Hopkins

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Benjamin Block <bblock@linux.vnet.ibm.com>

commit a099b7b1fc1f0418ab8d79ecf98153e1e134656e upstream.

Up until now zfcp would just ignore the FCP_RESID_OVER flag in the FCP
response IU. When this flag is set, it is possible, in regards to the
FCP standard, that the storage-server processes the command normally, up
to the point where data is missing and simply ignores those.

In this case no CHECK CONDITION would be set, and because we ignored the
FCP_RESID_OVER flag we resulted in at least a data loss or even
-corruption as a follow-up error, depending on how the
applications/layers on top behave. To prevent this, we now set the
host-byte of the corresponding scsi_cmnd to DID_ERROR.

Other storage-behaviors, where the same condition results in a CHECK
CONDITION set in the answer, don't need to be changed as they are
handled in the mid-layer already.

Following is an example trace record decoded with zfcpdbf from the
s390-tools package. We forcefully injected a fc_dl which is one byte too
small:

Timestamp      : ...
Area           : SCSI
Subarea        : 00
Level          : 3
Exception      : -
CPU ID         : ..
Caller         : 0x...
Record ID      : 1
Tag            : rsl_err
Request ID     : 0x...
SCSI ID        : 0x...
SCSI LUN       : 0x...
SCSI result    : 0x00070000
                     ^^DID_ERROR
SCSI retries   : 0x..
SCSI allowed   : 0x..
SCSI scribble  : 0x...
SCSI opcode    : 2a000000 00000000 08000000 00000000
FCP rsp inf cod: 0x00
FCP rsp IU     : 00000000 00000000 00000400 00000001
                                       ^^fr_flags==FCP_RESID_OVER
                                         ^^fr_status==SAM_STAT_GOOD
                                            ^^^^^^^^fr_resid
                 00000000 00000000

As of now, we don't actively handle to possibility that a response IU
has both flags - FCP_RESID_OVER and FCP_RESID_UNDER - set at once.

Reported-by: Luke M. Hopkins <lmhopkin@us.ibm.com>
Reviewed-by: Steffen Maier <maier@linux.vnet.ibm.com>
Fixes: 553448f6c483 ("[SCSI] zfcp: Message cleanup")
Fixes: ea127f975424 ("[PATCH] s390 (7/7): zfcp host adapter.") (tglx/history.git)
Signed-off-by: Benjamin Block <bblock@linux.vnet.ibm.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/s390/scsi/zfcp_fc.h | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

--- a/drivers/s390/scsi/zfcp_fc.h
+++ b/drivers/s390/scsi/zfcp_fc.h
@@ -4,7 +4,7 @@
  * Fibre Channel related definitions and inline functions for the zfcp
  * device driver
  *
- * Copyright IBM Corp. 2009
+ * Copyright IBM Corp. 2009, 2017
  */
 
 #ifndef ZFCP_FC_H
@@ -291,6 +291,10 @@ void zfcp_fc_eval_fcp_rsp(struct fcp_res
 		     !(rsp_flags & FCP_SNS_LEN_VAL) &&
 		     fcp_rsp->resp.fr_status == SAM_STAT_GOOD)
 			set_host_byte(scsi, DID_ERROR);
+	} else if (unlikely(rsp_flags & FCP_RESID_OVER)) {
+		/* FCP_DL was not sufficient for SCSI data length */
+		if (fcp_rsp->resp.fr_status == SAM_STAT_GOOD)
+			set_host_byte(scsi, DID_ERROR);
 	}
 }
 

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 040/133] skd: Avoid that module unloading triggers a use-after-free
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (21 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 003/133] iio: magnetometer: st_magn_core: enable multiread by default for LIS3MDL Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 042/133] net: don't decrement kobj reference count on init failure Ben Hutchings
                   ` (110 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Hannes Reinecke, Bart Van Assche, Jens Axboe,
	Christoph Hellwig, Johannes Thumshirn

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Bart Van Assche <bart.vanassche@wdc.com>

commit 7277cc67b3916eed47558c64f9c9c0de00a35cda upstream.

Since put_disk() triggers a disk_release() call and since that
last function calls blk_put_queue() if disk->queue != NULL, clear
the disk->queue pointer before calling put_disk(). This avoids
that unloading the skd kernel module triggers the following
use-after-free:

WARNING: CPU: 8 PID: 297 at lib/refcount.c:128 refcount_sub_and_test+0x70/0x80
refcount_t: underflow; use-after-free.
CPU: 8 PID: 297 Comm: kworker/8:1 Not tainted 4.11.10-300.fc26.x86_64 #1
Workqueue: events work_for_cpu_fn
Call Trace:
 dump_stack+0x63/0x84
 __warn+0xcb/0xf0
 warn_slowpath_fmt+0x5a/0x80
 refcount_sub_and_test+0x70/0x80
 refcount_dec_and_test+0x11/0x20
 kobject_put+0x1f/0x50
 blk_put_queue+0x15/0x20
 disk_release+0xae/0xf0
 device_release+0x32/0x90
 kobject_release+0x67/0x170
 kobject_put+0x2b/0x50
 put_disk+0x17/0x20
 skd_destruct+0x5c/0x890 [skd]
 skd_pci_probe+0x124d/0x13a0 [skd]
 local_pci_probe+0x42/0xa0
 work_for_cpu_fn+0x14/0x20
 process_one_work+0x19e/0x470
 worker_thread+0x1dc/0x4a0
 kthread+0x125/0x140
 ret_from_fork+0x25/0x30

Signed-off-by: Bart Van Assche <bart.vanassche@wdc.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Hannes Reinecke <hare@suse.de>
Cc: Johannes Thumshirn <jthumshirn@suse.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/block/skd_main.c | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

--- a/drivers/block/skd_main.c
+++ b/drivers/block/skd_main.c
@@ -4685,15 +4685,16 @@ static void skd_free_disk(struct skd_dev
 {
 	struct gendisk *disk = skdev->disk;
 
-	if (disk != NULL) {
-		struct request_queue *q = disk->queue;
+	if (disk && (disk->flags & GENHD_FL_UP))
+		del_gendisk(disk);
 
-		if (disk->flags & GENHD_FL_UP)
-			del_gendisk(disk);
-		if (q)
-			blk_cleanup_queue(q);
-		put_disk(disk);
+	if (skdev->queue) {
+		blk_cleanup_queue(skdev->queue);
+		skdev->queue = NULL;
+		disk->queue = NULL;
 	}
+
+	put_disk(disk);
 	skdev->disk = NULL;
 }
 

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 038/133] iwlwifi: pci: add new PCI ID for 7265D
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (32 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 027/133] scsi: zfcp: fix missing trace records for early returns in TMF eh handlers Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 025/133] scsi: zfcp: fix capping of unsuccessful GPN_FT SAN response trace records Ben Hutchings
                   ` (99 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Luca Coelho

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Luca Coelho <luciano.coelho@intel.com>

commit 3f7a5e13e85026b6e460bbd6e87f87379421d272 upstream.

We have a new PCI subsystem ID for 7265D.  Add it to the list.

Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
[bwh: Backported to 3.16: adjust filename]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/net/wireless/iwlwifi/pcie/drv.c | 1 +
 1 file changed, 1 insertion(+)

--- a/drivers/net/wireless/iwlwifi/pcie/drv.c
+++ b/drivers/net/wireless/iwlwifi/pcie/drv.c
@@ -403,6 +403,7 @@ static DEFINE_PCI_DEVICE_TABLE(iwl_hw_ca
 	{IWL_PCI_DEVICE(0x095B, 0x520A, iwl7265_2ac_cfg)},
 	{IWL_PCI_DEVICE(0x095A, 0x9000, iwl7265_2ac_cfg)},
 	{IWL_PCI_DEVICE(0x095A, 0x9400, iwl7265_2ac_cfg)},
+	{IWL_PCI_DEVICE(0x095A, 0x9E10, iwl7265_2ac_cfg)},
 
 /* 8000 Series */
 	{IWL_PCI_DEVICE(0x24F3, 0x0010, iwl8260_2ac_cfg)},

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 045/133] staging/rts5208: fix incorrect shift to extract upper nybble
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (35 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 037/133] drm/ttm: Fix accounting error when fail to get pages for pool Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 016/133] PCI: shpchp: Enable bridge bus mastering if MSI is enabled Ben Hutchings
                   ` (96 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Colin Ian King, Greg Kroah-Hartman

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Colin Ian King <colin.king@canonical.com>

commit 34ff1bf4920471cff66775dc39537b15c5f0feff upstream.

The mask of sns_key_info1 suggests the upper nybble is being extracted
however the following shift of 8 bits is too large and always results in
0.  Fix this by shifting only by 4 bits to correctly get the upper nybble.

Detected by CoverityScan, CID#142891 ("Operands don't affect result")

Fixes: fa590c222fba ("staging: rts5208: add support for rts5208 and rts5288")
Signed-off-by: Colin Ian King <colin.king@canonical.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/staging/rts5208/rtsx_scsi.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/staging/rts5208/rtsx_scsi.c
+++ b/drivers/staging/rts5208/rtsx_scsi.c
@@ -417,7 +417,7 @@ void set_sense_data(struct rtsx_chip *ch
 	sense->ascq = ascq;
 	if (sns_key_info0 != 0) {
 		sense->sns_key_info[0] = SKSV | sns_key_info0;
-		sense->sns_key_info[1] = (sns_key_info1 & 0xf0) >> 8;
+		sense->sns_key_info[1] = (sns_key_info1 & 0xf0) >> 4;
 		sense->sns_key_info[2] = sns_key_info1 & 0x0f;
 	}
 }

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 015/133] powerpc/mm: Fix check of multiple 16G pages from device tree
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (26 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 001/133] ARM: dts: dra7-evm: Rename mmc2_3v3 supply to evm_3v3_sw Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 026/133] scsi: zfcp: fix passing fsf_req to SCSI trace on TMF to correlate with HBA Ben Hutchings
                   ` (105 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Rui Teng, Anshuman Khandual, Michael Ellerman

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Rui Teng <rui.teng@linux.vnet.ibm.com>

commit 23493c121912a39f0262e0dbeb236e1d39efa4d5 upstream.

The offset of hugepage block will not be 16G, if the expected
page is more than one. Calculate the totol size instead of the
hardcode value.

Fixes: 4792adbac9eb ("powerpc: Don't use a 16G page if beyond mem= limits")
Signed-off-by: Rui Teng <rui.teng@linux.vnet.ibm.com>
Tested-by: Anshuman Khandual <khandual@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 arch/powerpc/mm/hash_utils_64.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/arch/powerpc/mm/hash_utils_64.c
+++ b/arch/powerpc/mm/hash_utils_64.c
@@ -433,7 +433,7 @@ static int __init htab_dt_scan_hugepage_
 	printk(KERN_INFO "Huge page(16GB) memory: "
 			"addr = 0x%lX size = 0x%lX pages = %d\n",
 			phys_addr, block_size, expected_pages);
-	if (phys_addr + (16 * GB) <= memblock_end_of_DRAM()) {
+	if (phys_addr + block_size * expected_pages <= memblock_end_of_DRAM()) {
 		memblock_reserve(phys_addr, block_size * expected_pages);
 		add_gpage(phys_addr, block_size, expected_pages);
 	}

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 021/133] ARM: OMAP2+: omap_device: drop broken RPM status update from suspend_noirq
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (7 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 008/133] IB/core: Fix the validations of a multicast LID in attach or detach operations Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 030/133] scsi: mac_esp: Fix PIO transfers for MESSAGE IN phase Ben Hutchings
                   ` (124 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Nishanth Menon, Alan Stern, Ulf Hansson, Dave Gerlach,
	Tony Lindgren, Johan Hovold, Kevin Hilman, Grygorii Strashko,
	Rafael J. Wysocki

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Johan Hovold <johan@kernel.org>

commit 90de9634a5d57b92d8af4ec23aa2c9b297ec8168 upstream.

Since commit a8636c89648a ("PM / Runtime: Don't allow to suspend a
device with an active child"), which went into 4.10, it is no longer
permitted to set RPM_SUSPENDED state for a device with active children
(unless power.ignore_children is set).

This specifically means that the attempts to do just that from the omap
pm-domain suspend_noirq callback have since been failing whenever a
child is active, for example:

  am335x-usb-childs 47400000.usb: runtime PM trying to suspend
    device but active child

Silence this warning by dropping the broken pm_runtime_set_suspended()
call from the omap suspend_noirq callback along with the redundant
pm_runtime_set_active() in resume_noirq.

This effectively reverts commit 3522bf7bfa24 ("ARM: OMAP2+: omap_device:
maintain sane runtime pm status around suspend/resume"), which started
updating the RPM state after the runtime_suspend callback (!) for active
omap devices had been called during system suspend. The rationale was
that a later pm_runtime_get_sync() would then fail (even after runtime
pm had been disabled) and that this in turn would avoid any external
aborts when accessing registers with clocks disabled. (See also commit
6f3c77b040fc ("PM / Runtime: let rpm_resume() succeed if RPM_ACTIVE,
even when disabled, v2").

But during the suspend_noirq phase all children would already have been
suspended and their drivers would specifically not attempt any further
register accesses. And if this was all just a workaround for random
device drivers doing cross-tree calls during system suspend, those
drivers should be fixed and updated to explicitly model such
dependencies using device-links instead (and either way, any such calls
have been causing crashes since 4.10).

Fixes: 3522bf7bfa24 ("ARM: OMAP2+: omap_device: maintain sane runtime pm status around suspend/resume")
Fixes: a8636c89648a ("PM / Runtime: Don't allow to suspend a device with an active child")
Cc: Alan Stern <stern@rowland.harvard.edu>
Cc: Dave Gerlach <d-gerlach@ti.com>
Cc: Kevin Hilman <khilman@baylibre.com>
Cc: Nishanth Menon <nm@ti.com>
Cc: Rafael J. Wysocki <rjw@rjwysocki.net>
Cc: Tony Lindgren <tony@atomide.com>
Cc: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Johan Hovold <johan@kernel.org>
Tested-by: Grygorii Strashko <grygorii.strashko@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 arch/arm/mach-omap2/omap_device.c | 10 ----------
 1 file changed, 10 deletions(-)

--- a/arch/arm/mach-omap2/omap_device.c
+++ b/arch/arm/mach-omap2/omap_device.c
@@ -640,7 +640,6 @@ static int _od_suspend_noirq(struct devi
 
 	if (!ret && !pm_runtime_status_suspended(dev)) {
 		if (pm_generic_runtime_suspend(dev) == 0) {
-			pm_runtime_set_suspended(dev);
 			omap_device_idle(pdev);
 			od->flags |= OMAP_DEVICE_SUSPENDED;
 		}
@@ -657,15 +656,6 @@ static int _od_resume_noirq(struct devic
 	if (od->flags & OMAP_DEVICE_SUSPENDED) {
 		od->flags &= ~OMAP_DEVICE_SUSPENDED;
 		omap_device_enable(pdev);
-		/*
-		 * XXX: we run before core runtime pm has resumed itself. At
-		 * this point in time, we just restore the runtime pm state and
-		 * considering symmetric operations in resume, we donot expect
-		 * to fail. If we failed, something changed in core runtime_pm
-		 * framework OR some device driver messed things up, hence, WARN
-		 */
-		WARN(pm_runtime_set_active(dev),
-		     "Could not set %s runtime state active\n", dev_name(dev));
 		pm_generic_runtime_resume(dev);
 	}
 

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 010/133] fcntl: Don't use ambiguous SIG_POLL si_codes
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (40 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 044/133] media: lirc_zilog: driver only sends LIRCCODE Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 035/133] perf events parse: Rename parsing state struct to clearer name Ben Hutchings
                   ` (91 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Eric W. Biederman

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: "Eric W. Biederman" <ebiederm@xmission.com>

commit d08477aa975e97f1dc64c0ae59cebf98520456ce upstream.

We have a weird and problematic intersection of features that when
they all come together result in ambiguous siginfo values, that
we can not support properly.

- Supporting fcntl(F_SETSIG,...) with arbitrary valid signals.

- Using positive values for POLL_IN, POLL_OUT, POLL_MSG, ..., etc
  that imply they are signal specific si_codes and using the
  aforementioned arbitrary signal to deliver them.

- Supporting injection of arbitrary siginfo values for debugging and
  checkpoint/restore.

The result is that just looking at siginfo si_codes of 1 to 6 are
ambigious.  It could either be a signal specific si_code or it could
be a generic si_code.

For most of the kernel this is a non-issue but for sending signals
with siginfo it is impossible to play back the kernel signals and
get the same result.

Strictly speaking when the si_code was changed from SI_SIGIO to
POLL_IN and friends between 2.2 and 2.4 this functionality was not
ambiguous, as only real time signals were supported.  Before 2.4 was
released the kernel began supporting siginfo with non realtime signals
so they could give details of why the signal was sent.

The result is that if F_SETSIG is set to one of the signals with signal
specific si_codes then user space can not know why the signal was sent.

I grepped through a bunch of userspace programs using debian code
search to get a feel for how often people choose a signal that results
in an ambiguous si_code.  I only found one program doing so and it was
using SIGCHLD to test the F_SETSIG functionality, and did not appear
to be a real world usage.

Therefore the ambiguity does not appears to be a real world problem in
practice.  Remove the ambiguity while introducing the smallest chance
of breakage by changing the si_code to SI_SIGIO when signals with
signal specific si_codes are targeted.

Fixes: v2.3.40 -- Added support for queueing non-rt signals
Fixes: v2.3.21 -- Changed the si_code from SI_SIGIO
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 fs/fcntl.c                         | 13 ++++++++++++-
 include/linux/signal.h             |  8 ++++++++
 include/uapi/asm-generic/siginfo.h |  4 ++--
 3 files changed, 22 insertions(+), 3 deletions(-)

--- a/fs/fcntl.c
+++ b/fs/fcntl.c
@@ -472,10 +472,21 @@ static void send_sigio_to_task(struct ta
 			si.si_signo = signum;
 			si.si_errno = 0;
 		        si.si_code  = reason;
+			/*
+			 * Posix definies POLL_IN and friends to be signal
+			 * specific si_codes for SIG_POLL.  Linux extended
+			 * these si_codes to other signals in a way that is
+			 * ambiguous if other signals also have signal
+			 * specific si_codes.  In that case use SI_SIGIO instead
+			 * to remove the ambiguity.
+			 */
+			if (sig_specific_sicodes(signum))
+				si.si_code = SI_SIGIO;
+
 			/* Make sure we are called with one of the POLL_*
 			   reasons, otherwise we could leak kernel stack into
 			   userspace.  */
-			BUG_ON((reason & __SI_MASK) != __SI_POLL);
+			BUG_ON((reason < POLL_IN) || ((reason - POLL_IN) >= NSIGPOLL));
 			if (reason - POLL_IN >= NSIGPOLL)
 				si.si_band  = ~0L;
 			else
--- a/include/linux/signal.h
+++ b/include/linux/signal.h
@@ -424,10 +424,18 @@ int unhandled_signal(struct task_struct
         rt_sigmask(SIGCONT)   |  rt_sigmask(SIGCHLD)   | \
 	rt_sigmask(SIGWINCH)  |  rt_sigmask(SIGURG)    )
 
+#define SIG_SPECIFIC_SICODES_MASK (\
+	rt_sigmask(SIGILL)    |  rt_sigmask(SIGFPE)    | \
+	rt_sigmask(SIGSEGV)   |  rt_sigmask(SIGBUS)    | \
+	rt_sigmask(SIGTRAP)   |  rt_sigmask(SIGCHLD)   | \
+	rt_sigmask(SIGPOLL)   |  rt_sigmask(SIGSYS)    | \
+	SIGEMT_MASK                                    )
+
 #define sig_kernel_only(sig)		siginmask(sig, SIG_KERNEL_ONLY_MASK)
 #define sig_kernel_coredump(sig)	siginmask(sig, SIG_KERNEL_COREDUMP_MASK)
 #define sig_kernel_ignore(sig)		siginmask(sig, SIG_KERNEL_IGNORE_MASK)
 #define sig_kernel_stop(sig)		siginmask(sig, SIG_KERNEL_STOP_MASK)
+#define sig_specific_sicodes(sig)	siginmask(sig, SIG_SPECIFIC_SICODES_MASK)
 
 #define sig_user_defined(t, signr) \
 	(((t)->sighand->action[(signr)-1].sa.sa_handler != SIG_DFL) &&	\
--- a/include/uapi/asm-generic/siginfo.h
+++ b/include/uapi/asm-generic/siginfo.h
@@ -161,7 +161,7 @@ typedef struct siginfo {
 #define SI_TIMER __SI_CODE(__SI_TIMER,-2) /* sent by timer expiration */
 #define SI_MESGQ __SI_CODE(__SI_MESGQ,-3) /* sent by real time mesq state change */
 #define SI_ASYNCIO	-4		/* sent by AIO completion */
-#define SI_SIGIO	-5		/* sent by queued SIGIO */
+#define SI_SIGIO __SI_CODE(__SI_POLL,-5) /* sent by queued SIGIO */
 #define SI_TKILL	-6		/* sent by tkill system call */
 #define SI_DETHREAD	-7		/* sent by execve() killing subsidiary threads */
 
@@ -234,7 +234,7 @@ typedef struct siginfo {
 #define NSIGCHLD	6
 
 /*
- * SIGPOLL si_codes
+ * SIGPOLL (or any other signal without signal specific si_codes) si_codes
  */
 #define POLL_IN		(__SI_POLL|1)	/* data input available */
 #define POLL_OUT	(__SI_POLL|2)	/* output buffers available */

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 002/133] ARM: dts: dra7-evm: Correct the vmmc-supply for mmc2
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (37 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 016/133] PCI: shpchp: Enable bridge bus mastering if MSI is enabled Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 046/133] pwm: tiehrpwm: Fix runtime PM imbalance at unbind Ben Hutchings
                   ` (94 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Ravikumar Kattekola, Kishon Vijay Abraham I, Sekhar Nori,
	Tony Lindgren

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Ravikumar Kattekola <rk@ti.com>

commit b5ca62a53d2df30432118edeff61acc8717d2515 upstream.

On DRA75x EVM, MMC2 vdd/ios are connected to a common supply fixed at 1.8V
not 3.3V

Fixes: 6cf02dbb4b71 ("ARM: dts: dra7-evm: Add mmc2 node for eMMC support")
Signed-off-by: Ravikumar Kattekola <rk@ti.com>
Signed-off-by: Sekhar Nori <nsekhar@ti.com>
Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
[bwh: Backported to 3.16: adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 arch/arm/boot/dts/dra7-evm.dts | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

--- a/arch/arm/boot/dts/dra7-evm.dts
+++ b/arch/arm/boot/dts/dra7-evm.dts
@@ -18,6 +18,14 @@
 		reg = <0x80000000 0x60000000>; /* 1536 MB */
 	};
 
+	evm_1v8_sw: fixedregulator-evm_1v8 {
+		compatible = "regulator-fixed";
+		regulator-name = "evm_1v8";
+		vin-supply = <&smps9_reg>;
+		regulator-min-microvolt = <1800000>;
+		regulator-max-microvolt = <1800000>;
+	};
+
 	evm_3v3_sw: fixedregulator-evm_3v3_sw {
 		compatible = "regulator-fixed";
 		regulator-name = "evm_3v3_sw";
@@ -325,7 +333,7 @@
 
 &mmc2 {
 	status = "okay";
-	vmmc-supply = <&evm_3v3_sw>;
+	vmmc-supply = <&evm_1v8_sw>;
 	bus-width = <8>;
 };
 

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 025/133] scsi: zfcp: fix capping of unsuccessful GPN_FT SAN response trace records
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (33 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 038/133] iwlwifi: pci: add new PCI ID for 7265D Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 037/133] drm/ttm: Fix accounting error when fail to get pages for pool Ben Hutchings
                   ` (98 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Benjamin Block, Steffen Maier, Martin K. Petersen

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Steffen Maier <maier@linux.vnet.ibm.com>

commit 975171b4461be296a35e83ebd748946b81cf0635 upstream.

v4.9 commit aceeffbb59bb ("zfcp: trace full payload of all SAN records
(req,resp,iels)") fixed trace data loss of 2.6.38 commit 2c55b750a884
("[SCSI] zfcp: Redesign of the debug tracing for SAN records.")
necessary for problem determination, e.g. to see the
currently active zone set during automatic port scan.

While it already saves space by not dumping any empty residual entries
of the large successful GPN_FT response (4 pages), there are seldom cases
where the GPN_FT response is unsuccessful and likely does not have
FC_NS_FID_LAST set in fp_flags so we did not cap the trace record.
We typically see such case for an initiator WWPN, which is not in any zone.

Cap unsuccessful responses to at least the actual basic CT_IU response
plus whatever fits the SAN trace record built-in "payload" buffer
just in case there's trailing information
of which we would at least see the existence and its beginning.

In order not to erroneously cap successful responses, we need to swap
calling the trace function and setting the CT / ELS status to success (0).

Example trace record pair formatted with zfcpdbf:

Timestamp      : ...
Area           : SAN
Subarea        : 00
Level          : 1
Exception      : -
CPU ID         : ..
Caller         : 0x...
Record ID      : 1
Tag            : fssct_1
Request ID     : 0x<request_id>
Destination ID : 0x00fffffc
SAN req short  : 01000000 fc020000 01720ffc 00000000
                 00000008
SAN req length : 20
|
Timestamp      : ...
Area           : SAN
Subarea        : 00
Level          : 1
Exception      : -
CPU ID         : ..
Caller         : 0x...
Record ID      : 2
Tag            : fsscth2
Request ID     : 0x<request_id>
Destination ID : 0x00fffffc
SAN resp short : 01000000 fc020000 80010000 00090700
                 00000000 00000000 00000000 00000000 [trailing info]
                 00000000 00000000 00000000 00000000 [trailing info]
SAN resp length: 16384
San resp info  : 01000000 fc020000 80010000 00090700
                 00000000 00000000 00000000 00000000 [trailing info]
                 00000000 00000000 00000000 00000000 [trailing info]
                 00000000 00000000 00000000 00000000 [trailing info]
                 00000000 00000000 00000000 00000000 [trailing info]
                 00000000 00000000 00000000 00000000 [trailing info]
                 00000000 00000000 00000000 00000000 [trailing info]
                 00000000 00000000 00000000 00000000 [trailing info]
                 00000000 00000000 00000000 00000000 [trailing info]
                 00000000 00000000 00000000 00000000 [trailing info]
                 00000000 00000000 00000000 00000000 [trailing info]
                 00000000 00000000 00000000 00000000 [trailing info]
                 00000000 00000000 00000000 00000000 [trailing info]
                 00000000 00000000 00000000 00000000 [trailing info]
                 00000000 00000000 00000000 00000000 [trailing info]
                 00000000 00000000 00000000 00000000 [trailing info]

The fix saves all but one of the previously associated 64 PAYload trace
record chunks of size 256 bytes each.

Signed-off-by: Steffen Maier <maier@linux.vnet.ibm.com>
Fixes: aceeffbb59bb ("zfcp: trace full payload of all SAN records (req,resp,iels)")
Fixes: 2c55b750a884 ("[SCSI] zfcp: Redesign of the debug tracing for SAN records.")
Reviewed-by: Benjamin Block <bblock@linux.vnet.ibm.com>
Signed-off-by: Benjamin Block <bblock@linux.vnet.ibm.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/s390/scsi/zfcp_dbf.c | 10 +++++++++-
 drivers/s390/scsi/zfcp_fsf.c |  4 ++--
 2 files changed, 11 insertions(+), 3 deletions(-)

--- a/drivers/s390/scsi/zfcp_dbf.c
+++ b/drivers/s390/scsi/zfcp_dbf.c
@@ -3,7 +3,7 @@
  *
  * Debug traces for zfcp.
  *
- * Copyright IBM Corp. 2002, 2016
+ * Copyright IBM Corp. 2002, 2017
  */
 
 #define KMSG_COMPONENT "zfcp"
@@ -447,6 +447,7 @@ static u16 zfcp_dbf_san_res_cap_len_if_g
 	struct fc_ct_hdr *reqh = sg_virt(ct_els->req);
 	struct fc_ns_gid_ft *reqn = (struct fc_ns_gid_ft *)(reqh + 1);
 	struct scatterlist *resp_entry = ct_els->resp;
+	struct fc_ct_hdr *resph;
 	struct fc_gpn_ft_resp *acc;
 	int max_entries, x, last = 0;
 
@@ -473,6 +474,13 @@ static u16 zfcp_dbf_san_res_cap_len_if_g
 		return len; /* not GPN_FT response so do not cap */
 
 	acc = sg_virt(resp_entry);
+
+	/* cap all but accept CT responses to at least the CT header */
+	resph = (struct fc_ct_hdr *)acc;
+	if ((ct_els->status) ||
+	    (resph->ct_cmd != cpu_to_be16(FC_FS_ACC)))
+		return max(FC_CT_HDR_LEN, ZFCP_DBF_SAN_MAX_PAYLOAD);
+
 	max_entries = (reqh->ct_mr_size * 4 / sizeof(struct fc_gpn_ft_resp))
 		+ 1 /* zfcp_fc_scan_ports: bytes correct, entries off-by-one
 		     * to account for header as 1st pseudo "entry" */;
--- a/drivers/s390/scsi/zfcp_fsf.c
+++ b/drivers/s390/scsi/zfcp_fsf.c
@@ -928,8 +928,8 @@ static void zfcp_fsf_send_ct_handler(str
 
 	switch (header->fsf_status) {
         case FSF_GOOD:
-		zfcp_dbf_san_res("fsscth2", req);
 		ct->status = 0;
+		zfcp_dbf_san_res("fsscth2", req);
 		break;
         case FSF_SERVICE_CLASS_NOT_SUPPORTED:
 		zfcp_fsf_class_not_supp(req);
@@ -1109,8 +1109,8 @@ static void zfcp_fsf_send_els_handler(st
 
 	switch (header->fsf_status) {
 	case FSF_GOOD:
-		zfcp_dbf_san_res("fsselh1", req);
 		send_els->status = 0;
+		zfcp_dbf_san_res("fsselh1", req);
 		break;
 	case FSF_SERVICE_CLASS_NOT_SUPPORTED:
 		zfcp_fsf_class_not_supp(req);

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 004/133] backlight: lm3630a: Bump REG_MAX value to 0x50 instead of 0x1F
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 033/133] iio: accel: st_accel: fix data-ready line configuration Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 019/133] wcn36xx: Remove unnecessary rcu_read_unlock in wcn36xx_bss_info_changed Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 029/133] scsi: zfcp: trace HBA FSF response by default on dismiss or timedout late response Ben Hutchings
                   ` (130 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Lee Jones, Bjorn Andersson, Bhushan Shah, Daniel Thompson

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Bhushan Shah <bshah@kde.org>

commit 06168a64b1ae346816fcd0a0c3ea5276c778408b upstream.

In the lm3630a_chip_init we try to write to 0x50 register, which is
higher value then the max_register value, this resulted in regmap_write
return -EIO.

Fix this by bumping REG_MAX value to 0x50.

This code was introduced with the chip revision in commit 28e64a68a2ef,
however setting filter strength was failing silently because it used
unsigned int for storing and comparing the return values. Bug related to
signedness was fixed in 2a0c316bf3cc, which made it error out correctly
instead of failing silently.

I found this issue by using this driver on LGE Nexus 5 (hammerhead).
After this commit lm3630a_chip_init succeeds instead of failing with
-EIO.

Fixes: 28e64a68a2ef ("backlight: lm3630: apply chip revision")
Fixes: 2a0c316bf3cc ("drivers/video/backlight/lm3630a_bl.c: fix
signedness bug in lm3630a_chip_init()")

Suggested-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Signed-off-by: Bhushan Shah <bshah@kde.org>
Acked-by: Daniel Thompson <daniel.thompson@linaro.org>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/video/backlight/lm3630a_bl.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

--- a/drivers/video/backlight/lm3630a_bl.c
+++ b/drivers/video/backlight/lm3630a_bl.c
@@ -31,7 +31,8 @@
 #define REG_FAULT	0x0B
 #define REG_PWM_OUTLOW	0x12
 #define REG_PWM_OUTHIGH	0x13
-#define REG_MAX		0x1F
+#define REG_FILTER_STRENGTH	0x50
+#define REG_MAX		0x50
 
 #define INT_DEBOUNCE_MSEC	10
 struct lm3630a_chip {
@@ -80,7 +81,7 @@ static int lm3630a_chip_init(struct lm36
 
 	usleep_range(1000, 2000);
 	/* set Filter Strength Register */
-	rval = lm3630a_write(pchip, 0x50, 0x03);
+	rval = lm3630a_write(pchip, REG_FILTER_STRENGTH, 0x03);
 	/* set Cofig. register */
 	rval |= lm3630a_update(pchip, REG_CONFIG, 0x07, pdata->pwm_ctrl);
 	/* set boost control */

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 035/133] perf events parse: Rename parsing state struct to clearer name
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (41 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 010/133] fcntl: Don't use ambiguous SIG_POLL si_codes Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 024/133] scsi: zfcp: add handling for FCP_RESID_OVER to the fcp ingress path Ben Hutchings
                   ` (90 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Wang Nan, Arnaldo Carvalho de Melo, Jiri Olsa, Namhyung Kim,
	Adrian Hunter, David Ahern

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Arnaldo Carvalho de Melo <acme@redhat.com>

commit 5d369a75eda5855d64981668a1d60cfac00d52e9 upstream.

Rename it from 'parse_events_evlist' to 'parse_events_state' to better
state that this is parsing state that has to be passed around.

Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/n/tip-dursqtg2h2w98ztaa297u43x@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
[bwh: Backported to 3.16: change all uses of the name in this version]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
--- a/tools/perf/util/parse-events.c
+++ b/tools/perf/util/parse-events.c
@@ -927,7 +927,7 @@ int parse_events_terms(struct list_head
 
 int parse_events(struct perf_evlist *evlist, const char *str)
 {
-	struct parse_events_evlist data = {
+	struct parse_events_state data = {
 		.list = LIST_HEAD_INIT(data.list),
 		.idx  = evlist->nr_entries,
 	};
--- a/tools/perf/util/parse-events.h
+++ b/tools/perf/util/parse-events.h
@@ -61,7 +61,7 @@ struct parse_events_term {
 	struct list_head list;
 };
 
-struct parse_events_evlist {
+struct parse_events_state {
 	struct list_head list;
 	int idx;
 	int nr_groups;
--- a/tools/perf/util/parse-events.y
+++ b/tools/perf/util/parse-events.y
@@ -30,7 +30,7 @@ do { \
 } while (0)
 
 static inc_group_count(struct list_head *list,
-		       struct parse_events_evlist *data)
+		       struct parse_events_state *data)
 {
 	/* Count groups only have more than 1 members */
 	if (!list_is_last(list->next, list))
@@ -93,7 +93,7 @@ PE_START_TERMS  start_terms
 
 start_events: groups
 {
-	struct parse_events_evlist *data = _data;
+	struct parse_events_state *data = _data;
 
 	parse_events_update_lists($1, &data->list);
 }
@@ -202,7 +202,7 @@ event_def: event_pmu |
 event_pmu:
 PE_NAME '/' event_config '/'
 {
-	struct parse_events_evlist *data = _data;
+	struct parse_events_state *data = _data;
 	struct list_head *list;
 
 	ALLOC_LIST(list);
@@ -219,7 +219,7 @@ PE_VALUE_SYM_SW
 event_legacy_symbol:
 value_sym '/' event_config '/'
 {
-	struct parse_events_evlist *data = _data;
+	struct parse_events_state *data = _data;
 	struct list_head *list;
 	int type = $1 >> 16;
 	int config = $1 & 255;
@@ -233,7 +233,7 @@ value_sym '/' event_config '/'
 |
 value_sym sep_slash_dc
 {
-	struct parse_events_evlist *data = _data;
+	struct parse_events_state *data = _data;
 	struct list_head *list;
 	int type = $1 >> 16;
 	int config = $1 & 255;
@@ -247,7 +247,7 @@ value_sym sep_slash_dc
 event_legacy_cache:
 PE_NAME_CACHE_TYPE '-' PE_NAME_CACHE_OP_RESULT '-' PE_NAME_CACHE_OP_RESULT
 {
-	struct parse_events_evlist *data = _data;
+	struct parse_events_state *data = _data;
 	struct list_head *list;
 
 	ALLOC_LIST(list);
@@ -257,7 +257,7 @@ PE_NAME_CACHE_TYPE '-' PE_NAME_CACHE_OP_
 |
 PE_NAME_CACHE_TYPE '-' PE_NAME_CACHE_OP_RESULT
 {
-	struct parse_events_evlist *data = _data;
+	struct parse_events_state *data = _data;
 	struct list_head *list;
 
 	ALLOC_LIST(list);
@@ -267,7 +267,7 @@ PE_NAME_CACHE_TYPE '-' PE_NAME_CACHE_OP_
 |
 PE_NAME_CACHE_TYPE
 {
-	struct parse_events_evlist *data = _data;
+	struct parse_events_state *data = _data;
 	struct list_head *list;
 
 	ALLOC_LIST(list);
@@ -278,7 +278,7 @@ PE_NAME_CACHE_TYPE
 event_legacy_mem:
 PE_PREFIX_MEM PE_VALUE ':' PE_MODIFIER_BP sep_dc
 {
-	struct parse_events_evlist *data = _data;
+	struct parse_events_state *data = _data;
 	struct list_head *list;
 
 	ALLOC_LIST(list);
@@ -289,7 +289,7 @@ PE_PREFIX_MEM PE_VALUE ':' PE_MODIFIER_B
 |
 PE_PREFIX_MEM PE_VALUE sep_dc
 {
-	struct parse_events_evlist *data = _data;
+	struct parse_events_state *data = _data;
 	struct list_head *list;
 
 	ALLOC_LIST(list);
@@ -301,7 +301,7 @@ PE_PREFIX_MEM PE_VALUE sep_dc
 event_legacy_tracepoint:
 PE_NAME '-' PE_NAME ':' PE_NAME
 {
-	struct parse_events_evlist *data = _data;
+	struct parse_events_state *data = _data;
 	struct list_head *list;
 	char sys_name[128];
 	snprintf(&sys_name, 128, "%s-%s", $1, $3);
@@ -313,7 +313,7 @@ PE_NAME '-' PE_NAME ':' PE_NAME
 |
 PE_NAME ':' PE_NAME
 {
-	struct parse_events_evlist *data = _data;
+	struct parse_events_state *data = _data;
 	struct list_head *list;
 
 	ALLOC_LIST(list);
@@ -324,7 +324,7 @@ PE_NAME ':' PE_NAME
 event_legacy_numeric:
 PE_VALUE ':' PE_VALUE
 {
-	struct parse_events_evlist *data = _data;
+	struct parse_events_state *data = _data;
 	struct list_head *list;
 
 	ALLOC_LIST(list);
@@ -335,7 +335,7 @@ PE_VALUE ':' PE_VALUE
 event_legacy_raw:
 PE_RAW
 {
-	struct parse_events_evlist *data = _data;
+	struct parse_events_state *data = _data;
 	struct list_head *list;
 
 	ALLOC_LIST(list);

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 041/133] skd: Submit requests to firmware before triggering the doorbell
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (44 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 020/133] media: v4l2-compat-ioctl32: Fix timespec conversion Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 005/133] perf tests attr: Fix no-delay test Ben Hutchings
                   ` (87 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Christoph Hellwig, Jens Axboe, Bart Van Assche,
	Johannes Thumshirn, Hannes Reinecke

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Bart Van Assche <bart.vanassche@wdc.com>

commit 5fbd545cd3fd311ea1d6e8be4cedddd0ee5684c7 upstream.

Ensure that the members of struct skd_msg_buf have been transferred
to the PCIe adapter before the doorbell is triggered. This patch
avoids that I/O fails sporadically and that the following error
message is reported:

(skd0:STM000196603:[0000:00:09.0]): Completion mismatch comp_id=0x0000 skreq=0x0400 new=0x0000

Signed-off-by: Bart Van Assche <bart.vanassche@wdc.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Hannes Reinecke <hare@suse.de>
Cc: Johannes Thumshirn <jthumshirn@suse.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/block/skd_main.c | 6 ++++++
 1 file changed, 6 insertions(+)

--- a/drivers/block/skd_main.c
+++ b/drivers/block/skd_main.c
@@ -2214,6 +2214,9 @@ static void skd_send_fitmsg(struct skd_d
 		 */
 		qcmd |= FIT_QCMD_MSGSIZE_64;
 
+	/* Make sure skd_msg_buf is written before the doorbell is triggered. */
+	smp_wmb();
+
 	SKD_WRITEQ(skdev, qcmd, FIT_Q_COMMAND);
 
 }
@@ -2260,6 +2263,9 @@ static void skd_send_special_fitmsg(stru
 	qcmd = skspcl->mb_dma_address;
 	qcmd |= FIT_QCMD_QID_NORMAL + FIT_QCMD_MSGSIZE_128;
 
+	/* Make sure skd_msg_buf is written before the doorbell is triggered. */
+	smp_wmb();
+
 	SKD_WRITEQ(skdev, qcmd, FIT_Q_COMMAND);
 }
 

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 032/133] iio: pressure: st_pressure: fix drdy configuration for LPS22HB and LPS25H
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (17 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 043/133] media: uvcvideo: Prevent heap overflow when accessing mapped controls Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 007/133] powerpc/mm: Build fix for non SPARSEMEM_VMEMAP config Ben Hutchings
                   ` (114 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Lorenzo Bianconi, Lorenzo Bianconi, Jonathan Cameron

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>

commit ef0bc2e83966b5aed055acb6d16a3788de5205f4 upstream.

Remove int2 configuration parameter for LPS22HB and LPS25H since
these devices export just int1 as data-ready line

Fixes: 931878405b86 (iio:pressure: Add support for LPS25H pressure sensor)
Fixes: e039e2f5b4da (iio:st_pressure:initial lps22hb sensor support)
Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@st.com>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
[bwh: Backported to 3.16:
 - Update the macro used to fill in this field
 - Drop change for LPS22HB]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
--- a/drivers/iio/pressure/st_pressure_core.c
+++ b/drivers/iio/pressure/st_pressure_core.c
@@ -104,7 +104,7 @@
 #define ST_PRESS_LPS25H_BDU_MASK		0x04
 #define ST_PRESS_LPS25H_DRDY_IRQ_ADDR		0x23
 #define ST_PRESS_LPS25H_DRDY_IRQ_INT1_MASK	0x01
-#define ST_PRESS_LPS25H_DRDY_IRQ_INT2_MASK	0x10
+#define ST_PRESS_LPS25H_DRDY_IRQ_INT2_MASK	0x00
 #define ST_PRESS_LPS25H_MULTIREAD_BIT		true
 #define ST_PRESS_LPS25H_OUT_XL_ADDR		0x28
 #define ST_TEMP_LPS25H_OUT_L_ADDR		0x2b

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 005/133] perf tests attr: Fix no-delay test
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (45 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 041/133] skd: Submit requests to firmware before triggering the doorbell Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 103/133] bcache: fix for gc and write-back race Ben Hutchings
                   ` (86 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Arnaldo Carvalho de Melo, Namhyung Kim, Jiri Olsa,
	David Ahern, Peter Zijlstra, Thomas Richter

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Jiri Olsa <jolsa@kernel.org>

commit 44fed277f81ba22e3f2fbcf1501c3b14aeb9f8e4 upstream.

Following commit:
  commit 509051ea8427 ("perf record: Rename --no-delay to --no-buffering")

removed '-D' option and renamed --no-delay into --no-buffering.
Fixing that in the attr tests.

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Thomas Richter <tmricht@linux.vnet.ibm.com>
Fixes: 509051ea8427 ("perf record: Rename --no-delay to --no-buffering")
Link: http://lkml.kernel.org/r/20170703145030.12903-9-jolsa@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 .../perf/tests/attr/{test-record-no-delay => test-record-no-buffering}  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
 rename tools/perf/tests/attr/{test-record-no-delay => test-record-no-buffering} (70%)

--- a/tools/perf/tests/attr/test-record-no-delay
+++ /dev/null
@@ -1,9 +0,0 @@
-[config]
-command = record
-args    = -D kill >/dev/null 2>&1
-
-[event:base-record]
-sample_period=4000
-sample_type=263
-watermark=0
-wakeup_events=1
--- /dev/null
+++ b/tools/perf/tests/attr/test-record-no-buffering
@@ -0,0 +1,9 @@
+[config]
+command = record
+args    = --no-buffering kill >/dev/null 2>&1
+
+[event:base-record]
+sample_period=4000
+sample_type=263
+watermark=0
+wakeup_events=1

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 026/133] scsi: zfcp: fix passing fsf_req to SCSI trace on TMF to correlate with HBA
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (27 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 015/133] powerpc/mm: Fix check of multiple 16G pages from device tree Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 006/133] media: docs-rst: v4l: Fix sink compose selection target documentation Ben Hutchings
                   ` (104 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Steffen Maier, Martin K. Petersen, Benjamin Block

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Steffen Maier <maier@linux.vnet.ibm.com>

commit 9fe5d2b2fd30aa8c7827ec62cbbe6d30df4fe3e3 upstream.

Without this fix we get SCSI trace records on task management functions
which cannot be correlated to HBA trace records because all fields
related to the FSF request are empty (zero).
Also, the FCP_RSP_IU is missing as well as any sense data if available.

This was caused by v2.6.14 commit 8a36e4532ea1 ("[SCSI] zfcp: enhancement
of zfcp debug features") introducing trace records for TMFs but
hard coding NULL for a possibly existing TMF FSF request.
The scsi_cmnd scribble is also zero or unrelated for the TMF request
so it also could not lookup a suitable FSF request from there.

A broken example trace record formatted with zfcpdbf from the s390-tools
package:

Timestamp      : ...
Area           : SCSI
Subarea        : 00
Level          : 1
Exception      : -
CPU ID         : ..
Caller         : 0x...
Record ID      : 1
Tag            : lr_fail
Request ID     : 0x0000000000000000
                   ^^^^^^^^^^^^^^^^ no correlation to HBA record
SCSI ID        : 0x<scsitarget>
SCSI LUN       : 0x<scsilun>
SCSI result    : 0x000e0000
SCSI retries   : 0x00
SCSI allowed   : 0x05
SCSI scribble  : 0x0000000000000000
SCSI opcode    : 2a000017 3bb80000 08000000 00000000
FCP rsp inf cod: 0x00
                   ^^ no TMF response
FCP rsp IU     : 00000000 00000000 00000000 00000000
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                 00000000 00000000
                 ^^^^^^^^^^^^^^^^^ no interesting FCP_RSP_IU
Sense len      : ...
^^^^^^^^^^^^^^^^^^^^ no sense data length
Sense info     : ...
^^^^^^^^^^^^^^^^^^^^ no sense data content, even if present

There are some true cases where we really do not have an FSF request:
"rsl_fai" from zfcp_dbf_scsi_fail_send() called for early
returns / completions in zfcp_scsi_queuecommand(),
"abrt_or", "abrt_bl", "abrt_ru", "abrt_ar" from
zfcp_scsi_eh_abort_handler() where we did not get as far,
"lr_nres", "tr_nres" from zfcp_task_mgmt_function() where we're
successful and do not need to do anything because adapter stopped.
For these cases it's correct to pass NULL for fsf_req to _zfcp_dbf_scsi().

Signed-off-by: Steffen Maier <maier@linux.vnet.ibm.com>
Fixes: 8a36e4532ea1 ("[SCSI] zfcp: enhancement of zfcp debug features")
Reviewed-by: Benjamin Block <bblock@linux.vnet.ibm.com>
Signed-off-by: Benjamin Block <bblock@linux.vnet.ibm.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/s390/scsi/zfcp_dbf.h  | 7 ++++---
 drivers/s390/scsi/zfcp_scsi.c | 8 ++++----
 2 files changed, 8 insertions(+), 7 deletions(-)

--- a/drivers/s390/scsi/zfcp_dbf.h
+++ b/drivers/s390/scsi/zfcp_dbf.h
@@ -2,7 +2,7 @@
  * zfcp device driver
  * debug feature declarations
  *
- * Copyright IBM Corp. 2008, 2016
+ * Copyright IBM Corp. 2008, 2017
  */
 
 #ifndef ZFCP_DBF_H
@@ -401,7 +401,8 @@ void zfcp_dbf_scsi_abort(char *tag, stru
  * @flag: indicates type of reset (Target Reset, Logical Unit Reset)
  */
 static inline
-void zfcp_dbf_scsi_devreset(char *tag, struct scsi_cmnd *scmnd, u8 flag)
+void zfcp_dbf_scsi_devreset(char *tag, struct scsi_cmnd *scmnd, u8 flag,
+			    struct zfcp_fsf_req *fsf_req)
 {
 	char tmp_tag[ZFCP_DBF_TAG_LEN];
 
@@ -411,7 +412,7 @@ void zfcp_dbf_scsi_devreset(char *tag, s
 		memcpy(tmp_tag, "lr_", 3);
 
 	memcpy(&tmp_tag[3], tag, 4);
-	_zfcp_dbf_scsi(tmp_tag, 1, scmnd, NULL);
+	_zfcp_dbf_scsi(tmp_tag, 1, scmnd, fsf_req);
 }
 
 /**
--- a/drivers/s390/scsi/zfcp_scsi.c
+++ b/drivers/s390/scsi/zfcp_scsi.c
@@ -3,7 +3,7 @@
  *
  * Interface to Linux SCSI midlayer.
  *
- * Copyright IBM Corp. 2002, 2016
+ * Copyright IBM Corp. 2002, 2017
  */
 
 #define KMSG_COMPONENT "zfcp"
@@ -299,7 +299,7 @@ static int zfcp_task_mgmt_function(struc
 
 		if (!(atomic_read(&adapter->status) &
 		      ZFCP_STATUS_COMMON_RUNNING)) {
-			zfcp_dbf_scsi_devreset("nres", scpnt, tm_flags);
+			zfcp_dbf_scsi_devreset("nres", scpnt, tm_flags, NULL);
 			return SUCCESS;
 		}
 	}
@@ -309,10 +309,10 @@ static int zfcp_task_mgmt_function(struc
 	wait_for_completion(&fsf_req->completion);
 
 	if (fsf_req->status & ZFCP_STATUS_FSFREQ_TMFUNCFAILED) {
-		zfcp_dbf_scsi_devreset("fail", scpnt, tm_flags);
+		zfcp_dbf_scsi_devreset("fail", scpnt, tm_flags, fsf_req);
 		retval = FAILED;
 	} else {
-		zfcp_dbf_scsi_devreset("okay", scpnt, tm_flags);
+		zfcp_dbf_scsi_devreset("okay", scpnt, tm_flags, fsf_req);
 		zfcp_scsi_forget_cmnds(zfcp_sdev, tm_flags);
 	}
 

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 033/133] iio: accel: st_accel: fix data-ready line configuration
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 019/133] wcn36xx: Remove unnecessary rcu_read_unlock in wcn36xx_bss_info_changed Ben Hutchings
                   ` (132 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Jonathan Cameron, Lorenzo Bianconi, Lorenzo Bianconi

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>

commit 4303741f99d617c1fc3c9069195d3d620c2f88c4 upstream.

Remove int2 configuration parameter for LIS3DH, LSM303DLHC, LSM330D,
LSM330DL, LSM330DLC, LSM303AGR, LIS2DH12 and LNG2DM since these devices
export just int1 as data-ready line

Fixes: 23cde4d65cc7 (iio: Added platform data to select the DRDY pin)
Fixes: dcdb0a78cab3 (iio: accel: st_accel: add support to lng2dm)
Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@st.com>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
[bwh: Backported to 3.16:
 - Update the macro used to fill in this field
 - Drop change for LNG2DM]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/iio/accel/st_accel_core.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- a/drivers/iio/accel/st_accel_core.c
+++ b/drivers/iio/accel/st_accel_core.c
@@ -66,7 +66,7 @@
 #define ST_ACCEL_1_BDU_MASK			0x80
 #define ST_ACCEL_1_DRDY_IRQ_ADDR		0x22
 #define ST_ACCEL_1_DRDY_IRQ_INT1_MASK		0x10
-#define ST_ACCEL_1_DRDY_IRQ_INT2_MASK		0x08
+#define ST_ACCEL_1_DRDY_IRQ_INT2_MASK		0x00
 #define ST_ACCEL_1_MULTIREAD_BIT		true
 
 /* CUSTOM VALUES FOR SENSOR 2 */

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 036/133] perf events parse: Use just one parse events state struct
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (30 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 034/133] btrfs: resume qgroup rescan on rw remount Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 027/133] scsi: zfcp: fix missing trace records for early returns in TMF eh handlers Ben Hutchings
                   ` (101 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Jiri Olsa, Namhyung Kim, Arnaldo Carvalho de Melo, Wang Nan,
	Andi Kleen, Adrian Hunter, David Ahern

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Arnaldo Carvalho de Melo <acme@redhat.com>

commit d17d0878f456c8227345b6c76b918ec068fa0abd upstream.

Andi reported problems when parse errors were detected with vendor
events (json), because in the yyparse/parse_events_parse function we
dereferenced the _data parameter to two different structs, with
different layouts, which ended up making parse_events_evlist->error to
point to random stack addresses.

Fix it by making _data to always be struct parse_events_state, changing
the only place where 'struct parse_events_term' was used in
parse_events.y.

Reported-by: Andi Kleen <ak@linux.intel.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/n/tip-bc27lshz823hxl8n9nkelcgh@git.kernel.org
Fixes: 90e2b22dee90 ("perf/tool: Add support to reuse event grammar to parse out terms")
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
[bwh: Backported to 3.16: adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 tools/perf/util/parse-events.c | 2 +-
 tools/perf/util/parse-events.h | 5 +----
 tools/perf/util/parse-events.y | 2 +-
 3 files changed, 3 insertions(+), 6 deletions(-)

--- a/tools/perf/util/parse-events.c
+++ b/tools/perf/util/parse-events.c
@@ -908,7 +908,7 @@ static int parse_events__scanner(const c
  */
 int parse_events_terms(struct list_head *terms, const char *str)
 {
-	struct parse_events_terms data = {
+	struct parse_events_state data = {
 		.terms = NULL,
 	};
 	int ret;
--- a/tools/perf/util/parse-events.h
+++ b/tools/perf/util/parse-events.h
@@ -65,10 +65,7 @@ struct parse_events_state {
 	struct list_head list;
 	int idx;
 	int nr_groups;
-};
-
-struct parse_events_terms {
-	struct list_head *terms;
+	struct list_head	  *terms;
 };
 
 int parse_events__is_hardcoded_term(struct parse_events_term *term);
--- a/tools/perf/util/parse-events.y
+++ b/tools/perf/util/parse-events.y
@@ -346,7 +346,7 @@ PE_RAW
 
 start_terms: event_config
 {
-	struct parse_events_terms *data = _data;
+	struct parse_events_state *data = _data;
 	data->terms = $1;
 }
 

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 019/133] wcn36xx: Remove unnecessary rcu_read_unlock in wcn36xx_bss_info_changed
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 033/133] iio: accel: st_accel: fix data-ready line configuration Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 004/133] backlight: lm3630a: Bump REG_MAX value to 0x50 instead of 0x1F Ben Hutchings
                   ` (131 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Kalle Valo, Bjorn Andersson, Jia-Ju Bai

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Jia-Ju Bai <baijiaju1990@163.com>

commit c0d5adc35c0b010120391117cb07be6623cf8940 upstream.

No rcu_read_lock is called, but rcu_read_unlock is still called.
Thus rcu_read_unlock should be removed.

Signed-off-by: Jia-Ju Bai <baijiaju1990@163.com>
Acked-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/net/wireless/ath/wcn36xx/main.c | 1 -
 1 file changed, 1 deletion(-)

--- a/drivers/net/wireless/ath/wcn36xx/main.c
+++ b/drivers/net/wireless/ath/wcn36xx/main.c
@@ -672,7 +672,6 @@ static void wcn36xx_bss_info_changed(str
 			if (!sta) {
 				wcn36xx_err("sta %pM is not found\n",
 					      bss_conf->bssid);
-				rcu_read_unlock();
 				goto out;
 			}
 			sta_priv = (struct wcn36xx_sta *)sta->drv_priv;

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 046/133] pwm: tiehrpwm: Fix runtime PM imbalance at unbind
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (38 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 002/133] ARM: dts: dra7-evm: Correct the vmmc-supply for mmc2 Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 044/133] media: lirc_zilog: driver only sends LIRCCODE Ben Hutchings
                   ` (93 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Thierry Reding, Johan Hovold

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Johan Hovold <johan@kernel.org>

commit c7fdd3f52944b81d807ce7a5fde7d1ca8a2a0919 upstream.

Remove unbalanced RPM put at driver unbind which resulted in a negative
usage count.

Fixes: 19891b20e7c2 ("pwm: pwm-tiehrpwm: PWM driver support for EHRPWM")
Signed-off-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/pwm/pwm-tiehrpwm.c | 1 -
 1 file changed, 1 deletion(-)

--- a/drivers/pwm/pwm-tiehrpwm.c
+++ b/drivers/pwm/pwm-tiehrpwm.c
@@ -524,7 +524,6 @@ static int ehrpwm_pwm_remove(struct plat
 	pwmss_submodule_state_change(pdev->dev.parent, PWMSS_EPWMCLK_STOP_REQ);
 	pm_runtime_put_sync(&pdev->dev);
 
-	pm_runtime_put_sync(&pdev->dev);
 	pm_runtime_disable(&pdev->dev);
 	return pwmchip_remove(&pc->chip);
 }

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 047/133] pwm: tiehrpwm: fix clock imbalance in probe error path
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (15 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 011/133] asm/sections: add helpers to check for section data Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 043/133] media: uvcvideo: Prevent heap overflow when accessing mapped controls Ben Hutchings
                   ` (116 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Johan Hovold, Thierry Reding

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Johan Hovold <johan@kernel.org>

commit e2b5602af76dec75f474e4173afb4215007ecfa5 upstream.

Make sure to unprepare the clock before returning on late probe errors.

Fixes: b388f15fd14c ("pwm: pwm-tiehrpwm: Use clk_enable/disable instead clk_prepare/unprepare.")
Signed-off-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
[bwh: Backported to 3.16: adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
--- a/drivers/pwm/pwm-tiehrpwm.c
+++ b/drivers/pwm/pwm-tiehrpwm.c
@@ -483,7 +483,7 @@ static int ehrpwm_pwm_probe(struct platf
 	ret = pwmchip_add(&pc->chip);
 	if (ret < 0) {
 		dev_err(&pdev->dev, "pwmchip_add() failed: %d\n", ret);
-		return ret;
+		goto err_clk_unprepare;
 	}
 
 	pm_runtime_enable(&pdev->dev);
@@ -506,7 +506,9 @@ pwmss_clk_failure:
 	pm_runtime_put_sync(&pdev->dev);
 	pm_runtime_disable(&pdev->dev);
 	pwmchip_remove(&pc->chip);
+err_clk_unprepare:
 	clk_unprepare(pc->tbclk);
+
 	return ret;
 }
 

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 001/133] ARM: dts: dra7-evm: Rename mmc2_3v3 supply to evm_3v3_sw
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (25 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 017/133] dlm: avoid double-free on error path in dlm_device_{register,unregister} Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 015/133] powerpc/mm: Fix check of multiple 16G pages from device tree Ben Hutchings
                   ` (106 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Tony Lindgren, Peter Ujfalusi

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Peter Ujfalusi <peter.ujfalusi@ti.com>

commit 27f39e5f5fd1d9eb5ce67507ad57ef5df007f208 upstream.

Use the name for the supply as it is in the schematics since the same
supply is used for other peripherals than MMC2, like audio.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 arch/arm/boot/dts/dra7-evm.dts | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

--- a/arch/arm/boot/dts/dra7-evm.dts
+++ b/arch/arm/boot/dts/dra7-evm.dts
@@ -18,9 +18,9 @@
 		reg = <0x80000000 0x60000000>; /* 1536 MB */
 	};
 
-	mmc2_3v3: fixedregulator-mmc2 {
+	evm_3v3_sw: fixedregulator-evm_3v3_sw {
 		compatible = "regulator-fixed";
-		regulator-name = "mmc2_3v3";
+		regulator-name = "evm_3v3_sw";
 		regulator-min-microvolt = <3300000>;
 		regulator-max-microvolt = <3300000>;
 	};
@@ -325,7 +325,7 @@
 
 &mmc2 {
 	status = "okay";
-	vmmc-supply = <&mmc2_3v3>;
+	vmmc-supply = <&evm_3v3_sw>;
 	bus-width = <8>;
 };
 

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 039/133] block: Relax a check in blk_start_queue()
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (10 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 031/133] cs5536: add support for IDE controller variant Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 009/133] signal: move the "sig < SIGRTMIN" check into siginmask(sig) Ben Hutchings
                   ` (121 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Johannes Thumshirn, Christoph Hellwig, Jens Axboe,
	Bart Van Assche, Hannes Reinecke, Andrew Morton,
	Paolo 'Blaisorblade' Giarrusso

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Bart Van Assche <bart.vanassche@wdc.com>

commit 4ddd56b003f251091a67c15ae3fe4a5c5c5e390a upstream.

Calling blk_start_queue() from interrupt context with the queue
lock held and without disabling IRQs, as the skd driver does, is
safe. This patch avoids that loading the skd driver triggers the
following warning:

WARNING: CPU: 11 PID: 1348 at block/blk-core.c:283 blk_start_queue+0x84/0xa0
RIP: 0010:blk_start_queue+0x84/0xa0
Call Trace:
 skd_unquiesce_dev+0x12a/0x1d0 [skd]
 skd_complete_internal+0x1e7/0x5a0 [skd]
 skd_complete_other+0xc2/0xd0 [skd]
 skd_isr_completion_posted.isra.30+0x2a5/0x470 [skd]
 skd_isr+0x14f/0x180 [skd]
 irq_forced_thread_fn+0x2a/0x70
 irq_thread+0x144/0x1a0
 kthread+0x125/0x140
 ret_from_fork+0x2a/0x40

Fixes: commit a038e2536472 ("[PATCH] blk_start_queue() must be called with irq disabled - add warning")
Signed-off-by: Bart Van Assche <bart.vanassche@wdc.com>
Cc: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
Cc: Andrew Morton <akpm@osdl.org>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Hannes Reinecke <hare@suse.de>
Cc: Johannes Thumshirn <jthumshirn@suse.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
[bwh: Backported to 3.16: adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 block/blk-core.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -198,7 +198,7 @@ EXPORT_SYMBOL(blk_delay_queue);
  **/
 void blk_start_queue(struct request_queue *q)
 {
-	WARN_ON(!irqs_disabled());
+	WARN_ON(!in_interrupt() && !irqs_disabled());
 
 	queue_flag_clear(QUEUE_FLAG_STOPPED, q);
 	__blk_run_queue(q);

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 042/133] net: don't decrement kobj reference count on init failure
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (22 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 040/133] skd: Avoid that module unloading triggers a use-after-free Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 014/133] rtlwifi: rtl8821ae: Fix HW_VAR_NAV_UPPER operation Ben Hutchings
                   ` (109 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, stephen hemminger, Stephen Hemminger, David S. Miller

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: stephen hemminger <stephen@networkplumber.org>

commit d0d6683716791b2a2761a1bb025c613eb73da6c3 upstream.

If kobject_init_and_add failed, then the failure path would
decrement the reference count of the queue kobject whose reference
count was already zero.

Fixes: 114cf5802165 ("bql: Byte queue limits")
Signed-off-by: Stephen Hemminger <sthemmin@microsoft.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
[bwh: Backported to 3.16: adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 net/core/net-sysfs.c | 22 ++++++++++------------
 1 file changed, 10 insertions(+), 12 deletions(-)

--- a/net/core/net-sysfs.c
+++ b/net/core/net-sysfs.c
@@ -786,21 +786,20 @@ static int rx_queue_add_kobject(struct n
 	error = kobject_init_and_add(kobj, &rx_queue_ktype, NULL,
 	    "rx-%u", index);
 	if (error)
-		goto exit;
+		return error;
 
 	if (net->sysfs_rx_queue_group) {
 		error = sysfs_create_group(kobj, net->sysfs_rx_queue_group);
-		if (error)
-			goto exit;
+		if (error) {
+			kobject_put(kobj);
+			return error;
+		}
 	}
 
 	kobject_uevent(kobj, KOBJ_ADD);
 	dev_hold(queue->dev);
 
 	return error;
-exit:
-	kobject_put(kobj);
-	return error;
 }
 #endif /* CONFIG_SYSFS */
 
@@ -1145,21 +1144,20 @@ static int netdev_queue_add_kobject(stru
 	error = kobject_init_and_add(kobj, &netdev_queue_ktype, NULL,
 	    "tx-%u", index);
 	if (error)
-		goto exit;
+		return error;
 
 #ifdef CONFIG_BQL
 	error = sysfs_create_group(kobj, &dql_group);
-	if (error)
-		goto exit;
+	if (error) {
+		kobject_put(kobj);
+		return error;
+	}
 #endif
 
 	kobject_uevent(kobj, KOBJ_ADD);
 	dev_hold(queue->dev);
 
 	return 0;
-exit:
-	kobject_put(kobj);
-	return error;
 }
 #endif /* CONFIG_SYSFS */
 

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 016/133] PCI: shpchp: Enable bridge bus mastering if MSI is enabled
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (36 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 045/133] staging/rts5208: fix incorrect shift to extract upper nybble Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 002/133] ARM: dts: dra7-evm: Correct the vmmc-supply for mmc2 Ben Hutchings
                   ` (95 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Marcel Apfelbaum, Bjorn Helgaas, Aleksandr Bezzubikov,
	Michael S. Tsirkin

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Aleksandr Bezzubikov <zuban32s@gmail.com>

commit 48b79a14505349a29b3e20f03619ada9b33c4b17 upstream.

An SHPC may generate MSIs to notify software about slot or controller
events (SHPC spec r1.0, sec 4.7).  A PCI device can only generate an MSI if
it has bus mastering enabled.

Enable bus mastering if the bridge contains an SHPC that uses MSI for event
notifications.

Signed-off-by: Aleksandr Bezzubikov <zuban32s@gmail.com>
[bhelgaas: changelog]
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Marcel Apfelbaum <marcel@redhat.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/pci/hotplug/shpchp_hpc.c | 2 ++
 1 file changed, 2 insertions(+)

--- a/drivers/pci/hotplug/shpchp_hpc.c
+++ b/drivers/pci/hotplug/shpchp_hpc.c
@@ -1061,6 +1061,8 @@ int shpc_init(struct controller *ctrl, s
 		if (rc) {
 			ctrl_info(ctrl, "Can't get msi for the hotplug controller\n");
 			ctrl_info(ctrl, "Use INTx for the hotplug controller\n");
+		} else {
+			pci_set_master(pdev);
 		}
 
 		rc = request_irq(ctrl->pci_dev->irq, shpc_isr, IRQF_SHARED,

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 043/133] media: uvcvideo: Prevent heap overflow when accessing mapped controls
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (16 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 047/133] pwm: tiehrpwm: fix clock imbalance in probe error path Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 032/133] iio: pressure: st_pressure: fix drdy configuration for LPS22HB and LPS25H Ben Hutchings
                   ` (115 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Laurent Pinchart, Mauro Carvalho Chehab, Hans Verkuil,
	Guenter Roeck

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Guenter Roeck <linux@roeck-us.net>

commit 7e09f7d5c790278ab98e5f2c22307ebe8ad6e8ba upstream.

The size of uvc_control_mapping is user controlled leading to a
potential heap overflow in the uvc driver. This adds a check to verify
the user provided size fits within the bounds of the defined buffer
size.

Originally-from: Richard Simmons <rssimmo@amazon.com>

Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/media/usb/uvc/uvc_ctrl.c | 7 +++++++
 1 file changed, 7 insertions(+)

--- a/drivers/media/usb/uvc/uvc_ctrl.c
+++ b/drivers/media/usb/uvc/uvc_ctrl.c
@@ -1949,6 +1949,13 @@ int uvc_ctrl_add_mapping(struct uvc_vide
 		goto done;
 	}
 
+	/* Validate the user-provided bit-size and offset */
+	if (mapping->size > 32 ||
+	    mapping->offset + mapping->size > ctrl->info.size * 8) {
+		ret = -EINVAL;
+		goto done;
+	}
+
 	list_for_each_entry(map, &ctrl->info.mappings, list) {
 		if (mapping->id == map->id) {
 			uvc_trace(UVC_TRACE_CONTROL, "Can't add mapping '%s', "

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 011/133] asm/sections: add helpers to check for section data
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (14 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 028/133] scsi: zfcp: fix payload with full FCP_RSP IU in SCSI trace records Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 047/133] pwm: tiehrpwm: fix clock imbalance in probe error path Ben Hutchings
                   ` (117 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Arnd Bergmann, Joe Perches, Linus Torvalds, Thierry Reding,
	Greg Kroah-Hartman

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Thierry Reding <treding@nvidia.com>

commit 979559362516bb0f5424505c607210ac054e30ae upstream.

Add a helper to check if an object (given an address and a size) is part
of a section (given beginning and end addresses).  For convenience, also
provide a helper that performs this check for __init data using the
__init_begin and __init_end limits.

Signed-off-by: Thierry Reding <treding@nvidia.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Joe Perches <joe@perches.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 include/asm-generic/sections.h | 65 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 65 insertions(+)

--- a/include/asm-generic/sections.h
+++ b/include/asm-generic/sections.h
@@ -4,6 +4,7 @@
 /* References to section boundaries */
 
 #include <linux/compiler.h>
+#include <linux/types.h>
 
 /*
  * Usage guidelines:
@@ -63,4 +64,68 @@ static inline int arch_is_kernel_data(un
 }
 #endif
 
+/**
+ * memory_contains - checks if an object is contained within a memory region
+ * @begin: virtual address of the beginning of the memory region
+ * @end: virtual address of the end of the memory region
+ * @virt: virtual address of the memory object
+ * @size: size of the memory object
+ *
+ * Returns: true if the object specified by @virt and @size is entirely
+ * contained within the memory region defined by @begin and @end, false
+ * otherwise.
+ */
+static inline bool memory_contains(void *begin, void *end, void *virt,
+				   size_t size)
+{
+	return virt >= begin && virt + size <= end;
+}
+
+/**
+ * memory_intersects - checks if the region occupied by an object intersects
+ *                     with another memory region
+ * @begin: virtual address of the beginning of the memory regien
+ * @end: virtual address of the end of the memory region
+ * @virt: virtual address of the memory object
+ * @size: size of the memory object
+ *
+ * Returns: true if an object's memory region, specified by @virt and @size,
+ * intersects with the region specified by @begin and @end, false otherwise.
+ */
+static inline bool memory_intersects(void *begin, void *end, void *virt,
+				     size_t size)
+{
+	void *vend = virt + size;
+
+	return (virt >= begin && virt < end) || (vend >= begin && vend < end);
+}
+
+/**
+ * init_section_contains - checks if an object is contained within the init
+ *                         section
+ * @virt: virtual address of the memory object
+ * @size: size of the memory object
+ *
+ * Returns: true if the object specified by @virt and @size is entirely
+ * contained within the init section, false otherwise.
+ */
+static inline bool init_section_contains(void *virt, size_t size)
+{
+	return memory_contains(__init_begin, __init_end, virt, size);
+}
+
+/**
+ * init_section_intersects - checks if the region occupied by an object
+ *                           intersects with the init section
+ * @virt: virtual address of the memory object
+ * @size: size of the memory object
+ *
+ * Returns: true if an object's memory region, specified by @virt and @size,
+ * intersects with the init section, false otherwise.
+ */
+static inline bool init_section_intersects(void *virt, size_t size)
+{
+	return memory_intersects(__init_begin, __init_end, virt, size);
+}
+
 #endif /* _ASM_GENERIC_SECTIONS_H_ */

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 007/133] powerpc/mm: Build fix for non SPARSEMEM_VMEMAP config
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (18 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 032/133] iio: pressure: st_pressure: fix drdy configuration for LPS22HB and LPS25H Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 012/133] printk: only unregister boot consoles when necessary Ben Hutchings
                   ` (113 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Alexey Kardashevskiy, Michael Ellerman, Aneesh Kumar K.V

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>

commit 7e7dc66adcf490a619bc3c7763a8cebadfba73e3 upstream.

We can use pfn_to_page() in realmode for other configs. Hence remove the
CONFIG_FLATMEM ifdef.

Fixes: 8e0861fa3c4e ("powerpc: Prepare to support kernel handling of IOMMU map/unmap")
Cc: Alexey Kardashevskiy <aik@ozlabs.ru>
Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
[mpe: Also fix up the #endif comment]
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
[bwh: Backported to 3.16: adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 arch/powerpc/mm/init_64.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- a/arch/powerpc/mm/init_64.c
+++ b/arch/powerpc/mm/init_64.c
@@ -345,7 +345,7 @@ struct page *realmode_pfn_to_page(unsign
 }
 EXPORT_SYMBOL_GPL(realmode_pfn_to_page);
 
-#elif defined(CONFIG_FLATMEM)
+#else
 
 struct page *realmode_pfn_to_page(unsigned long pfn)
 {
@@ -354,4 +354,4 @@ struct page *realmode_pfn_to_page(unsign
 }
 EXPORT_SYMBOL_GPL(realmode_pfn_to_page);
 
-#endif /* CONFIG_SPARSEMEM_VMEMMAP/CONFIG_FLATMEM */
+#endif /* CONFIG_SPARSEMEM_VMEMMAP */

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 029/133] scsi: zfcp: trace HBA FSF response by default on dismiss or timedout late response
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (2 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 004/133] backlight: lm3630a: Bump REG_MAX value to 0x50 instead of 0x1F Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 018/133] wcn36xx: Introduce mutual exclusion of fw configuration Ben Hutchings
                   ` (129 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Benjamin Block, Martin K. Petersen, Steffen Maier

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Steffen Maier <maier@linux.vnet.ibm.com>

commit fdb7cee3b9e3c561502e58137a837341f10cbf8b upstream.

At the default trace level, we only trace unsuccessful events including
FSF responses.

zfcp_dbf_hba_fsf_response() only used protocol status and FSF status to
decide on an unsuccessful response. However, this is only one of multiple
possible sources determining a failed struct zfcp_fsf_req.

An FSF request can also "fail" if its response runs into an ERP timeout
or if it gets dismissed because a higher level recovery was triggered
[trace tags "erscf_1" or "erscf_2" in zfcp_erp_strategy_check_fsfreq()].
FSF requests with ERP timeout are:
FSF_QTCB_EXCHANGE_CONFIG_DATA, FSF_QTCB_EXCHANGE_PORT_DATA,
FSF_QTCB_OPEN_PORT_WITH_DID or FSF_QTCB_CLOSE_PORT or
FSF_QTCB_CLOSE_PHYSICAL_PORT for target ports,
FSF_QTCB_OPEN_LUN, FSF_QTCB_CLOSE_LUN.
One example is slow queue processing which can cause follow-on errors,
e.g. FSF_PORT_ALREADY_OPEN after FSF_QTCB_OPEN_PORT_WITH_DID timed out.
In order to see the root cause, we need to see late responses even if the
channel presented them successfully with FSF_PROT_GOOD and FSF_GOOD.
Example trace records formatted with zfcpdbf from the s390-tools package:

Timestamp      : ...
Area           : REC
Subarea        : 00
Level          : 1
Exception      : -
CPU ID         : ..
Caller         : ...
Record ID      : 1
Tag            : fcegpf1
LUN            : 0xffffffffffffffff
WWPN           : 0x<WWPN>
D_ID           : 0x00<D_ID>
Adapter status : 0x5400050b
Port status    : 0x41200000
LUN status     : 0x00000000
Ready count    : 0x00000001
Running count  : 0x...
ERP want       : 0x02				ZFCP_ERP_ACTION_REOPEN_PORT
ERP need       : 0x02				ZFCP_ERP_ACTION_REOPEN_PORT
|
Timestamp      : ...				30 seconds later
Area           : REC
Subarea        : 00
Level          : 1
Exception      : -
CPU ID         : ..
Caller         : ...
Record ID      : 2
Tag            : erscf_2
LUN            : 0xffffffffffffffff
WWPN           : 0x<WWPN>
D_ID           : 0x00<D_ID>
Adapter status : 0x5400050b
Port status    : 0x41200000
LUN status     : 0x00000000
Request ID     : 0x<request_ID>
ERP status     : 0x10000000			ZFCP_STATUS_ERP_TIMEDOUT
ERP step       : 0x0800				ZFCP_ERP_STEP_PORT_OPENING
ERP action     : 0x02				ZFCP_ERP_ACTION_REOPEN_PORT
ERP count      : 0x00
|
Timestamp      : ...				later than previous record
Area           : HBA
Subarea        : 00
Level          : 5	> default level		=> 3	<= default level
Exception      : -
CPU ID         : 00
Caller         : ...
Record ID      : 1
Tag            : fs_qtcb			=> fs_rerr
Request ID     : 0x<request_ID>
Request status : 0x00001010			ZFCP_STATUS_FSFREQ_DISMISSED
						| ZFCP_STATUS_FSFREQ_CLEANUP
FSF cmnd       : 0x00000005
FSF sequence no: 0x...
FSF issued     : ...				> 30 seconds ago
FSF stat       : 0x00000000			FSF_GOOD
FSF stat qual  : 00000000 00000000 00000000 00000000
Prot stat      : 0x00000001			FSF_PROT_GOOD
Prot stat qual : 00000000 00000000 00000000 00000000
Port handle    : 0x...
LUN handle     : 0x00000000
QTCB log length: ...
QTCB log info  : ...

In case of problems detecting that new responses are waiting on the input
queue, we sooner or later trigger adapter recovery due to an FSF request
timeout (trace tag "fsrth_1").
FSF requests with FSF request timeout are:
typically FSF_QTCB_ABORT_FCP_CMND; but theoretically also
FSF_QTCB_EXCHANGE_CONFIG_DATA or FSF_QTCB_EXCHANGE_PORT_DATA via sysfs,
FSF_QTCB_OPEN_PORT_WITH_DID or FSF_QTCB_CLOSE_PORT for WKA ports,
FSF_QTCB_FCP_CMND for task management function (LUN / target reset).
One or more pending requests can meanwhile have FSF_PROT_GOOD and FSF_GOOD
because the channel filled in the response via DMA into the request's QTCB.

In a theroretical case, inject code can create an erroneous FSF request
on purpose. If data router is enabled, it uses deferred error reporting.
A READ SCSI command can succeed with FSF_PROT_GOOD, FSF_GOOD, and
SAM_STAT_GOOD. But on writing the read data to host memory via DMA,
it can still fail, e.g. if an intentionally wrong scatter list does not
provide enough space. Rather than getting an unsuccessful response,
we get a QDIO activate check which in turn triggers adapter recovery.
One or more pending requests can meanwhile have FSF_PROT_GOOD and FSF_GOOD
because the channel filled in the response via DMA into the request's QTCB.
Example trace records formatted with zfcpdbf from the s390-tools package:

Timestamp      : ...
Area           : HBA
Subarea        : 00
Level          : 6	> default level		=> 3	<= default level
Exception      : -
CPU ID         : ..
Caller         : ...
Record ID      : 1
Tag            : fs_norm			=> fs_rerr
Request ID     : 0x<request_ID2>
Request status : 0x00001010			ZFCP_STATUS_FSFREQ_DISMISSED
						| ZFCP_STATUS_FSFREQ_CLEANUP
FSF cmnd       : 0x00000001
FSF sequence no: 0x...
FSF issued     : ...
FSF stat       : 0x00000000			FSF_GOOD
FSF stat qual  : 00000000 00000000 00000000 00000000
Prot stat      : 0x00000001			FSF_PROT_GOOD
Prot stat qual : ........ ........ 00000000 00000000
Port handle    : 0x...
LUN handle     : 0x...
|
Timestamp      : ...
Area           : SCSI
Subarea        : 00
Level          : 3
Exception      : -
CPU ID         : ..
Caller         : ...
Record ID      : 1
Tag            : rsl_err
Request ID     : 0x<request_ID2>
SCSI ID        : 0x...
SCSI LUN       : 0x...
SCSI result    : 0x000e0000			DID_TRANSPORT_DISRUPTED
SCSI retries   : 0x00
SCSI allowed   : 0x05
SCSI scribble  : 0x<request_ID2>
SCSI opcode    : 28...				Read(10)
FCP rsp inf cod: 0x00
FCP rsp IU     : 00000000 00000000 00000000 00000000
                                         ^^	SAM_STAT_GOOD
                 00000000 00000000

Only with luck in both above cases, we could see a follow-on trace record
of an unsuccesful event following a successful but late FSF response with
FSF_PROT_GOOD and FSF_GOOD. Typically this was the case for I/O requests
resulting in a SCSI trace record "rsl_err" with DID_TRANSPORT_DISRUPTED
[On ZFCP_STATUS_FSFREQ_DISMISSED, zfcp_fsf_protstatus_eval() sets
ZFCP_STATUS_FSFREQ_ERROR seen by the request handler functions as failure].
However, the reason for this follow-on trace was invisible because the
corresponding HBA trace record was missing at the default trace level
(by default hidden records with tags "fs_norm", "fs_qtcb", or "fs_open").

On adapter recovery, after we had shut down the QDIO queues, we perform
unsuccessful pseudo completions with flag ZFCP_STATUS_FSFREQ_DISMISSED
for each pending FSF request in zfcp_fsf_req_dismiss_all().
In order to find the root cause, we need to see all pseudo responses even
if the channel presented them successfully with FSF_PROT_GOOD and FSF_GOOD.

Therefore, check zfcp_fsf_req.status for ZFCP_STATUS_FSFREQ_DISMISSED
or ZFCP_STATUS_FSFREQ_ERROR and trace with a new tag "fs_rerr".

It does not matter that there are numerous places which set
ZFCP_STATUS_FSFREQ_ERROR after the location where we trace an FSF response
early. These cases are based on protocol status != FSF_PROT_GOOD or
== FSF_PROT_FSF_STATUS_PRESENTED and are thus already traced by default
as trace tag "fs_perr" or "fs_ferr" respectively.

NB: The trace record with tag "fssrh_1" for status read buffers on dismiss
all remains. zfcp_fsf_req_complete() handles this and returns early.
All other FSF request types are handled separately and as described above.

Signed-off-by: Steffen Maier <maier@linux.vnet.ibm.com>
Fixes: 8a36e4532ea1 ("[SCSI] zfcp: enhancement of zfcp debug features")
Fixes: 2e261af84cdb ("[SCSI] zfcp: Only collect FSF/HBA debug data for matching trace levels")
Reviewed-by: Benjamin Block <bblock@linux.vnet.ibm.com>
Signed-off-by: Benjamin Block <bblock@linux.vnet.ibm.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/s390/scsi/zfcp_dbf.h | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

--- a/drivers/s390/scsi/zfcp_dbf.h
+++ b/drivers/s390/scsi/zfcp_dbf.h
@@ -323,7 +323,11 @@ void zfcp_dbf_hba_fsf_response(struct zf
 {
 	struct fsf_qtcb *qtcb = req->qtcb;
 
-	if ((qtcb->prefix.prot_status != FSF_PROT_GOOD) &&
+	if (unlikely(req->status & (ZFCP_STATUS_FSFREQ_DISMISSED |
+				    ZFCP_STATUS_FSFREQ_ERROR))) {
+		zfcp_dbf_hba_fsf_resp("fs_rerr", 3, req);
+
+	} else if ((qtcb->prefix.prot_status != FSF_PROT_GOOD) &&
 	    (qtcb->prefix.prot_status != FSF_PROT_FSF_STATUS_PRESENTED)) {
 		zfcp_dbf_hba_fsf_resp("fs_perr", 1, req);
 

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 022/133] x86/fsgsbase/64: Report FSBASE and GSBASE correctly in core dumps
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (5 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 023/133] scsi: zfcp: fix queuecommand for scsi_eh commands when DIX enabled Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 008/133] IB/core: Fix the validations of a multicast LID in attach or detach operations Ben Hutchings
                   ` (126 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Brian Gerst, Andy Lutomirski, Ingo Molnar, Borislav Petkov,
	Borislav Petkov, Josh Poimboeuf, Denys Vlasenko, H. Peter Anvin,
	Thomas Gleixner, Chang Seok, Peter Zijlstra, Linus Torvalds

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Andy Lutomirski <luto@kernel.org>

commit 9584d98bed7a7a904d0702ad06bbcc94703cb5b4 upstream.

In ELF_COPY_CORE_REGS, we're copying from the current task, so
accessing thread.fsbase and thread.gsbase makes no sense.  Just read
the values from the CPU registers.

In practice, the old code would have been correct most of the time
simply because thread.fsbase and thread.gsbase usually matched the
CPU registers.

Signed-off-by: Andy Lutomirski <luto@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Borislav Petkov <bpetkov@suse.de>
Cc: Brian Gerst <brgerst@gmail.com>
Cc: Chang Seok <chang.seok.bae@intel.com>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
[bwh: Backported to 3.16: adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 arch/x86/include/asm/elf.h | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

--- a/arch/x86/include/asm/elf.h
+++ b/arch/x86/include/asm/elf.h
@@ -203,6 +203,7 @@ void set_personality_ia32(bool);
 
 #define ELF_CORE_COPY_REGS(pr_reg, regs)			\
 do {								\
+	unsigned long base;					\
 	unsigned v;						\
 	(pr_reg)[0] = (regs)->r15;				\
 	(pr_reg)[1] = (regs)->r14;				\
@@ -225,8 +226,8 @@ do {								\
 	(pr_reg)[18] = (regs)->flags;				\
 	(pr_reg)[19] = (regs)->sp;				\
 	(pr_reg)[20] = (regs)->ss;				\
-	(pr_reg)[21] = current->thread.fs;			\
-	(pr_reg)[22] = current->thread.gs;			\
+	rdmsrl(MSR_FS_BASE, base); (pr_reg)[21] = base;		\
+	rdmsrl(MSR_KERNEL_GS_BASE, base); (pr_reg)[22] = base;	\
 	asm("movl %%ds,%0" : "=r" (v)); (pr_reg)[23] = v;	\
 	asm("movl %%es,%0" : "=r" (v)); (pr_reg)[24] = v;	\
 	asm("movl %%fs,%0" : "=r" (v)); (pr_reg)[25] = v;	\

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 006/133] media: docs-rst: v4l: Fix sink compose selection target documentation
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (28 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 026/133] scsi: zfcp: fix passing fsf_req to SCSI trace on TMF to correlate with HBA Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 034/133] btrfs: resume qgroup rescan on rw remount Ben Hutchings
                   ` (103 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Hans Verkuil, Sakari Ailus, Mauro Carvalho Chehab

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Sakari Ailus <sakari.ailus@linux.intel.com>

commit 74dcb29a38e4419a8e4217caa7e35ccc1b31e5a4 upstream.

The rectangle which the sink compose rectangle is related to is documented
to be the source compose bounds rectangle. This is in obvious conflict with
the ground rule of the format propagation (from sink to source). The reason
behind this is that this was always supposed to be the sink compose bounds
rectangle. Fix it.

Fixes: 955f645aea04 ("[media] v4l: Add subdev selections documentation")

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Acked-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
[bwh: Backported to 3.16: adjust filename, context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 Documentation/DocBook/media/v4l/dev-subdev.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/Documentation/DocBook/media/v4l/dev-subdev.xml
+++ b/Documentation/DocBook/media/v4l/dev-subdev.xml
@@ -369,7 +369,7 @@
       underlying hardware.</para>
 
       <para>The coordinates to a step always refer to the actual size
-      of the previous step. The exception to this rule is the source
+      of the previous step. The exception to this rule is the sink
       compose rectangle, which refers to the sink compose bounds
       rectangle --- if it is supported by the hardware.</para>
 

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 020/133] media: v4l2-compat-ioctl32: Fix timespec conversion
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (43 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 024/133] scsi: zfcp: add handling for FCP_RESID_OVER to the fcp ingress path Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 041/133] skd: Submit requests to firmware before triggering the doorbell Ben Hutchings
                   ` (88 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, H. Peter Anvin, Sakari Ailus, Tiffany Lin, Laurent Pinchart,
	Mauro Carvalho Chehab, Hans Verkuil, Ricardo Ribalda Delgado,
	Daniel Mentz

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Daniel Mentz <danielmentz@google.com>

commit 9c7ba1d7634cef490b85bc64c4091ff004821bfd upstream.

Certain syscalls like recvmmsg support 64 bit timespec values for the
X32 ABI. The helper function compat_put_timespec converts a timespec
value to a 32 bit or 64 bit value depending on what ABI is used. The
v4l2 compat layer, however, is not designed to support 64 bit timespec
values and always uses 32 bit values. Hence, compat_put_timespec must
not be used.

Without this patch, user space will be provided with bad timestamp
values from the VIDIOC_DQEVENT ioctl. Also, fields of the struct
v4l2_event32 that come immediately after timestamp get overwritten,
namely the field named id.

Fixes: 81993e81a994 ("compat: Get rid of (get|put)_compat_time(val|spec)")

Cc: H. Peter Anvin <hpa@linux.intel.com>
Cc: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Cc: Tiffany Lin <tiffany.lin@mediatek.com>
Cc: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
Cc: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Daniel Mentz <danielmentz@google.com>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/media/v4l2-core/v4l2-compat-ioctl32.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

--- a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
+++ b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
@@ -731,7 +731,8 @@ static int put_v4l2_event32(struct v4l2_
 		copy_to_user(&up->u, &kp->u, sizeof(kp->u)) ||
 		put_user(kp->pending, &up->pending) ||
 		put_user(kp->sequence, &up->sequence) ||
-		compat_put_timespec(&kp->timestamp, &up->timestamp) ||
+		put_user(kp->timestamp.tv_sec, &up->timestamp.tv_sec) ||
+		put_user(kp->timestamp.tv_nsec, &up->timestamp.tv_nsec) ||
 		put_user(kp->id, &up->id) ||
 		copy_to_user(up->reserved, kp->reserved, 8 * sizeof(__u32)))
 			return -EFAULT;

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 000/133] 3.16.51-rc1 review
@ 2017-11-22  1:58 Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 033/133] iio: accel: st_accel: fix data-ready line configuration Ben Hutchings
                   ` (133 more replies)
  0 siblings, 134 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: torvalds, Guenter Roeck, akpm

This is the start of the stable review cycle for the 3.16.51 release.
There are 133 patches in this series, which will be posted as responses
to this one.  If anyone has any issues with these being applied, please
let me know.

Responses should be made by Fri Nov 24 20:00:00 UTC 2017.
Anything received after that time might be too late.

A combined patch relative to 3.16.50 will be posted as an additional
response to this.  A shortlog and diffstat can be found below.

Ben.

-------------

Aleksa Sarai (1):
      btrfs: resume qgroup rescan on rw remount
         [6c6b5a39c4bf3dbd8cf629c9f5450e983c19dbb9]

Aleksandr Bezzubikov (1):
      PCI: shpchp: Enable bridge bus mastering if MSI is enabled
         [48b79a14505349a29b3e20f03619ada9b33c4b17]

Alexandre Belloni (1):
      rtc: sa1100: fix unbalanced clk_prepare_enable/clk_disable_unprepare
         [1cf85b2327a9b03bde5266e72ee64a38d085256d]

Amir Goldstein (1):
      xfs: fix incorrect log_flushed on fsync
         [47c7d0b19502583120c3f396c7559e7a77288a68]

Andrey Korolyov (1):
      cs5536: add support for IDE controller variant
         [591b6bb605785c12a21e8b07a08a277065b655a5]

Andy Lutomirski (1):
      x86/fsgsbase/64: Report FSBASE and GSBASE correctly in core dumps
         [9584d98bed7a7a904d0702ad06bbcc94703cb5b4]

Aneesh Kumar K.V (1):
      powerpc/mm: Build fix for non SPARSEMEM_VMEMAP config
         [7e7dc66adcf490a619bc3c7763a8cebadfba73e3]

Arnaldo Carvalho de Melo (2):
      perf events parse: Rename parsing state struct to clearer name
         [5d369a75eda5855d64981668a1d60cfac00d52e9]
      perf events parse: Use just one parse events state struct
         [d17d0878f456c8227345b6c76b918ec068fa0abd]

Arnd Bergmann (2):
      IB/mlx4: fix sprintf format warning
         [d0dbf771309fecd73f4ac1566c1400cb12807ee2]
      mfd: omap-usb-tll: Fix register offsets
         [993dc737c0996c163325961fb62a0ed9fd0308b4]

Arvind Yadav (1):
      media: imon: Fix null-ptr-deref in imon_probe
         [58fd55e838276a0c13d1dc7c387f90f25063cbf3]

Avraham Stern (1):
      mac80211: flush hw_roc_start work before cancelling the ROC
         [6e46d8ce894374fc135c96a8d1057c6af1fef237]

Baohong Liu (1):
      tracing: Apply trace_clock changes to instance max buffer
         [170b3b1050e28d1ba0700e262f0899ffa4fccc52]

Bart Van Assche (3):
      block: Relax a check in blk_start_queue()
         [4ddd56b003f251091a67c15ae3fe4a5c5c5e390a]
      skd: Avoid that module unloading triggers a use-after-free
         [7277cc67b3916eed47558c64f9c9c0de00a35cda]
      skd: Submit requests to firmware before triggering the doorbell
         [5fbd545cd3fd311ea1d6e8be4cedddd0ee5684c7]

Beni Lev (1):
      mac80211_hwsim: Use proper TX power
         [9de981f507474f326e42117858dc9a9321331ae5]

Benjamin Block (1):
      scsi: zfcp: add handling for FCP_RESID_OVER to the fcp ingress path
         [a099b7b1fc1f0418ab8d79ecf98153e1e134656e]

Bhushan Shah (1):
      backlight: lm3630a: Bump REG_MAX value to 0x50 instead of 0x1F
         [06168a64b1ae346816fcd0a0c3ea5276c778408b]

Bjorn Andersson (1):
      wcn36xx: Introduce mutual exclusion of fw configuration
         [39efc7cc7ccf82d1cd946580cdb70760f347305a]

Bjørn Mork (2):
      net: cdc_ether: fix divide by 0 on bad descriptors
         [2cb80187ba065d7decad7c6614e35e07aec8a974]
      net: qmi_wwan: fix divide by 0 on bad descriptors
         [7fd078337201cf7468f53c3d9ef81ff78cb6df3b]

Boqun Feng (2):
      kvm/x86: Avoid async PF preempting the kernel incorrectly
         [a2b7861bb33b2538420bb5d8554153484d3f961f]
      kvm/x86: Handle async PF in RCU read-side critical sections
         [b862789aa5186d5ea3a024b7cfe0f80c3a38b980]

Brian King (1):
      scsi: aacraid: Fix command send race condition
         [1ae948fa4f00f3a2823e7cb19a3049ef27dd6947]

Cameron Gutman (2):
      Input: xpad - don't depend on endpoint order
         [c01b5e7464f0cf20936d7467c7528163c4e2782d]
      Input: xpad - validate USB endpoint type during probe
         [122d6a347329818419b032c5a1776e6b3866d9b9]

Christophe JAILLET (2):
      driver core: bus: Fix a potential double free
         [0f9b011d3321ca1079c7a46c18cb1956fbdb7bcb]
      mfd: max8998: Fix potential NULL pointer dereference
         [2042f3c29f2f11129434de8a610878e8a15b4174]

Colin Ian King (2):
      media: em28xx: calculate left volume level correctly
         [801e3659bf2c87c31b7024087d61e89e172b5651]
      staging/rts5208: fix incorrect shift to extract upper nybble
         [34ff1bf4920471cff66775dc39537b15c5f0feff]

Dan Carpenter (6):
      IB/usnic: check for allocation failure
         [d518a44d317d92f4c297ea26a308b1ac1a980d33]
      powerpc/44x: Fix mask and shift to zero bug
         [8d046759f6ad75824fdf7b9c9a3da0272ea9ea92]
      regulator: da9063: Return an error code on probe failure
         [b6615659827839f3031c6bd4c1599c3c705778ac]
      rtlwifi: rtl8821ae: Fix HW_VAR_NAV_UPPER operation
         [d28ac7be15c70343cb270648e252f54d770eca6a]
      scsi: qla2xxx: Fix an integer overflow in sysfs code
         [e6f77540c067b48dee10f1e33678415bfcc89017]
      staging: lustre: obdclass: return -EFAULT if copy_from_user() fails
         [092c3def24bb68a00ff58c76ed67b9ff448387ce]

Daniel Mentz (1):
      media: v4l2-compat-ioctl32: Fix timespec conversion
         [9c7ba1d7634cef490b85bc64c4091ff004821bfd]

David Spinadel (1):
      iwlwifi: mvm: Avoid deferring non bufferable frames
         [eb045e6e0389eabfd704dd7a76d8b2a892970e85]

Dmitry Fleytman (1):
      usb: Add device quirk for Logitech HD Pro Webcam C920-C
         [a1279ef74eeeb5f627f091c71d80dd7ac766c99d]

Dmitry Torokhov (2):
      Input: gtco - fix potential out-of-bound access
         [a50829479f58416a013a4ccca791336af3c584c7]
      Input: ucb1400_ts - fix suspend and resume handling
         [39467fc1054a91efa697162a94e5b0e1a4b7b580]

Douglas Anderson (1):
      USB: core: Avoid race of async_completed() w/ usbdev_release()
         [ed62ca2f4f51c17841ea39d98c0c409cb53a3e10]

Edwin Török (1):
      dlm: avoid double-free on error path in dlm_device_{register,unregister}
         [55acdd926f6b21a5cdba23da98a48aedf19ac9c3]

Eric Dumazet (1):
      ipv6: fix typo in fib6_net_exit()
         [32a805baf0fb70b6dbedefcd7249ac7f580f9e3b]

Eric W. Biederman (1):
      fcntl: Don't use ambiguous SIG_POLL si_codes
         [d08477aa975e97f1dc64c0ae59cebf98520456ce]

Finn Thain (1):
      scsi: mac_esp: Fix PIO transfers for MESSAGE IN phase
         [7640d91d285893a5cf1e62b2cd00f0884c401d93]

Guenter Roeck (1):
      media: uvcvideo: Prevent heap overflow when accessing mapped controls
         [7e09f7d5c790278ab98e5f2c22307ebe8ad6e8ba]

Guillaume Nault (2):
      l2tp: pass tunnel pointer to ->session_create()
         [f026bc29a8e093edfbb2a77700454b285c97e8ad]
      l2tp: prevent creation of sessions on terminated tunnels
         [f3c66d4e144a0904ea9b95d23ed9f8eb38c11bfb]

Ilya Lesokhin (1):
      IB/mlx5: Fix integer overflow when page_shift == 31
         [7b4cdaae73ee833975a767cf54a3354d355b3f8d]

Jaegeuk Kim (1):
      f2fs: check hot_data for roll-forward recovery
         [125c9fb1ccb53eb2ea9380df40f3c743f3fb2fed]

Jan H . Schönherr (1):
      KVM: SVM: Add a missing 'break' statement
         [49a8afca386ee1775519a4aa80f8e121bd227dd4]

Jan Kara (1):
      bcache: Fix leak of bdev reference
         [4b758df21ee7081ab41448d21d60367efaa625b3]

Jason A. Donenfeld (1):
      mac80211: use constant time comparison with keys
         [2bdd713b92a9cade239d3c7d15205a09f556624d]

Jesper Dangaard Brouer (1):
      Revert "net: use lib/percpu_counter API for fragmentation mem accounting"
         [fb452a1aa3fd4034d7999e309c5466ff2d7005aa]

Jia-Ju Bai (1):
      wcn36xx: Remove unnecessary rcu_read_unlock in wcn36xx_bss_info_changed
         [c0d5adc35c0b010120391117cb07be6623cf8940]

Jiri Olsa (1):
      perf tests attr: Fix no-delay test
         [44fed277f81ba22e3f2fbcf1501c3b14aeb9f8e4]

Johan Hovold (5):
      ARM: OMAP2+: omap_device: drop broken RPM status update from suspend_noirq
         [90de9634a5d57b92d8af4ec23aa2c9b297ec8168]
      USB: serial: console: fix use-after-free after failed setup
         [299d7572e46f98534033a9e65973f13ad1ce9047]
      [media] cx231xx-cards: fix NULL-deref on missing association descriptor
         [6c3b047fa2d2286d5e438bcb470c7b1a49f415f6]
      pwm: tiehrpwm: Fix runtime PM imbalance at unbind
         [c7fdd3f52944b81d807ce7a5fde7d1ca8a2a0919]
      pwm: tiehrpwm: fix clock imbalance in probe error path
         [e2b5602af76dec75f474e4173afb4215007ecfa5]

Johannes Berg (2):
      iwlwifi: mvm: simplify bufferable MMPDU check
         [7426ee33a29b3215357986378c77bb9949518154]
      mac80211: don't compare TKIP TX MIC key in reinstall prevention
         [cfbb0d90a7abb289edc91833d0905931f8805f12]

Jonas Gorski (5):
      MIPS: AR7: allow NULL clock for clk_get_rate
         [585e0e9d02a690c29932b2fc0789835c7b91d448]
      MIPS: BCM63XX: allow NULL clock for clk_get_rate
         [1b495faec231980b6c719994b24044ccc04ae06c]
      MIPS: Loongson 2F: allow NULL clock for clk_get_rate
         [386787b1fcab2dd3d16ca3f46729aaafdef306e3]
      MIPS: ralink: allow NULL clock for clk_get_rate
         [a18097b7676bf5fb2677bf5e6cc24e721d7c2596]
      m68k: allow NULL clock for clk_get_rate
         [94b282267c2f3af725b154c91275ed374c1f11de]

Jorgen Hansen (3):
      VSOCK: Detach QP check should filter out non matching QPs.
         [8ab18d71de8b07d2c4d6f984b718418c09ea45c5]
      VSOCK: Fix lockdep issue.
         [8566b86ab9f0f45bc6f7dd422b21de9d0cf5415a]
      VSOCK: sock_put wasn't safe to call in interrupt context
         [4ef7ea9195ea73262cd9730fb54e1eb726da157b]

Jose Abreu (1):
      ARC: Re-enable MMU upon Machine Check exception
         [1ee55a8f7f6b7ca4c0c59e0b4b4e3584a085c2d3]

Julien Grall (1):
      xen/events: events_fifo: Don't use {get,put}_cpu() in xen_evtchn_fifo_init()
         [22f12f0df802cea865672d8f39fbebdc03981050]

Kai-Heng Feng (2):
      Input: i8042 - add Gigabyte P57 to the keyboard reset table
         [697c5d8a36768b36729533fb44622b35d56d6ad0]
      usb: quirks: add delay init quirk for Corsair Strafe RGB keyboard
         [de3af5bf259d7a0bfaac70441c8568ab5998d80c]

Konstantin Khlebnikov (1):
      perf tools: Really install manpages via 'make install-man'
         [2826478a6660158d261bc49ad8954a8f5c39be07]

Leon Romanovsky (2):
      RDMA/usnic: Fix remove address space warning
         [5d50f400e56fbc7a14ef3f8d42ba47710e455881]
      net/mlx4_core: Make explicit conversion to 64bit value
         [187782eb58a89ea030731114c6ae37842a4472fe]

Lorenzo Bianconi (3):
      iio: accel: st_accel: fix data-ready line configuration
         [4303741f99d617c1fc3c9069195d3d620c2f88c4]
      iio: magnetometer: st_magn_core: enable multiread by default for LIS3MDL
         [13718564167da80b6169809185b4c5a32497d0c1]
      iio: pressure: st_pressure: fix drdy configuration for LPS22HB and LPS25H
         [ef0bc2e83966b5aed055acb6d16a3788de5205f4]

Luca Coelho (1):
      iwlwifi: pci: add new PCI ID for 7265D
         [3f7a5e13e85026b6e460bbd6e87f87379421d272]

Maciej S. Szmigiero (1):
      USB: serial: option: add support for D-Link DWM-157 C1
         [169e86546f5712179709de23cd64bbb15f199fab]

Mark Rutland (1):
      ARM: 8692/1: mm: abort uaccess retries upon fatal signal
         [746a272e44141af24a02f6c9b0f65f4c4598ed42]

Martin Schwidefsky (1):
      s390/mm: fix race on mm->context.flush_mm
         [60f07c8ec5fae06c23e9fd7bab67dabce92b3414]

Matt Redfearn (6):
      MIPS: Handle non word sized instructions when examining frame
         [11887ed172a6960673f130dad8f8fb42778f64d7]
      MIPS: Stacktrace: Fix microMIPS stack unwinding on big endian systems
         [41885b02127c7ae169dc94542de4a8eed175495a]
      MIPS: microMIPS: Fix decoding of addiusp instruction
         [a0ae2b08331a9882150618e0c81ea837e4a37ace]
      MIPS: microMIPS: Fix decoding of swsp16 instruction
         [cea8cd498f4f1c30ea27e3664b3c671e495c4fce]
      MIPS: microMIPS: Fix detection of addiusp instruction
         [b332fec0489295ee7a0aab4a89bd7257cd126f7f]
      printk/console: Always disable boot consoles that use init memory before it is freed
         [2b1be689f3aadcfe0a768314c80e43483c784659]

Michael Ellerman (1):
      powerpc: Fix DAR reporting when alignment handler faults
         [f9effe925039cf54489b5c04e0d40073bb3a123d]

Michael Lyle (1):
      bcache: fix bch_hprint crash and improve output
         [9276717b9e297a62d1151a43d1cd286213f68eb7]

Mike Marciniszyn (1):
      IB/{qib, hfi1}: Avoid flow control testing for RDMA write operation
         [5b0ef650bd0f820e922fcc42f1985d4621ae19cf]

NeilBrown (1):
      md/bitmap: disable bitmap_resize for file-backed bitmaps.
         [e8a27f836f165c26f867ece7f31eb5c811692319]

Nisar Sayed (1):
      smsc95xx: Configure pause time to 0xffff when tx flow control enabled
         [9c0827317f235865ae421293f8aecf6cb327a63e]

Noa Osherovich (1):
      IB/core: Fix the validations of a multicast LID in attach or detach operations
         [5236333592244557a19694a51337df6ac018f0a7]

Oleg Nesterov (1):
      signal: move the "sig < SIGRTMIN" check into siginmask(sig)
         [5c8ccefdf46c5f87d87b694c7fbc04941c2c99a5]

Paul Mackerras (1):
      powerpc: Correct instruction code for xxlor instruction
         [93b2d3cf3733b4060d3623161551f51ea1ab5499]

Peter Ujfalusi (1):
      ARM: dts: dra7-evm: Rename mmc2_3v3 supply to evm_3v3_sw
         [27f39e5f5fd1d9eb5ce67507ad57ef5df007f208]

Ravikumar Kattekola (1):
      ARM: dts: dra7-evm: Correct the vmmc-supply for mmc2
         [b5ca62a53d2df30432118edeff61acc8717d2515]

Rui Teng (1):
      powerpc/mm: Fix check of multiple 16G pages from device tree
         [23493c121912a39f0262e0dbeb236e1d39efa4d5]

Sabrina Dubroca (1):
      ipv6: fix memory leak with multiple tables during netns destruction
         [ba1cc08d9488c94cb8d94f545305688b72a2a300]

Sakari Ailus (1):
      media: docs-rst: v4l: Fix sink compose selection target documentation
         [74dcb29a38e4419a8e4217caa7e35ccc1b31e5a4]

Sandeep Singh (1):
      usb:xhci:Fix regression when ATI chipsets detected
         [e6b422b88b46353cf596e0db6dc0e39d50d90d6e]

Sean Young (1):
      media: lirc_zilog: driver only sends LIRCCODE
         [89d8a2cc51d1f29ea24a0b44dde13253141190a0]

SeongJae Park (1):
      mm/vmstat.c: fix wrong comment
         [f113e64121ba9f4791332248b315d9f57ee33a6b]

Slava Pestov (1):
      bcache: fix crash on shutdown in passthrough mode
         [a664d0f05a2ec02c8f042db536d84d15d6e19e81]

Steffen Maier (6):
      scsi: zfcp: fix capping of unsuccessful GPN_FT SAN response trace records
         [975171b4461be296a35e83ebd748946b81cf0635]
      scsi: zfcp: fix missing trace records for early returns in TMF eh handlers
         [1a5d999ebfc7bfe28deb48931bb57faa8e4102b6]
      scsi: zfcp: fix passing fsf_req to SCSI trace on TMF to correlate with HBA
         [9fe5d2b2fd30aa8c7827ec62cbbe6d30df4fe3e3]
      scsi: zfcp: fix payload with full FCP_RSP IU in SCSI trace records
         [12c3e5754c8022a4f2fd1e9f00d19e99ee0d3cc1]
      scsi: zfcp: fix queuecommand for scsi_eh commands when DIX enabled
         [71b8e45da51a7b64a23378221c0a5868bd79da4f]
      scsi: zfcp: trace HBA FSF response by default on dismiss or timedout late response
         [fdb7cee3b9e3c561502e58137a837341f10cbf8b]

Stephen Hemminger (1):
      net: don't decrement kobj reference count on init failure
         [d0d6683716791b2a2761a1bb025c613eb73da6c3]

Steven Rostedt (1):
      ftrace: Fix selftest goto location on error
         [46320a6acc4fb58f04bcf78c4c942cc43b20f986]

Tang Junhui (5):
      bcache: correct cache_dirty_target in __update_writeback_rate()
         [a8394090a9129b40f9d90dcb7f4a49d60c727ca6]
      bcache: do not subtract sectors_to_gc for bypassed IO
         [69daf03adef5f7bc13e0ac86b4b8007df1767aab]
      bcache: fix for gc and write-back race
         [9baf30972b5568d8b5bc8b3c46a6ec5b58100463]
      bcache: fix sequential large write IO bypass
         [c81ffa32a214c84b08900fbc9d432187bd948eba]
      bcache: initialize dirty stripes in flash_dev_run()
         [175206cf9ab63161dec74d9cd7f9992e062491f5]

Ted Mielczarek (1):
      Input: xpad - add support for Xbox One controllers
         [1a48ff81b3912be5fadae3fafde6c2f632246a4c]

Thierry Reding (2):
      asm/sections: add helpers to check for section data
         [979559362516bb0f5424505c607210ac054e30ae]
      printk: only unregister boot consoles when necessary
         [81cc26f2bd11ba4421a17a2d5cebe4bba206c239]

Thomas Gleixner (1):
      genirq: Make sparse_irq_lock protect what it should protect
         [12ac1d0f6c3e95732d144ffa65c8b20fbd9aa462]

Tony Asleson (1):
      bcache: Correct return value for sysfs attach errors
         [77fa100f27475d08a569b9d51c17722130f089e7]

Wanpeng Li (1):
      KVM: async_pf: Fix #DF due to inject "Page not Present" and "Page Ready" exceptions simultaneously
         [9a6e7c39810e4a8bc7fc95056cefb40583fe07ef]

Xiangliang.Yu (1):
      drm/ttm: Fix accounting error when fail to get pages for pool
         [9afae2719273fa1d406829bf3498f82dbdba71c7]

Xin Long (1):
      sctp: do not peel off an assoc from one netns to another one
         [df80cd9b28b9ebaa284a41df611dbf3a2d05ca74]

Yazen Ghannam (1):
      ACPI, APEI, EINJ: Subtract any matching Register Region from Trigger resources
         [1d5d820b8fe83b5f859d1ebb028a09ada426447e]

 Documentation/DocBook/media/v4l/dev-subdev.xml     |   2 +-
 Makefile                                           |   4 +-
 arch/arc/kernel/entry.S                            |   6 +
 arch/arc/mm/tlb.c                                  |   3 -
 arch/arm/boot/dts/dra7-evm.dts                     |  14 +-
 arch/arm/mach-omap2/omap_device.c                  |  10 --
 arch/arm/mm/fault.c                                |   5 +-
 arch/m68k/platform/coldfire/clk.c                  |   3 +
 arch/mips/ar7/clock.c                              |   3 +
 arch/mips/bcm63xx/clk.c                            |   3 +
 arch/mips/include/uapi/asm/inst.h                  |   2 +-
 arch/mips/kernel/process.c                         |  39 +++--
 arch/mips/loongson/lemote-2f/clock.c               |   3 +
 arch/mips/ralink/clk.c                             |   3 +
 arch/powerpc/boot/4xx.c                            |   2 +-
 arch/powerpc/include/asm/ppc-opcode.h              |   2 +-
 arch/powerpc/kernel/align.c                        | 119 ++++++++-----
 arch/powerpc/mm/hash_utils_64.c                    |   2 +-
 arch/powerpc/mm/init_64.c                          |   4 +-
 arch/s390/include/asm/mmu.h                        |   2 +
 arch/s390/include/asm/mmu_context.h                |   4 +-
 arch/s390/include/asm/tlbflush.h                   |   4 +-
 arch/x86/include/asm/elf.h                         |   5 +-
 arch/x86/include/asm/kvm_para.h                    |   4 +-
 arch/x86/kernel/kvm.c                              |  13 +-
 arch/x86/kvm/svm.c                                 |   3 +-
 arch/x86/kvm/x86.c                                 |  34 +++-
 block/blk-core.c                                   |   2 +-
 drivers/acpi/apei/einj.c                           |   2 +-
 drivers/ata/pata_amd.c                             |   1 +
 drivers/ata/pata_cs5536.c                          |   1 +
 drivers/base/bus.c                                 |   2 +-
 drivers/block/skd_main.c                           |  21 ++-
 drivers/gpu/drm/ttm/ttm_page_alloc.c               |   2 +-
 drivers/iio/accel/st_accel_core.c                  |   2 +-
 drivers/iio/magnetometer/st_magn_core.c            |   2 +-
 drivers/iio/pressure/st_pressure_core.c            |   2 +-
 drivers/infiniband/core/verbs.c                    |  44 ++++-
 drivers/infiniband/hw/mlx4/sysfs.c                 |   2 +-
 drivers/infiniband/hw/mlx5/mr.c                    |   9 +-
 drivers/infiniband/hw/qib/qib_rc.c                 |   3 +-
 drivers/infiniband/hw/usnic/usnic_fwd.c            |  12 +-
 drivers/infiniband/hw/usnic/usnic_fwd.h            |   2 +-
 drivers/infiniband/hw/usnic/usnic_ib_main.c        |  10 +-
 drivers/infiniband/hw/usnic/usnic_ib_verbs.c       |   2 +
 drivers/input/joystick/xpad.c                      | 191 ++++++++++++++++++---
 drivers/input/serio/i8042-x86ia64io.h              |   7 +
 drivers/input/tablet/gtco.c                        |  17 +-
 drivers/input/touchscreen/ucb1400_ts.c             |   4 +-
 drivers/md/bcache/bcache.h                         |   1 +
 drivers/md/bcache/request.c                        |  12 +-
 drivers/md/bcache/super.c                          |  10 +-
 drivers/md/bcache/sysfs.c                          |   4 +-
 drivers/md/bcache/util.c                           |  50 ++++--
 drivers/md/bcache/writeback.c                      |  20 ++-
 drivers/md/bcache/writeback.h                      |  21 ++-
 drivers/md/bitmap.c                                |   5 +
 drivers/media/rc/imon.c                            |   5 +
 drivers/media/usb/cx231xx/cx231xx-cards.c          |   2 +-
 drivers/media/usb/em28xx/em28xx-audio.c            |   2 +-
 drivers/media/usb/uvc/uvc_ctrl.c                   |   7 +
 drivers/media/v4l2-core/v4l2-compat-ioctl32.c      |   3 +-
 drivers/mfd/max8998.c                              |   6 +-
 drivers/mfd/omap-usb-tll.c                         |   4 +-
 drivers/net/ethernet/mellanox/mlx4/fw.c            |   2 +-
 drivers/net/usb/cdc_ether.c                        |   5 +-
 drivers/net/usb/qmi_wwan.c                         |   2 +-
 drivers/net/usb/smsc95xx.c                         |  11 +-
 drivers/net/wireless/ath/wcn36xx/main.c            |  49 +++++-
 drivers/net/wireless/ath/wcn36xx/wcn36xx.h         |   4 +
 drivers/net/wireless/iwlwifi/mvm/mac80211.c        |  11 +-
 drivers/net/wireless/iwlwifi/pcie/drv.c            |   1 +
 drivers/net/wireless/mac80211_hwsim.c              |   1 -
 drivers/pci/hotplug/shpchp_hpc.c                   |   2 +
 drivers/pwm/pwm-tiehrpwm.c                         |   5 +-
 drivers/regulator/da9063-regulator.c               |   2 +-
 drivers/rtc/rtc-sa1100.c                           |   4 +-
 drivers/s390/scsi/zfcp_dbf.c                       |  31 +++-
 drivers/s390/scsi/zfcp_dbf.h                       |  13 +-
 drivers/s390/scsi/zfcp_fc.h                        |   6 +-
 drivers/s390/scsi/zfcp_fsf.c                       |   7 +-
 drivers/s390/scsi/zfcp_scsi.c                      |  16 +-
 drivers/scsi/aacraid/aachba.c                      |  48 ++----
 drivers/scsi/mac_esp.c                             |  35 ++--
 drivers/scsi/qla2xxx/qla_attr.c                    |   8 +-
 drivers/staging/lustre/lustre/obdclass/class_obd.c |   4 +-
 drivers/staging/media/lirc/lirc_zilog.c            |   8 +-
 drivers/staging/rtl8821ae/rtl8821ae/hw.c           |   2 +-
 drivers/staging/rts5208/rtsx_scsi.c                |   2 +-
 drivers/usb/core/devio.c                           |   4 +-
 drivers/usb/core/quirks.c                          |   6 +-
 drivers/usb/host/pci-quirks.c                      |  35 ++--
 drivers/usb/serial/console.c                       |   1 +
 drivers/usb/serial/option.c                        |   1 +
 drivers/video/backlight/lm3630a_bl.c               |   5 +-
 drivers/xen/events/events_fifo.c                   |   7 +-
 fs/btrfs/super.c                                   |   3 +
 fs/dlm/user.c                                      |   4 +
 fs/f2fs/recovery.c                                 |   2 +-
 fs/fcntl.c                                         |  13 +-
 fs/xfs/xfs_log.c                                   |   7 -
 include/asm-generic/sections.h                     |  65 +++++++
 include/linux/pci_ids.h                            |   1 +
 include/linux/signal.h                             |  24 ++-
 include/net/inet_frag.h                            |  32 +---
 include/uapi/asm-generic/siginfo.h                 |   4 +-
 kernel/irq/irqdesc.c                               |  24 +--
 kernel/printk/printk.c                             |  24 ++-
 kernel/trace/trace.c                               |   2 +-
 kernel/trace/trace_selftest.c                      |   2 +-
 mm/vmstat.c                                        |   2 +-
 net/core/net-sysfs.c                               |  22 ++-
 net/ipv4/inet_fragment.c                           |   2 -
 net/ipv6/ip6_fib.c                                 |  25 ++-
 net/l2tp/l2tp_core.c                               |  41 +++--
 net/l2tp/l2tp_core.h                               |   8 +-
 net/l2tp/l2tp_eth.c                                |  11 +-
 net/l2tp/l2tp_netlink.c                            |   8 +-
 net/l2tp/l2tp_ppp.c                                |  19 +-
 net/mac80211/cfg.c                                 |   2 +
 net/mac80211/key.c                                 |  37 +++-
 net/sctp/socket.c                                  |   4 +
 net/vmw_vsock/vmci_transport.c                     | 173 +++++++++----------
 net/vmw_vsock/vmci_transport.h                     |   4 +-
 tools/perf/Documentation/Makefile                  |   2 +-
 ...st-record-no-delay => test-record-no-buffering} |   2 +-
 tools/perf/util/parse-events.c                     |   4 +-
 tools/perf/util/parse-events.h                     |   7 +-
 tools/perf/util/parse-events.y                     |  30 ++--
 129 files changed, 1147 insertions(+), 591 deletions(-)

-- 
Ben Hutchings
Beware of programmers who carry screwdrivers. - Leonard Brandwein

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 009/133] signal: move the "sig < SIGRTMIN" check into siginmask(sig)
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (11 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 039/133] block: Relax a check in blk_start_queue() Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 013/133] printk/console: Always disable boot consoles that use init memory before it is freed Ben Hutchings
                   ` (120 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Oleg Nesterov, Linus Torvalds, Meelis Roos

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Oleg Nesterov <oleg@redhat.com>

commit 5c8ccefdf46c5f87d87b694c7fbc04941c2c99a5 upstream.

All the users of siginmask() must ensure that sig < SIGRTMIN.  sig_fatal()
doesn't and this is wrong:

	UBSAN: Undefined behaviour in kernel/signal.c:911:6
	shift exponent 32 is too large for 32-bit type 'long unsigned int'

the patch doesn't add the neccesary check to sig_fatal(), it moves the
check into siginmask() and updates other callers.

Link: http://lkml.kernel.org/r/20160517195052.GA15187@redhat.com
Reported-by: Meelis Roos <mroos@linux.ee>
Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 include/linux/signal.h | 16 +++++++---------
 1 file changed, 7 insertions(+), 9 deletions(-)

--- a/include/linux/signal.h
+++ b/include/linux/signal.h
@@ -401,7 +401,9 @@ int unhandled_signal(struct task_struct
 #else
 #define rt_sigmask(sig)	sigmask(sig)
 #endif
-#define siginmask(sig, mask) (rt_sigmask(sig) & (mask))
+
+#define siginmask(sig, mask) \
+	((sig) < SIGRTMIN && (rt_sigmask(sig) & (mask)))
 
 #define SIG_KERNEL_ONLY_MASK (\
 	rt_sigmask(SIGKILL)   |  rt_sigmask(SIGSTOP))
@@ -422,14 +424,10 @@ int unhandled_signal(struct task_struct
         rt_sigmask(SIGCONT)   |  rt_sigmask(SIGCHLD)   | \
 	rt_sigmask(SIGWINCH)  |  rt_sigmask(SIGURG)    )
 
-#define sig_kernel_only(sig) \
-	(((sig) < SIGRTMIN) && siginmask(sig, SIG_KERNEL_ONLY_MASK))
-#define sig_kernel_coredump(sig) \
-	(((sig) < SIGRTMIN) && siginmask(sig, SIG_KERNEL_COREDUMP_MASK))
-#define sig_kernel_ignore(sig) \
-	(((sig) < SIGRTMIN) && siginmask(sig, SIG_KERNEL_IGNORE_MASK))
-#define sig_kernel_stop(sig) \
-	(((sig) < SIGRTMIN) && siginmask(sig, SIG_KERNEL_STOP_MASK))
+#define sig_kernel_only(sig)		siginmask(sig, SIG_KERNEL_ONLY_MASK)
+#define sig_kernel_coredump(sig)	siginmask(sig, SIG_KERNEL_COREDUMP_MASK)
+#define sig_kernel_ignore(sig)		siginmask(sig, SIG_KERNEL_IGNORE_MASK)
+#define sig_kernel_stop(sig)		siginmask(sig, SIG_KERNEL_STOP_MASK)
 
 #define sig_user_defined(t, signr) \
 	(((t)->sighand->action[(signr)-1].sa.sa_handler != SIG_DFL) &&	\

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 018/133] wcn36xx: Introduce mutual exclusion of fw configuration
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (3 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 029/133] scsi: zfcp: trace HBA FSF response by default on dismiss or timedout late response Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 023/133] scsi: zfcp: fix queuecommand for scsi_eh commands when DIX enabled Ben Hutchings
                   ` (128 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Bjorn Andersson, Kalle Valo

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Bjorn Andersson <bjorn.andersson@linaro.org>

commit 39efc7cc7ccf82d1cd946580cdb70760f347305a upstream.

As the association status changes the driver needs to configure the
hardware. This is done based on information in the "sta" acquired by
ieee80211_find_sta(), which requires the caller to ensure that the "sta"
is valid while its being used; generally by entering an rcu read
section.

But the operations acting on the "sta" has to communicate with the
firmware and may therefor sleep, resulting in the following report:

[   31.418190] BUG: sleeping function called from invalid context at
kernel/locking/mutex.c:238
[   31.425919] in_atomic(): 0, irqs_disabled(): 0, pid: 34, name:
kworker/u8:1
[   31.434609] CPU: 0 PID: 34 Comm: kworker/u8:1 Tainted: G        W
4.12.0-rc4-next-20170607+ #993
[   31.441002] Hardware name: Qualcomm Technologies, Inc. APQ 8016 SBC
(DT)
[   31.450380] Workqueue: phy0 ieee80211_iface_work
[   31.457226] Call trace:
[   31.461830] [<ffffff8008088c58>] dump_backtrace+0x0/0x260
[   31.464004] [<ffffff8008088f7c>] show_stack+0x14/0x20
[   31.469557] [<ffffff8008392e70>] dump_stack+0x98/0xb8
[   31.474592] [<ffffff80080e4330>] ___might_sleep+0xf0/0x118
[   31.479626] [<ffffff80080e43a8>] __might_sleep+0x50/0x88
[   31.485010] [<ffffff80088ff9a4>] mutex_lock+0x24/0x60
[   31.490479] [<ffffff8008595c38>] wcn36xx_smd_set_link_st+0x30/0x130
[   31.495428] [<ffffff8008591ed8>] wcn36xx_bss_info_changed+0x148/0x448
[   31.501504] [<ffffff80088ab3c4>]
ieee80211_bss_info_change_notify+0xbc/0x118
[   31.508102] [<ffffff80088f841c>] ieee80211_assoc_success+0x664/0x7f8
[   31.515220] [<ffffff80088e13d4>]
ieee80211_rx_mgmt_assoc_resp+0x144/0x2d8
[   31.521555] [<ffffff80088e1e20>]
ieee80211_sta_rx_queued_mgmt+0x190/0x698
[   31.528239] [<ffffff80088bc44c>] ieee80211_iface_work+0x234/0x368
[   31.535011] [<ffffff80080d81ac>] process_one_work+0x1cc/0x340
[   31.541086] [<ffffff80080d8368>] worker_thread+0x48/0x430
[   31.546814] [<ffffff80080de448>] kthread+0x108/0x138
[   31.552195] [<ffffff8008082ec0>] ret_from_fork+0x10/0x50

In order to ensure that the "sta" remains alive (and consistent) for the
duration of bss_info_changed() mutual exclusion has to be ensured with
sta_remove().

This is done by introducing a mutex to cover firmware configuration
changes, which is made to also ensure mutual exclusion between other
operations changing the state or configuration of the firmware. With
this we can drop the rcu read lock.

Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
[bwh: Backported to 3.16:
 - Drop changes in wcn36xx_configure_filter(), which doesn't change state
 - Adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/net/wireless/ath/wcn36xx/main.c    | 52 ++++++++++++++++++++++++++++--
 drivers/net/wireless/ath/wcn36xx/wcn36xx.h |  3 ++
 2 files changed, 53 insertions(+), 2 deletions(-)

--- a/drivers/net/wireless/ath/wcn36xx/main.c
+++ b/drivers/net/wireless/ath/wcn36xx/main.c
@@ -339,6 +339,8 @@ static int wcn36xx_config(struct ieee802
 
 	wcn36xx_dbg(WCN36XX_DBG_MAC, "mac config changed 0x%08x\n", changed);
 
+	mutex_lock(&wcn->conf_mutex);
+
 	if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
 		int ch = WCN36XX_HW_CHANNEL(wcn);
 		wcn36xx_dbg(WCN36XX_DBG_MAC, "wcn36xx_config channel switch=%d\n",
@@ -351,6 +353,8 @@ static int wcn36xx_config(struct ieee802
 		}
 	}
 
+	mutex_unlock(&wcn->conf_mutex);
+
 	return 0;
 }
 
@@ -398,6 +402,8 @@ static int wcn36xx_set_key(struct ieee80
 			 key_conf->key,
 			 key_conf->keylen);
 
+	mutex_lock(&wcn->conf_mutex);
+
 	switch (key_conf->cipher) {
 	case WLAN_CIPHER_SUITE_WEP40:
 		vif_priv->encrypt_type = WCN36XX_HAL_ED_WEP40;
@@ -492,6 +498,8 @@ static int wcn36xx_set_key(struct ieee80
 	}
 
 out:
+	mutex_unlock(&wcn->conf_mutex);
+
 	return ret;
 }
 
@@ -591,6 +599,8 @@ static void wcn36xx_bss_info_changed(str
 	wcn36xx_dbg(WCN36XX_DBG_MAC, "mac bss info changed vif %p changed 0x%08x\n",
 		    vif, changed);
 
+	mutex_lock(&wcn->conf_mutex);
+
 	if (changed & BSS_CHANGED_BEACON_INFO) {
 		wcn36xx_dbg(WCN36XX_DBG_MAC,
 			    "mac bss changed dtim period %d\n",
@@ -651,7 +661,13 @@ static void wcn36xx_bss_info_changed(str
 				     vif->addr,
 				     bss_conf->aid);
 
-			rcu_read_lock();
+
+			/*
+			 * Holding conf_mutex ensures mutal exclusion with
+			 * wcn36xx_sta_remove() and as such ensures that sta
+			 * won't be freed while we're operating on it. As such
+			 * we do not need to hold the rcu_read_lock().
+			 */
 			sta = ieee80211_find_sta(vif, bss_conf->bssid);
 			if (!sta) {
 				wcn36xx_err("sta %pM is not found\n",
@@ -675,7 +691,6 @@ static void wcn36xx_bss_info_changed(str
 			 * place where AID is available.
 			 */
 			wcn36xx_smd_config_sta(wcn, vif, sta);
-			rcu_read_unlock();
 		} else {
 			wcn36xx_dbg(WCN36XX_DBG_MAC,
 				    "disassociated bss %pM vif %pM AID=%d\n",
@@ -736,6 +751,9 @@ static void wcn36xx_bss_info_changed(str
 		}
 	}
 out:
+
+	mutex_unlock(&wcn->conf_mutex);
+
 	return;
 }
 
@@ -745,7 +763,10 @@ static int wcn36xx_set_rts_threshold(str
 	struct wcn36xx *wcn = hw->priv;
 	wcn36xx_dbg(WCN36XX_DBG_MAC, "mac set RTS threshold %d\n", value);
 
+	mutex_lock(&wcn->conf_mutex);
 	wcn36xx_smd_update_cfg(wcn, WCN36XX_HAL_CFG_RTS_THRESHOLD, value);
+	mutex_unlock(&wcn->conf_mutex);
+
 	return 0;
 }
 
@@ -756,8 +777,12 @@ static void wcn36xx_remove_interface(str
 	struct wcn36xx_vif *vif_priv = (struct wcn36xx_vif *)vif->drv_priv;
 	wcn36xx_dbg(WCN36XX_DBG_MAC, "mac remove interface vif %p\n", vif);
 
+	mutex_lock(&wcn->conf_mutex);
+
 	list_del(&vif_priv->list);
 	wcn36xx_smd_delete_sta_self(wcn, vif->addr);
+
+	mutex_unlock(&wcn->conf_mutex);
 }
 
 static int wcn36xx_add_interface(struct ieee80211_hw *hw,
@@ -778,9 +803,13 @@ static int wcn36xx_add_interface(struct
 		return -EOPNOTSUPP;
 	}
 
+	mutex_lock(&wcn->conf_mutex);
+
 	list_add(&vif_priv->list, &wcn->vif_list);
 	wcn36xx_smd_add_sta_self(wcn, vif);
 
+	mutex_unlock(&wcn->conf_mutex);
+
 	return 0;
 }
 
@@ -793,6 +822,8 @@ static int wcn36xx_sta_add(struct ieee80
 	wcn36xx_dbg(WCN36XX_DBG_MAC, "mac sta add vif %p sta %pM\n",
 		    vif, sta->addr);
 
+	mutex_lock(&wcn->conf_mutex);
+
 	vif_priv->sta = sta_priv;
 	sta_priv->vif = vif_priv;
 	/*
@@ -804,6 +835,9 @@ static int wcn36xx_sta_add(struct ieee80
 		sta_priv->aid = sta->aid;
 		wcn36xx_smd_config_sta(wcn, vif, sta);
 	}
+
+	mutex_unlock(&wcn->conf_mutex);
+
 	return 0;
 }
 
@@ -818,9 +852,14 @@ static int wcn36xx_sta_remove(struct iee
 	wcn36xx_dbg(WCN36XX_DBG_MAC, "mac sta remove vif %p sta %pM index %d\n",
 		    vif, sta->addr, sta_priv->sta_index);
 
+	mutex_lock(&wcn->conf_mutex);
+
 	wcn36xx_smd_delete_sta(wcn, sta_priv->sta_index);
 	vif_priv->sta = NULL;
 	sta_priv->vif = NULL;
+
+	mutex_unlock(&wcn->conf_mutex);
+
 	return 0;
 }
 
@@ -864,6 +903,8 @@ static int wcn36xx_ampdu_action(struct i
 
 	sta_priv = (struct wcn36xx_sta *)sta->drv_priv;
 
+	mutex_lock(&wcn->conf_mutex);
+
 	switch (action) {
 	case IEEE80211_AMPDU_RX_START:
 		sta_priv->tid = tid;
@@ -892,6 +933,8 @@ static int wcn36xx_ampdu_action(struct i
 		wcn36xx_err("Unknown AMPDU action\n");
 	}
 
+	mutex_unlock(&wcn->conf_mutex);
+
 	return 0;
 }
 
@@ -1022,6 +1065,7 @@ static int wcn36xx_probe(struct platform
 	wcn->dev = &pdev->dev;
 	wcn->ctrl_ops = pdev->dev.platform_data;
 
+	mutex_init(&wcn->conf_mutex);
 	mutex_init(&wcn->hal_mutex);
 
 	if (!wcn->ctrl_ops->get_hw_mac(addr)) {
--- a/drivers/net/wireless/ath/wcn36xx/wcn36xx.h
+++ b/drivers/net/wireless/ath/wcn36xx/wcn36xx.h
@@ -191,6 +191,10 @@ struct wcn36xx {
 	void __iomem		*mmio;
 
 	struct wcn36xx_platform_ctrl_ops *ctrl_ops;
+
+	/* prevents concurrent FW reconfiguration */
+	struct mutex		conf_mutex;
+
 	/*
 	 * smd_buf must be protected with smd_mutex to garantee
 	 * that all messages are sent one after another

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 037/133] drm/ttm: Fix accounting error when fail to get pages for pool
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (34 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 025/133] scsi: zfcp: fix capping of unsuccessful GPN_FT SAN response trace records Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 045/133] staging/rts5208: fix incorrect shift to extract upper nybble Ben Hutchings
                   ` (97 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Monk Liu, Alex Deucher, Christian König, Xiangliang.Yu

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: "Xiangliang.Yu" <Xiangliang.Yu@amd.com>

commit 9afae2719273fa1d406829bf3498f82dbdba71c7 upstream.

When fail to get needed page for pool, need to put allocated pages
into pool. But current code has a miscalculation of allocated pages,
correct it.

Signed-off-by: Xiangliang.Yu <Xiangliang.Yu@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Monk Liu <monk.liu@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/gpu/drm/ttm/ttm_page_alloc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/gpu/drm/ttm/ttm_page_alloc.c
+++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c
@@ -612,7 +612,7 @@ static void ttm_page_pool_fill_locked(st
 		} else {
 			pr_err("Failed to fill pool (%p)\n", pool);
 			/* If we have any pages left put them to the pool. */
-			list_for_each_entry(p, &pool->list, lru) {
+			list_for_each_entry(p, &new_pages, lru) {
 				++cpages;
 			}
 			list_splice(&new_pages, &pool->list);

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 031/133] cs5536: add support for IDE controller variant
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (9 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 030/133] scsi: mac_esp: Fix PIO transfers for MESSAGE IN phase Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 039/133] block: Relax a check in blk_start_queue() Ben Hutchings
                   ` (122 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Andrey Korolyov, Tejun Heo

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Andrey Korolyov <andrey@xdel.ru>

commit 591b6bb605785c12a21e8b07a08a277065b655a5 upstream.

Several legacy devices such as Geode-based Cisco ASA appliances
and DB800 development board do possess CS5536 IDE controller
with different PCI id than existing one. Using pata_generic is
not always feasible as at least DB800 requires MSR quirk from
pata_cs5536 to be used with vendor firmware.

Signed-off-by: Andrey Korolyov <andrey@xdel.ru>
Signed-off-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/ata/pata_amd.c    | 1 +
 drivers/ata/pata_cs5536.c | 1 +
 include/linux/pci_ids.h   | 1 +
 3 files changed, 3 insertions(+)

--- a/drivers/ata/pata_amd.c
+++ b/drivers/ata/pata_amd.c
@@ -616,6 +616,7 @@ static const struct pci_device_id amd[]
 	{ PCI_VDEVICE(NVIDIA,	PCI_DEVICE_ID_NVIDIA_NFORCE_MCP73_IDE),	8 },
 	{ PCI_VDEVICE(NVIDIA,	PCI_DEVICE_ID_NVIDIA_NFORCE_MCP77_IDE),	8 },
 	{ PCI_VDEVICE(AMD,	PCI_DEVICE_ID_AMD_CS5536_IDE),		9 },
+	{ PCI_VDEVICE(AMD,	PCI_DEVICE_ID_AMD_CS5536_DEV_IDE),	9 },
 
 	{ },
 };
--- a/drivers/ata/pata_cs5536.c
+++ b/drivers/ata/pata_cs5536.c
@@ -289,6 +289,7 @@ static int cs5536_init_one(struct pci_de
 
 static const struct pci_device_id cs5536[] = {
 	{ PCI_VDEVICE(AMD,	PCI_DEVICE_ID_AMD_CS5536_IDE), },
+	{ PCI_VDEVICE(AMD,	PCI_DEVICE_ID_AMD_CS5536_DEV_IDE), },
 	{ },
 };
 
--- a/include/linux/pci_ids.h
+++ b/include/linux/pci_ids.h
@@ -568,6 +568,7 @@
 #define PCI_DEVICE_ID_AMD_CS5536_EHC    0x2095
 #define PCI_DEVICE_ID_AMD_CS5536_UDC    0x2096
 #define PCI_DEVICE_ID_AMD_CS5536_UOC    0x2097
+#define PCI_DEVICE_ID_AMD_CS5536_DEV_IDE    0x2092
 #define PCI_DEVICE_ID_AMD_CS5536_IDE    0x209A
 #define PCI_DEVICE_ID_AMD_LX_VIDEO  0x2081
 #define PCI_DEVICE_ID_AMD_LX_AES    0x2082

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 003/133] iio: magnetometer: st_magn_core: enable multiread by default for LIS3MDL
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (20 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 012/133] printk: only unregister boot consoles when necessary Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 040/133] skd: Avoid that module unloading triggers a use-after-free Ben Hutchings
                   ` (111 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Lorenzo Bianconi, Jonathan Cameron, Lorenzo Bianconi

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>

commit 13718564167da80b6169809185b4c5a32497d0c1 upstream.

Enable multiread by default for LIS3MDL since using I2C interface
the subaddr Msb is used to automatically increase the slave address
during multiple data read/write. In the same way, using SPI interface,
bit 1 in register address is used to enable auto-increment of the slave
address in multiple read/write.

Fixes: 872e79add756 (iio:magn: Add STMicroelectronics magn driver)
Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@st.com>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
[bwh: Backported to 3.16: Update the macro used to fill in this field]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/iio/magnetometer/st_magn_core.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/iio/magnetometer/st_magn_core.c
+++ b/drivers/iio/magnetometer/st_magn_core.c
@@ -112,7 +112,7 @@
 #define ST_MAGN_2_FS_AVL_8000_GAIN		292
 #define ST_MAGN_2_FS_AVL_12000_GAIN		438
 #define ST_MAGN_2_FS_AVL_16000_GAIN		584
-#define ST_MAGN_2_MULTIREAD_BIT			false
+#define ST_MAGN_2_MULTIREAD_BIT			true
 #define ST_MAGN_2_OUT_X_L_ADDR			0x28
 #define ST_MAGN_2_OUT_Y_L_ADDR			0x2a
 #define ST_MAGN_2_OUT_Z_L_ADDR			0x2c

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 014/133] rtlwifi: rtl8821ae: Fix HW_VAR_NAV_UPPER operation
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (23 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 042/133] net: don't decrement kobj reference count on init failure Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 017/133] dlm: avoid double-free on error path in dlm_device_{register,unregister} Ben Hutchings
                   ` (108 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Kalle Valo, Dan Carpenter, Larry Finger

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Dan Carpenter <dan.carpenter@oracle.com>

commit d28ac7be15c70343cb270648e252f54d770eca6a upstream.

The cast here is wrong.  We want to cast the pointer but we accidentally
do a no-op cast of the value.  We normally want to set us_nav_upper to
WIFI_NAV_UPPER_US (30000) but because of this bug we instead set it to
184 on little endian systems and 0 on big endian ones.

Fixes: 3c05bedb5fef ("Staging: rtl8812ae: Add Realtek 8821 PCI WIFI driver")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Acked-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
[bwh: Backported to 3.16: adjust filename, context, indentation]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/staging/rtl8821ae/rtl8821ae/hw.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/staging/rtl8821ae/rtl8821ae/hw.c
+++ b/drivers/staging/rtl8821ae/rtl8821ae/hw.c
@@ -760,7 +760,7 @@ void rtl8821ae_set_hw_reg(struct ieee802
 
 		}
 	case HW_VAR_NAV_UPPER: {
-			u32	us_nav_upper = ((u32)*val);
+			u32	us_nav_upper = *(u32 *)val;
 
 			if(us_nav_upper > HAL_92C_NAV_UPPER_UNIT * 0xFF)
 			{

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 013/133] printk/console: Always disable boot consoles that use init memory before it is freed
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (12 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 009/133] signal: move the "sig < SIGRTMIN" check into siginmask(sig) Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 028/133] scsi: zfcp: fix payload with full FCP_RSP IU in SCSI trace records Ben Hutchings
                   ` (119 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, linux-serial, Sergey Senozhatsky, Peter Zijlstra,
	Matt Redfearn, Fabio M. Di Nitto, Greg Kroah-Hartman, Jiri Slaby,
	Petr Mladek, Alan Cox, Steven Rostedt, David S. Miller

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Matt Redfearn <matt.redfearn@imgtec.com>

commit 2b1be689f3aadcfe0a768314c80e43483c784659 upstream.

Commit 4c30c6f566c0 ("kernel/printk: do not turn off bootconsole in
printk_late_init() if keep_bootcon") added a check on keep_bootcon to
ensure that boot consoles were kept around until the real console is
registered.

This can lead to problems if the boot console data and code are in the
init section, since it can be freed before the boot console is
unregistered.

Commit 81cc26f2bd11 ("printk: only unregister boot consoles when
necessary") fixed this a better way. It allowed to keep boot consoles
that did not use init data. Unfortunately it did not remove the check
of keep_bootcon.

This can lead to crashes and weird panics when the bootconsole is
accessed after free, especially if page poisoning is in use and the
code / data have been overwritten with a poison value.

To prevent this, always free the boot console if it is within the init
section. In addition, print a warning about that the console is removed
prematurely.

Finally there is a new comment how to avoid the warning. It replaced
an explanation that duplicated a more comprehensive function
description few lines above.

Fixes: 4c30c6f566c0 ("kernel/printk: do not turn off bootconsole in printk_late_init() if keep_bootcon")
Link: http://lkml.kernel.org/r/1500036673-7122-2-git-send-email-pmladek@suse.com
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Jiri Slaby <jslaby@suse.com>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Alan Cox <gnomes@lxorguk.ukuu.org.uk>
Cc: "Fabio M. Di Nitto" <fdinitto@redhat.com>
Cc: linux-serial@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Matt Redfearn <matt.redfearn@imgtec.com>
[pmladek@suse.com: print the warning, code and comments clean up]
Reviewed-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Signed-off-by: Petr Mladek <pmladek@suse.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 kernel/printk/printk.c | 20 +++++++++-----------
 1 file changed, 9 insertions(+), 11 deletions(-)

--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
@@ -2570,25 +2570,23 @@ EXPORT_SYMBOL(unregister_console);
  * makes it difficult to diagnose problems that occur during this time.
  *
  * To mitigate this problem somewhat, only unregister consoles whose memory
- * intersects with the init section. Note that code exists elsewhere to get
- * rid of the boot console as soon as the proper console shows up, so there
- * won't be side-effects from postponing the removal.
+ * intersects with the init section. Note that all other boot consoles will
+ * get unregistred when the real preferred console is registered.
  */
 static int __init printk_late_init(void)
 {
 	struct console *con;
 
 	for_each_console(con) {
-		if (!keep_bootcon && con->flags & CON_BOOT) {
+		if ((con->flags & CON_BOOT) &&
+		    init_section_intersects(con, sizeof(*con))) {
 			/*
-			 * Make sure to unregister boot consoles whose data
-			 * resides in the init section before the init section
-			 * is discarded. Boot consoles whose data will stick
-			 * around will automatically be unregistered when the
-			 * proper console replaces them.
+			 * Please, consider moving the reported consoles out
+			 * of the init section.
 			 */
-			if (init_section_intersects(con, sizeof(*con)))
-				unregister_console(con);
+			pr_warn("bootconsole [%s%d] uses init memory and must be disabled even before the real one is ready\n",
+				con->name, con->index);
+			unregister_console(con);
 		}
 	}
 	hotcpu_notifier(console_cpu_notify, 0);

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 008/133] IB/core: Fix the validations of a multicast LID in attach or detach operations
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (6 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 022/133] x86/fsgsbase/64: Report FSBASE and GSBASE correctly in core dumps Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 021/133] ARM: OMAP2+: omap_device: drop broken RPM status update from suspend_noirq Ben Hutchings
                   ` (125 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Moni Shoua, Noa Osherovich, Leon Romanovsky, Doug Ledford

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Noa Osherovich <noaos@mellanox.com>

commit 5236333592244557a19694a51337df6ac018f0a7 upstream.

RoCE Annex (A16.9.10/11) declares that during attach (detach) QP to a
multicast group, if the QP is associated with a RoCE port, the
multicast group MLID is unused and is ignored.

During attach or detach multicast, when the QP is associated with a
port, it is enough to check the port's link layer and validate the
LID only if it is Infiniband. Otherwise, avoid validating the
multicast LID.

Fixes: 8561eae60ff9 ("IB/core: For multicast functions, verify that LIDs are multicast LIDs")
Signed-off-by: Noa Osherovich <noaos@mellanox.com>
Reviewed-by: Moni Shoua <monis@mellanox.com>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
Signed-off-by: Doug Ledford <dledford@redhat.com>
[bwh: Backported to 3.16: use literal number instead of IB_MULTICAST_LID_BASE]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/infiniband/core/verbs.c | 44 +++++++++++++++++++++++++++++++++++++----
 1 file changed, 40 insertions(+), 4 deletions(-)

--- a/drivers/infiniband/core/verbs.c
+++ b/drivers/infiniband/core/verbs.c
@@ -1340,6 +1340,44 @@ EXPORT_SYMBOL(ib_dealloc_fmr);
 
 /* Multicast groups */
 
+static bool is_valid_mcast_lid(struct ib_qp *qp, u16 lid)
+{
+	struct ib_qp_init_attr init_attr = {};
+	struct ib_qp_attr attr = {};
+	int num_eth_ports = 0;
+	int port;
+
+	/* If QP state >= init, it is assigned to a port and we can check this
+	 * port only.
+	 */
+	if (!ib_query_qp(qp, &attr, IB_QP_STATE | IB_QP_PORT, &init_attr)) {
+		if (attr.qp_state >= IB_QPS_INIT) {
+			if (qp->device->get_link_layer(qp->device, attr.port_num) !=
+			    IB_LINK_LAYER_INFINIBAND)
+				return true;
+			goto lid_check;
+		}
+	}
+
+	/* Can't get a quick answer, iterate over all ports */
+	for (port = 0; port < qp->device->phys_port_cnt; port++)
+		if (qp->device->get_link_layer(qp->device, port) !=
+		    IB_LINK_LAYER_INFINIBAND)
+			num_eth_ports++;
+
+	/* If we have at lease one Ethernet port, RoCE annex declares that
+	 * multicast LID should be ignored. We can't tell at this step if the
+	 * QP belongs to an IB or Ethernet port.
+	 */
+	if (num_eth_ports)
+		return true;
+
+	/* If all the ports are IB, we can check according to IB spec. */
+lid_check:
+	return !(lid < 0xC000 ||
+		 lid == be16_to_cpu(IB_LID_PERMISSIVE));
+}
+
 int ib_attach_mcast(struct ib_qp *qp, union ib_gid *gid, u16 lid)
 {
 	int ret;
@@ -1347,8 +1385,7 @@ int ib_attach_mcast(struct ib_qp *qp, un
 	if (!qp->device->attach_mcast)
 		return -ENOSYS;
 	if (gid->raw[0] != 0xff || qp->qp_type != IB_QPT_UD ||
-	    lid < 0xC000 ||
-	    lid == be16_to_cpu(IB_LID_PERMISSIVE))
+	    !is_valid_mcast_lid(qp, lid))
 		return -EINVAL;
 
 	ret = qp->device->attach_mcast(qp, gid, lid);
@@ -1365,8 +1402,7 @@ int ib_detach_mcast(struct ib_qp *qp, un
 	if (!qp->device->detach_mcast)
 		return -ENOSYS;
 	if (gid->raw[0] != 0xff || qp->qp_type != IB_QPT_UD ||
-	    lid < 0xC000 ||
-	    lid == be16_to_cpu(IB_LID_PERMISSIVE))
+	    !is_valid_mcast_lid(qp, lid))
 		return -EINVAL;
 
 	ret = qp->device->detach_mcast(qp, gid, lid);

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 017/133] dlm: avoid double-free on error path in dlm_device_{register,unregister}
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (24 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 014/133] rtlwifi: rtl8821ae: Fix HW_VAR_NAV_UPPER operation Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 001/133] ARM: dts: dra7-evm: Rename mmc2_3v3 supply to evm_3v3_sw Ben Hutchings
                   ` (107 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Edwin Török, David Teigland

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Edwin Török <edvin.torok@citrix.com>

commit 55acdd926f6b21a5cdba23da98a48aedf19ac9c3 upstream.

Can be reproduced when running dlm_controld (tested on 4.4.x, 4.12.4):
 # seq 1 100 | xargs -P0 -n1 dlm_tool join
 # seq 1 100 | xargs -P0 -n1 dlm_tool leave

misc_register fails due to duplicate sysfs entry, which causes
dlm_device_register to free ls->ls_device.name.
In dlm_device_deregister the name was freed again, causing memory
corruption.

According to the comment in dlm_device_deregister the name should've been
set to NULL when registration fails,
so this patch does that.

sysfs: cannot create duplicate filename '/dev/char/10:1'
------------[ cut here ]------------
warning: cpu: 1 pid: 4450 at fs/sysfs/dir.c:31 sysfs_warn_dup+0x56/0x70
modules linked in: msr rfcomm dlm ccm bnep dm_crypt uvcvideo
videobuf2_vmalloc videobuf2_memops videobuf2_v4l2 videobuf2_core videodev
btusb media btrtl btbcm btintel bluetooth ecdh_generic intel_rapl
x86_pkg_temp_thermal intel_powerclamp coretemp kvm_intel kvm
snd_hda_codec_hdmi irqbypass crct10dif_pclmul crc32_pclmul
ghash_clmulni_intel thinkpad_acpi pcbc nvram snd_seq_midi
snd_seq_midi_event aesni_intel snd_hda_codec_realtek snd_hda_codec_generic
snd_rawmidi aes_x86_64 crypto_simd glue_helper snd_hda_intel snd_hda_codec
cryptd intel_cstate arc4 snd_hda_core snd_seq snd_seq_device snd_hwdep
iwldvm intel_rapl_perf mac80211 joydev input_leds iwlwifi serio_raw
cfg80211 snd_pcm shpchp snd_timer snd mac_hid mei_me lpc_ich mei soundcore
sunrpc parport_pc ppdev lp parport autofs4 i915 psmouse
 e1000e ahci libahci i2c_algo_bit sdhci_pci ptp drm_kms_helper sdhci
pps_core syscopyarea sysfillrect sysimgblt fb_sys_fops drm wmi video
cpu: 1 pid: 4450 comm: dlm_test.exe not tainted 4.12.4-041204-generic
hardware name: lenovo 232425u/232425u, bios g2et82ww (2.02 ) 09/11/2012
task: ffff96b0cbabe140 task.stack: ffffb199027d0000
rip: 0010:sysfs_warn_dup+0x56/0x70
rsp: 0018:ffffb199027d3c58 eflags: 00010282
rax: 0000000000000038 rbx: ffff96b0e2c49158 rcx: 0000000000000006
rdx: 0000000000000000 rsi: 0000000000000086 rdi: ffff96b15e24dcc0
rbp: ffffb199027d3c70 r08: 0000000000000001 r09: 0000000000000721
r10: ffffb199027d3c00 r11: 0000000000000721 r12: ffffb199027d3cd1
r13: ffff96b1592088f0 r14: 0000000000000001 r15: ffffffffffffffef
fs:  00007f78069c0700(0000) gs:ffff96b15e240000(0000)
knlgs:0000000000000000
cs:  0010 ds: 0000 es: 0000 cr0: 0000000080050033
cr2: 000000178625ed28 cr3: 0000000091d3e000 cr4: 00000000001406e0
call trace:
 sysfs_do_create_link_sd.isra.2+0x9e/0xb0
 sysfs_create_link+0x25/0x40
 device_add+0x5a9/0x640
 device_create_groups_vargs+0xe0/0xf0
 device_create_with_groups+0x3f/0x60
 ? snprintf+0x45/0x70
 misc_register+0x140/0x180
 device_write+0x6a8/0x790 [dlm]
 __vfs_write+0x37/0x160
 ? apparmor_file_permission+0x1a/0x20
 ? security_file_permission+0x3b/0xc0
 vfs_write+0xb5/0x1a0
 sys_write+0x55/0xc0
 ? sys_fcntl+0x5d/0xb0
 entry_syscall_64_fastpath+0x1e/0xa9
rip: 0033:0x7f78083454bd
rsp: 002b:00007f78069bbd30 eflags: 00000293 orig_rax: 0000000000000001
rax: ffffffffffffffda rbx: 0000000000000006 rcx: 00007f78083454bd
rdx: 000000000000009c rsi: 00007f78069bee00 rdi: 0000000000000005
rbp: 00007f77f8000a20 r08: 000000000000fcf0 r09: 0000000000000032
r10: 0000000000000024 r11: 0000000000000293 r12: 00007f78069bde00
r13: 00007f78069bee00 r14: 000000000000000a r15: 00007f78069bbd70
code: 85 c0 48 89 c3 74 12 b9 00 10 00 00 48 89 c2 31 f6 4c 89 ef e8 2c c8
ff ff 4c 89 e2 48 89 de 48 c7 c7 b0 8e 0c a8 e8 41 e8 ed ff <0f> ff 48 89
df e8 00 d5 f4 ff 5b 41 5c 41 5d 5d c3 66 0f 1f 84
---[ end trace 40412246357cc9e0 ]---

dlm: 59f24629-ae39-44e2-9030-397ebc2eda26: leaving the lockspace group...
bug: unable to handle kernel null pointer dereference at 0000000000000001
ip: [<ffffffff811a3b4a>] kmem_cache_alloc+0x7a/0x140
pgd 0
oops: 0000 [#1] smp
modules linked in: dlm 8021q garp mrp stp llc openvswitch nf_defrag_ipv6
nf_conntrack libcrc32c iptable_filter dm_multipath crc32_pclmul dm_mod
aesni_intel psmouse aes_x86_64 sg ablk_helper cryptd lrw gf128mul
glue_helper i2c_piix4 nls_utf8 tpm_tis tpm isofs nfsd auth_rpcgss
oid_registry nfs_acl lockd grace sunrpc xen_wdt ip_tables x_tables autofs4
hid_generic usbhid hid sr_mod cdrom sd_mod ata_generic pata_acpi 8139too
serio_raw ata_piix 8139cp mii uhci_hcd ehci_pci ehci_hcd libata
scsi_dh_rdac scsi_dh_hp_sw scsi_dh_emc scsi_dh_alua scsi_mod ipv6
cpu: 0 pid: 394 comm: systemd-udevd tainted: g w 4.4.0+0 #1
hardware name: xen hvm domu, bios 4.7.2-2.2 05/11/2017
task: ffff880002410000 ti: ffff88000243c000 task.ti: ffff88000243c000
rip: e030:[<ffffffff811a3b4a>] [<ffffffff811a3b4a>]
kmem_cache_alloc+0x7a/0x140
rsp: e02b:ffff88000243fd90 eflags: 00010202
rax: 0000000000000000 rbx: ffff8800029864d0 rcx: 000000000007b36c
rdx: 000000000007b36b rsi: 00000000024000c0 rdi: ffff880036801c00
rbp: ffff88000243fdc0 r08: 0000000000018880 r09: 0000000000000054
r10: 000000000000004a r11: ffff880034ace6c0 r12: 00000000024000c0
r13: ffff880036801c00 r14: 0000000000000001 r15: ffffffff8118dcc2
fs: 00007f0ab77548c0(0000) gs:ffff880036e00000(0000) knlgs:0000000000000000
cs: e033 ds: 0000 es: 0000 cr0: 0000000080050033
cr2: 0000000000000001 cr3: 000000000332d000 cr4: 0000000000040660
stack:
ffffffff8118dc90 ffff8800029864d0 0000000000000000 ffff88003430b0b0
ffff880034b78320 ffff88003430b0b0 ffff88000243fdf8 ffffffff8118dcc2
ffff8800349c6700 ffff8800029864d0 000000000000000b 00007f0ab7754b90
call trace:
[<ffffffff8118dc90>] ? anon_vma_fork+0x60/0x140
[<ffffffff8118dcc2>] anon_vma_fork+0x92/0x140
[<ffffffff8107033e>] copy_process+0xcae/0x1a80
[<ffffffff8107128b>] _do_fork+0x8b/0x2d0
[<ffffffff81071579>] sys_clone+0x19/0x20
[<ffffffff815a30ae>] entry_syscall_64_fastpath+0x12/0x71
] code: f6 75 1c 4c 89 fa 44 89 e6 4c 89 ef e8 a7 e4 00 00 41 f7 c4 00 80
00 00 49 89 c6 74 47 eb 32 49 63 45 20 48 8d 4a 01 4d 8b 45 00 <49> 8b 1c
06 4c 89 f0 65 49 0f c7 08 0f 94 c0 84 c0 74 ac 49 63
rip [<ffffffff811a3b4a>] kmem_cache_alloc+0x7a/0x140
rsp <ffff88000243fd90>
cr2: 0000000000000001
--[ end trace 70cb9fd1b164a0e8 ]--

Signed-off-by: Edwin Török <edvin.torok@citrix.com>
Signed-off-by: David Teigland <teigland@redhat.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 fs/dlm/user.c | 4 ++++
 1 file changed, 4 insertions(+)

--- a/fs/dlm/user.c
+++ b/fs/dlm/user.c
@@ -346,6 +346,10 @@ static int dlm_device_register(struct dl
 	error = misc_register(&ls->ls_device);
 	if (error) {
 		kfree(ls->ls_device.name);
+		/* this has to be set to NULL
+		 * to avoid a double-free in dlm_device_deregister
+		 */
+		ls->ls_device.name = NULL;
 	}
 fail:
 	return error;

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 105/133] mm/vmstat.c: fix wrong comment
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (131 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 092/133] MIPS: Handle non word sized instructions when examining frame Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  7:41   ` Vlastimil Babka
  2017-11-22 15:00 ` [PATCH 3.16 000/133] 3.16.51-rc1 review Guenter Roeck
  133 siblings, 1 reply; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, SeongJae Park, Vlastimil Babka, Linus Torvalds,
	Michal Hocko

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: SeongJae Park <sj38.park@gmail.com>

commit f113e64121ba9f4791332248b315d9f57ee33a6b upstream.

Comment for pagetypeinfo_showblockcount() is mistakenly duplicated from
pagetypeinfo_show_free()'s comment.  This commit fixes it.

Link: http://lkml.kernel.org/r/20170809185816.11244-1-sj38.park@gmail.com
Fixes: 467c996c1e19 ("Print out statistics in relation to fragmentation avoidance to /proc/pagetypeinfo")
Signed-off-by: SeongJae Park <sj38.park@gmail.com>
Cc: Michal Hocko <mhocko@kernel.org>
Cc: Vlastimil Babka <vbabka@suse.cz>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 mm/vmstat.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/mm/vmstat.c
+++ b/mm/vmstat.c
@@ -975,7 +975,7 @@ static void pagetypeinfo_showblockcount_
 	seq_putc(m, '\n');
 }
 
-/* Print out the free pages at each order for each migratetype */
+/* Print out the number of pageblocks for each migratetype */
 static int pagetypeinfo_showblockcount(struct seq_file *m, void *arg)
 {
 	int mtype;

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 070/133] scsi: qla2xxx: Fix an integer overflow in sysfs code
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (72 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 127/133] mac80211: use constant time comparison with keys Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 075/133] driver core: bus: Fix a potential double free Ben Hutchings
                   ` (59 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Martin K. Petersen, Dan Carpenter, shqking

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Dan Carpenter <dan.carpenter@oracle.com>

commit e6f77540c067b48dee10f1e33678415bfcc89017 upstream.

The value of "size" comes from the user.  When we add "start + size" it
could lead to an integer overflow bug.

It means we vmalloc() a lot more memory than we had intended.  I believe
that on 64 bit systems vmalloc() can succeed even if we ask it to
allocate huge 4GB buffers.  So we would get memory corruption and likely
a crash when we call ha->isp_ops->write_optrom() and ->read_optrom().

Only root can trigger this bug.

Link: https://bugzilla.kernel.org/show_bug.cgi?id=194061

Fixes: b7cc176c9eb3 ("[SCSI] qla2xxx: Allow region-based flash-part accesses.")
Reported-by: shqking <shqking@gmail.com>
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/scsi/qla2xxx/qla_attr.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

--- a/drivers/scsi/qla2xxx/qla_attr.c
+++ b/drivers/scsi/qla2xxx/qla_attr.c
@@ -396,6 +396,8 @@ qla2x00_sysfs_write_optrom_ctl(struct fi
 		return -EINVAL;
 	if (start > ha->optrom_size)
 		return -EINVAL;
+	if (size > ha->optrom_size - start)
+		size = ha->optrom_size - start;
 
 	mutex_lock(&ha->optrom_mutex);
 	switch (val) {
@@ -421,8 +423,7 @@ qla2x00_sysfs_write_optrom_ctl(struct fi
 		}
 
 		ha->optrom_region_start = start;
-		ha->optrom_region_size = start + size > ha->optrom_size ?
-		    ha->optrom_size - start : size;
+		ha->optrom_region_size = start + size;
 
 		ha->optrom_state = QLA_SREADING;
 		ha->optrom_buffer = vmalloc(ha->optrom_region_size);
@@ -494,8 +495,7 @@ qla2x00_sysfs_write_optrom_ctl(struct fi
 		}
 
 		ha->optrom_region_start = start;
-		ha->optrom_region_size = start + size > ha->optrom_size ?
-		    ha->optrom_size - start : size;
+		ha->optrom_region_size = start + size;
 
 		ha->optrom_state = QLA_SWRITING;
 		ha->optrom_buffer = vmalloc(ha->optrom_region_size);

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 087/133] s390/mm: fix race on mm->context.flush_mm
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (93 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 096/133] MIPS: Stacktrace: Fix microMIPS stack unwinding on big endian systems Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 104/133] bcache: fix bch_hprint crash and improve output Ben Hutchings
                   ` (38 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Heiko Carstens, Martin Schwidefsky

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Martin Schwidefsky <schwidefsky@de.ibm.com>

commit 60f07c8ec5fae06c23e9fd7bab67dabce92b3414 upstream.

The order in __tlb_flush_mm_lazy is to flush TLB first and then clear
the mm->context.flush_mm bit. This can lead to missed flushes as the
bit can be set anytime, the order needs to be the other way aronud.

But this leads to a different race, __tlb_flush_mm_lazy may be called
on two CPUs concurrently. If mm->context.flush_mm is cleared first then
another CPU can bypass __tlb_flush_mm_lazy although the first CPU has
not done the flush yet. In a virtualized environment the time until the
flush is finally completed can be arbitrarily long.

Add a spinlock to serialize __tlb_flush_mm_lazy and use the function
in finish_arch_post_lock_switch as well.

Reviewed-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
[bwh: Backported to 3.16: adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 arch/s390/include/asm/mmu.h         | 2 ++
 arch/s390/include/asm/mmu_context.h | 4 ++--
 arch/s390/include/asm/tlbflush.h    | 4 +++-
 3 files changed, 7 insertions(+), 3 deletions(-)

--- a/arch/s390/include/asm/mmu.h
+++ b/arch/s390/include/asm/mmu.h
@@ -5,6 +5,7 @@
 #include <linux/errno.h>
 
 typedef struct {
+	spinlock_t lock;
 	cpumask_t cpu_attach_mask;
 	atomic_t attach_count;
 	unsigned int flush_mm;
@@ -21,6 +22,7 @@ typedef struct {
 } mm_context_t;
 
 #define INIT_MM_CONTEXT(name)						      \
+	.context.lock =	__SPIN_LOCK_UNLOCKED(name.context.lock),	      \
 	.context.list_lock    = __SPIN_LOCK_UNLOCKED(name.context.list_lock), \
 	.context.pgtable_list = LIST_HEAD_INIT(name.context.pgtable_list),    \
 	.context.gmap_list = LIST_HEAD_INIT(name.context.gmap_list),
--- a/arch/s390/include/asm/mmu_context.h
+++ b/arch/s390/include/asm/mmu_context.h
@@ -15,6 +15,7 @@
 static inline int init_new_context(struct task_struct *tsk,
 				   struct mm_struct *mm)
 {
+	spin_lock_init(&mm->context.lock);
 	spin_lock_init(&mm->context.list_lock);
 	INIT_LIST_HEAD(&mm->context.pgtable_list);
 	INIT_LIST_HEAD(&mm->context.gmap_list);
@@ -95,8 +96,7 @@ static inline void finish_arch_post_lock
 			cpu_relax();
 
 		cpumask_set_cpu(smp_processor_id(), mm_cpumask(mm));
-		if (mm->context.flush_mm)
-			__tlb_flush_mm(mm);
+		__tlb_flush_mm_lazy(mm);
 		preempt_enable();
 	}
 	set_fs(current->thread.mm_segment);
--- a/arch/s390/include/asm/tlbflush.h
+++ b/arch/s390/include/asm/tlbflush.h
@@ -164,10 +164,12 @@ static inline void __tlb_flush_mm(struct
 
 static inline void __tlb_flush_mm_lazy(struct mm_struct * mm)
 {
+	spin_lock(&mm->context.lock);
 	if (mm->context.flush_mm) {
-		__tlb_flush_mm(mm);
 		mm->context.flush_mm = 0;
+		__tlb_flush_mm(mm);
 	}
+	spin_unlock(&mm->context.lock);
 }
 
 /*

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 057/133] usb: quirks: add delay init quirk for Corsair Strafe RGB keyboard
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (128 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 091/133] MIPS: ralink: allow NULL clock for clk_get_rate Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 102/133] bcache: fix crash on shutdown in passthrough mode Ben Hutchings
                   ` (3 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Greg Kroah-Hartman, Kai-Heng Feng

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Kai-Heng Feng <kai.heng.feng@canonical.com>

commit de3af5bf259d7a0bfaac70441c8568ab5998d80c upstream.

Corsair Strafe RGB keyboard has trouble to initialize:

[ 1.679455] usb 3-6: new full-speed USB device number 4 using xhci_hcd
[ 6.871136] usb 3-6: unable to read config index 0 descriptor/all
[ 6.871138] usb 3-6: can't read configurations, error -110
[ 6.991019] usb 3-6: new full-speed USB device number 5 using xhci_hcd
[ 12.246642] usb 3-6: unable to read config index 0 descriptor/all
[ 12.246644] usb 3-6: can't read configurations, error -110
[ 12.366555] usb 3-6: new full-speed USB device number 6 using xhci_hcd
[ 17.622145] usb 3-6: unable to read config index 0 descriptor/all
[ 17.622147] usb 3-6: can't read configurations, error -110
[ 17.742093] usb 3-6: new full-speed USB device number 7 using xhci_hcd
[ 22.997715] usb 3-6: unable to read config index 0 descriptor/all
[ 22.997716] usb 3-6: can't read configurations, error -110

Although it may work after several times unpluging/pluging:

[ 68.195240] usb 3-6: new full-speed USB device number 11 using xhci_hcd
[ 68.337459] usb 3-6: New USB device found, idVendor=1b1c, idProduct=1b20
[ 68.337463] usb 3-6: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 68.337466] usb 3-6: Product: Corsair STRAFE RGB Gaming Keyboard
[ 68.337468] usb 3-6: Manufacturer: Corsair
[ 68.337470] usb 3-6: SerialNumber: 0F013021AEB8046755A93ED3F5001941

Tried three quirks: USB_QUIRK_DELAY_INIT, USB_QUIRK_NO_LPM and
USB_QUIRK_DEVICE_QUALIFIER, user confirmed that USB_QUIRK_DELAY_INIT alone
can workaround this issue. Hence add the quirk for Corsair Strafe RGB.

BugLink: https://bugs.launchpad.net/bugs/1678477
Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/usb/core/quirks.c | 3 +++
 1 file changed, 3 insertions(+)

--- a/drivers/usb/core/quirks.c
+++ b/drivers/usb/core/quirks.c
@@ -214,6 +214,9 @@ static const struct usb_device_id usb_qu
 	{ USB_DEVICE(0x1a0a, 0x0200), .driver_info =
 			USB_QUIRK_LINEAR_UFRAME_INTR_BINTERVAL },
 
+	/* Corsair Strafe RGB */
+	{ USB_DEVICE(0x1b1c, 0x1b20), .driver_info = USB_QUIRK_DELAY_INIT },
+
 	/* Acer C120 LED Projector */
 	{ USB_DEVICE(0x1de1, 0xc102), .driver_info = USB_QUIRK_NO_LPM },
 

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 120/133] sctp: do not peel off an assoc from one netns to another one
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (56 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 056/133] USB: core: Avoid race of async_completed() w/ usbdev_release() Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 050/133] rtc: sa1100: fix unbalanced clk_prepare_enable/clk_disable_unprepare Ben Hutchings
                   ` (75 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Xin Long, Marcelo Ricardo Leitner, ChunYu Wang,
	David S. Miller, Neil Horman

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Xin Long <lucien.xin@gmail.com>

commit df80cd9b28b9ebaa284a41df611dbf3a2d05ca74 upstream.

Now when peeling off an association to the sock in another netns, all
transports in this assoc are not to be rehashed and keep use the old
key in hashtable.

As a transport uses sk->net as the hash key to insert into hashtable,
it would miss removing these transports from hashtable due to the new
netns when closing the sock and all transports are being freeed, then
later an use-after-free issue could be caused when looking up an asoc
and dereferencing those transports.

This is a very old issue since very beginning, ChunYu found it with
syzkaller fuzz testing with this series:

  socket$inet6_sctp()
  bind$inet6()
  sendto$inet6()
  unshare(0x40000000)
  getsockopt$inet_sctp6_SCTP_GET_ASSOC_ID_LIST()
  getsockopt$inet_sctp6_SCTP_SOCKOPT_PEELOFF()

This patch is to block this call when peeling one assoc off from one
netns to another one, so that the netns of all transport would not
go out-sync with the key in hashtable.

Note that this patch didn't fix it by rehashing transports, as it's
difficult to handle the situation when the tuple is already in use
in the new netns. Besides, no one would like to peel off one assoc
to another netns, considering ipaddrs, ifaces, etc. are usually
different.

Reported-by: ChunYu Wang <chunwang@redhat.com>
Signed-off-by: Xin Long <lucien.xin@gmail.com>
Acked-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
[bwh: Backported to 3.16: adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 net/sctp/socket.c | 4 ++++
 1 file changed, 4 insertions(+)

--- a/net/sctp/socket.c
+++ b/net/sctp/socket.c
@@ -4328,6 +4328,10 @@ int sctp_do_peeloff(struct sock *sk, sct
 	struct sctp_af *af;
 	int err = 0;
 
+	/* Do not peel off from one netns to another one. */
+	if (!net_eq(current->nsproxy->net_ns, sock_net(sk)))
+		return -EINVAL;
+
 	if (!asoc)
 		return -EINVAL;
 

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 071/133] powerpc/44x: Fix mask and shift to zero bug
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (51 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 100/133] bcache: correct cache_dirty_target in __update_writeback_rate() Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 060/133] ACPI, APEI, EINJ: Subtract any matching Register Region from Trigger resources Ben Hutchings
                   ` (80 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Dan Carpenter, Benjamin Herrenschmidt, Michael Ellerman

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Dan Carpenter <dan.carpenter@oracle.com>

commit 8d046759f6ad75824fdf7b9c9a3da0272ea9ea92 upstream.

My static checker complains that 0x00001800 >> 13 is zero. Looking at
the context, it seems like a copy and paste bug from the line below
and probably 0x3 << 13 or 0x00006000 was intended.

Fixes: 2af59f7d5c3e ("[POWERPC] 4xx: Add 405GPr and 405EP support in boot wrapper")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 arch/powerpc/boot/4xx.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/arch/powerpc/boot/4xx.c
+++ b/arch/powerpc/boot/4xx.c
@@ -564,7 +564,7 @@ void ibm405gp_fixup_clocks(unsigned int
 		fbdv = 16;
 	cbdv = ((pllmr & 0x00060000) >> 17) + 1; /* CPU:PLB */
 	opdv = ((pllmr & 0x00018000) >> 15) + 1; /* PLB:OPB */
-	ppdv = ((pllmr & 0x00001800) >> 13) + 1; /* PLB:PCI */
+	ppdv = ((pllmr & 0x00006000) >> 13) + 1; /* PLB:PCI */
 	epdv = ((pllmr & 0x00001800) >> 11) + 2; /* PLB:EBC */
 	udiv = ((cpc0_cr0 & 0x3e) >> 1) + 1;
 

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 104/133] bcache: fix bch_hprint crash and improve output
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (94 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 087/133] s390/mm: fix race on mm->context.flush_mm Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 110/133] ipv6: fix typo in fib6_net_exit() Ben Hutchings
                   ` (37 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Jens Axboe, Michael Lyle, Dmitry Yu Okunev, Coly Li,
	Kent Overstreet

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Michael Lyle <mlyle@lyle.org>

commit 9276717b9e297a62d1151a43d1cd286213f68eb7 upstream.

Most importantly, solve a crash where %llu was used to format signed
numbers.  This would cause a buffer overflow when reading sysfs
writeback_rate_debug, as only 20 bytes were allocated for this and
%llu writes 20 characters plus a null.

Always use the units mechanism rather than having different output
paths for simplicity.

Also, correct problems with display output where 1.10 was a larger
number than 1.09, by multiplying by 10 and then dividing by 1024 instead
of dividing by 100.  (Remainders of >= 1000 would print as .10).

Minor changes: Always display the decimal point instead of trying to
omit it based on number of digits shown.  Decide what units to use
based on 1000 as a threshold, not 1024 (in other words, always print
at most 3 digits before the decimal point).

Signed-off-by: Michael Lyle <mlyle@lyle.org>
Reported-by: Dmitry Yu Okunev <dyokunev@ut.mephi.ru>
Acked-by: Kent Overstreet <kent.overstreet@gmail.com>
Reviewed-by: Coly Li <colyli@suse.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/md/bcache/util.c | 50 +++++++++++++++++++++++++++++++++---------------
 1 file changed, 35 insertions(+), 15 deletions(-)

--- a/drivers/md/bcache/util.c
+++ b/drivers/md/bcache/util.c
@@ -73,24 +73,44 @@ STRTO_H(strtouint, unsigned int)
 STRTO_H(strtoll, long long)
 STRTO_H(strtoull, unsigned long long)
 
+/**
+ * bch_hprint() - formats @v to human readable string for sysfs.
+ *
+ * @v - signed 64 bit integer
+ * @buf - the (at least 8 byte) buffer to format the result into.
+ *
+ * Returns the number of bytes used by format.
+ */
 ssize_t bch_hprint(char *buf, int64_t v)
 {
 	static const char units[] = "?kMGTPEZY";
-	char dec[4] = "";
-	int u, t = 0;
+	int u = 0, t;
 
-	for (u = 0; v >= 1024 || v <= -1024; u++) {
-		t = v & ~(~0 << 10);
-		v >>= 10;
-	}
+	uint64_t q;
 
-	if (!u)
-		return sprintf(buf, "%llu", v);
-
-	if (v < 100 && v > -100)
-		snprintf(dec, sizeof(dec), ".%i", t / 100);
-
-	return sprintf(buf, "%lli%s%c", v, dec, units[u]);
+	if (v < 0)
+		q = -v;
+	else
+		q = v;
+
+	/* For as long as the number is more than 3 digits, but at least
+	 * once, shift right / divide by 1024.  Keep the remainder for
+	 * a digit after the decimal point.
+	 */
+	do {
+		u++;
+
+		t = q & ~(~0 << 10);
+		q >>= 10;
+	} while (q >= 1000);
+
+	if (v < 0)
+		/* '-', up to 3 digits, '.', 1 digit, 1 character, null;
+		 * yields 8 bytes.
+		 */
+		return sprintf(buf, "-%llu.%i%c", q, t * 10 / 1024, units[u]);
+	else
+		return sprintf(buf, "%llu.%i%c", q, t * 10 / 1024, units[u]);
 }
 
 ssize_t bch_snprint_string_list(char *buf, size_t size, const char * const list[],

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 061/133] IB/{qib, hfi1}: Avoid flow control testing for RDMA write operation
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (119 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 063/133] ARM: 8692/1: mm: abort uaccess retries upon fatal signal Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 062/133] IB/usnic: check for allocation failure Ben Hutchings
                   ` (12 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Dennis Dalessandro, Kaike Wan, Doug Ledford,
	Mike Marciniszyn

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Mike Marciniszyn <mike.marciniszyn@intel.com>

commit 5b0ef650bd0f820e922fcc42f1985d4621ae19cf upstream.

Section 9.7.7.2.5 of the 1.3 IBTA spec clearly says that receive
credits should never apply to RDMA write.

qib and hfi1 were doing that.  The following situation will result
in a QP hang:
- A prior SEND or RDMA_WRITE with immmediate consumed the last
  credit for a QP using RC receive buffer credits
- The prior op is acked so there are no more acks
- The peer ULP fails to post receive for some reason
- An RDMA write sees that the credits are exhausted and waits
- The peer ULP posts receive buffers
- The ULP posts a send or RDMA write that will be hung

The fix is to avoid the credit test for the RDMA write operation.

Reviewed-by: Kaike Wan <kaike.wan@intel.com>
Signed-off-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
[bwh: Backported to 3.16:
 - Drop changes to hfi1
 - Adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
--- a/drivers/infiniband/hw/qib/qib_rc.c
+++ b/drivers/infiniband/hw/qib/qib_rc.c
@@ -365,7 +365,7 @@ int qib_make_rc_req(struct qib_qp *qp)
 		case IB_WR_RDMA_WRITE:
 			if (newreq && !(qp->s_flags & QIB_S_UNLIMITED_CREDIT))
 				qp->s_lsn++;
-			/* FALLTHROUGH */
+			goto no_flow_control;
 		case IB_WR_RDMA_WRITE_WITH_IMM:
 			/* If no credit, return. */
 			if (!(qp->s_flags & QIB_S_UNLIMITED_CREDIT) &&
@@ -373,6 +373,7 @@ int qib_make_rc_req(struct qib_qp *qp)
 				qp->s_flags |= QIB_S_WAIT_SSN_CREDIT;
 				goto bail;
 			}
+no_flow_control:
 			ohdr->u.rc.reth.vaddr =
 				cpu_to_be64(wqe->wr.wr.rdma.remote_addr);
 			ohdr->u.rc.reth.rkey =

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 124/133] Input: gtco - fix potential out-of-bound access
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (74 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 075/133] driver core: bus: Fix a potential double free Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 049/133] perf tools: Really install manpages via 'make install-man' Ben Hutchings
                   ` (57 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Andrey Konovalov, Dmitry Torokhov

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Dmitry Torokhov <dmitry.torokhov@gmail.com>

commit a50829479f58416a013a4ccca791336af3c584c7 upstream.

parse_hid_report_descriptor() has a while (i < length) loop, which
only guarantees that there's at least 1 byte in the buffer, but the
loop body can read multiple bytes which causes out-of-bounds access.

Reported-by: Andrey Konovalov <andreyknvl@google.com>
Reviewed-by: Andrey Konovalov <andreyknvl@google.com>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/input/tablet/gtco.c | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

--- a/drivers/input/tablet/gtco.c
+++ b/drivers/input/tablet/gtco.c
@@ -231,13 +231,17 @@ static void parse_hid_report_descriptor(
 
 	/* Walk  this report and pull out the info we need */
 	while (i < length) {
-		prefix = report[i];
-
-		/* Skip over prefix */
-		i++;
+		prefix = report[i++];
 
 		/* Determine data size and save the data in the proper variable */
-		size = PREF_SIZE(prefix);
+		size = (1U << PREF_SIZE(prefix)) >> 1;
+		if (i + size > length) {
+			dev_err(ddev,
+				"Not enough data (need %d, have %d)\n",
+				i + size, length);
+			break;
+		}
+
 		switch (size) {
 		case 1:
 			data = report[i];
@@ -245,8 +249,7 @@ static void parse_hid_report_descriptor(
 		case 2:
 			data16 = get_unaligned_le16(&report[i]);
 			break;
-		case 3:
-			size = 4;
+		case 4:
 			data32 = get_unaligned_le32(&report[i]);
 			break;
 		}

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 129/133] VSOCK: sock_put wasn't safe to call in interrupt context
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (124 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 065/133] scsi: aacraid: Fix command send race condition Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 054/133] m68k: allow NULL clock for clk_get_rate Ben Hutchings
                   ` (7 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Jorgen Hansen, Thomas Hellstrom, Aditya Asarwade,
	Michal Hocko, David S. Miller

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Jorgen Hansen <jhansen@vmware.com>

commit 4ef7ea9195ea73262cd9730fb54e1eb726da157b upstream.

In the vsock vmci_transport driver, sock_put wasn't safe to call
in interrupt context, since that may call the vsock destructor
which in turn calls several functions that should only be called
from process context. This change defers the callling of these
functions  to a worker thread. All these functions were
deallocation of resources related to the transport itself.

Furthermore, an unused callback was removed to simplify the
cleanup.

Multiple customers have been hitting this issue when using
VMware tools on vSphere 2015.

Also added a version to the vmci transport module (starting from
1.0.2.0-k since up until now it appears that this module was
sharing version with vsock that is currently at 1.0.1.0-k).

Reviewed-by: Aditya Asarwade <asarwade@vmware.com>
Reviewed-by: Thomas Hellstrom <thellstrom@vmware.com>
Signed-off-by: Jorgen Hansen <jhansen@vmware.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Michal Hocko <mhocko@suse.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 net/vmw_vsock/vmci_transport.c | 173 ++++++++++++++++++++---------------------
 net/vmw_vsock/vmci_transport.h |   4 +-
 2 files changed, 86 insertions(+), 91 deletions(-)

--- a/net/vmw_vsock/vmci_transport.c
+++ b/net/vmw_vsock/vmci_transport.c
@@ -40,13 +40,11 @@
 
 static int vmci_transport_recv_dgram_cb(void *data, struct vmci_datagram *dg);
 static int vmci_transport_recv_stream_cb(void *data, struct vmci_datagram *dg);
-static void vmci_transport_peer_attach_cb(u32 sub_id,
-					  const struct vmci_event_data *ed,
-					  void *client_data);
 static void vmci_transport_peer_detach_cb(u32 sub_id,
 					  const struct vmci_event_data *ed,
 					  void *client_data);
 static void vmci_transport_recv_pkt_work(struct work_struct *work);
+static void vmci_transport_cleanup(struct work_struct *work);
 static int vmci_transport_recv_listen(struct sock *sk,
 				      struct vmci_transport_packet *pkt);
 static int vmci_transport_recv_connecting_server(
@@ -75,6 +73,10 @@ struct vmci_transport_recv_pkt_info {
 	struct vmci_transport_packet pkt;
 };
 
+static LIST_HEAD(vmci_transport_cleanup_list);
+static DEFINE_SPINLOCK(vmci_transport_cleanup_lock);
+static DECLARE_WORK(vmci_transport_cleanup_work, vmci_transport_cleanup);
+
 static struct vmci_handle vmci_transport_stream_handle = { VMCI_INVALID_ID,
 							   VMCI_INVALID_ID };
 static u32 vmci_transport_qp_resumed_sub_id = VMCI_INVALID_ID;
@@ -791,44 +793,6 @@ out:
 	return err;
 }
 
-static void vmci_transport_peer_attach_cb(u32 sub_id,
-					  const struct vmci_event_data *e_data,
-					  void *client_data)
-{
-	struct sock *sk = client_data;
-	const struct vmci_event_payload_qp *e_payload;
-	struct vsock_sock *vsk;
-
-	e_payload = vmci_event_data_const_payload(e_data);
-
-	vsk = vsock_sk(sk);
-
-	/* We don't ask for delayed CBs when we subscribe to this event (we
-	 * pass 0 as flags to vmci_event_subscribe()).  VMCI makes no
-	 * guarantees in that case about what context we might be running in,
-	 * so it could be BH or process, blockable or non-blockable.  So we
-	 * need to account for all possible contexts here.
-	 */
-	local_bh_disable();
-	bh_lock_sock(sk);
-
-	/* XXX This is lame, we should provide a way to lookup sockets by
-	 * qp_handle.
-	 */
-	if (vmci_handle_is_equal(vmci_trans(vsk)->qp_handle,
-				 e_payload->handle)) {
-		/* XXX This doesn't do anything, but in the future we may want
-		 * to set a flag here to verify the attach really did occur and
-		 * we weren't just sent a datagram claiming it was.
-		 */
-		goto out;
-	}
-
-out:
-	bh_unlock_sock(sk);
-	local_bh_enable();
-}
-
 static void vmci_transport_handle_detach(struct sock *sk)
 {
 	struct vsock_sock *vsk;
@@ -871,28 +835,38 @@ static void vmci_transport_peer_detach_c
 					  const struct vmci_event_data *e_data,
 					  void *client_data)
 {
-	struct sock *sk = client_data;
+	struct vmci_transport *trans = client_data;
 	const struct vmci_event_payload_qp *e_payload;
-	struct vsock_sock *vsk;
 
 	e_payload = vmci_event_data_const_payload(e_data);
-	vsk = vsock_sk(sk);
-	if (vmci_handle_is_invalid(e_payload->handle))
-		return;
-
-	/* Same rules for locking as for peer_attach_cb(). */
-	local_bh_disable();
-	bh_lock_sock(sk);
 
 	/* XXX This is lame, we should provide a way to lookup sockets by
 	 * qp_handle.
 	 */
-	if (vmci_handle_is_equal(vmci_trans(vsk)->qp_handle,
-				 e_payload->handle))
-		vmci_transport_handle_detach(sk);
+	if (vmci_handle_is_invalid(e_payload->handle) ||
+	    vmci_handle_is_equal(trans->qp_handle, e_payload->handle))
+		return;
 
-	bh_unlock_sock(sk);
-	local_bh_enable();
+	/* We don't ask for delayed CBs when we subscribe to this event (we
+	 * pass 0 as flags to vmci_event_subscribe()).  VMCI makes no
+	 * guarantees in that case about what context we might be running in,
+	 * so it could be BH or process, blockable or non-blockable.  So we
+	 * need to account for all possible contexts here.
+	 */
+	spin_lock_bh(&trans->lock);
+	if (!trans->sk)
+		goto out;
+
+	/* Apart from here, trans->lock is only grabbed as part of sk destruct,
+	 * where trans->sk isn't locked.
+	 */
+	bh_lock_sock(trans->sk);
+
+	vmci_transport_handle_detach(trans->sk);
+
+	bh_unlock_sock(trans->sk);
+ out:
+	spin_unlock_bh(&trans->lock);
 }
 
 static void vmci_transport_qp_resumed_cb(u32 sub_id,
@@ -1181,7 +1155,7 @@ vmci_transport_recv_connecting_server(st
 	 */
 	err = vmci_event_subscribe(VMCI_EVENT_QP_PEER_DETACH,
 				   vmci_transport_peer_detach_cb,
-				   pending, &detach_sub_id);
+				   vmci_trans(vpending), &detach_sub_id);
 	if (err < VMCI_SUCCESS) {
 		vmci_transport_send_reset(pending, pkt);
 		err = vmci_transport_error_to_vsock_error(err);
@@ -1321,7 +1295,6 @@ vmci_transport_recv_connecting_client(st
 		    || vmci_trans(vsk)->qpair
 		    || vmci_trans(vsk)->produce_size != 0
 		    || vmci_trans(vsk)->consume_size != 0
-		    || vmci_trans(vsk)->attach_sub_id != VMCI_INVALID_ID
 		    || vmci_trans(vsk)->detach_sub_id != VMCI_INVALID_ID) {
 			skerr = EPROTO;
 			err = -EINVAL;
@@ -1389,7 +1362,6 @@ static int vmci_transport_recv_connectin
 	struct vsock_sock *vsk;
 	struct vmci_handle handle;
 	struct vmci_qp *qpair;
-	u32 attach_sub_id;
 	u32 detach_sub_id;
 	bool is_local;
 	u32 flags;
@@ -1399,7 +1371,6 @@ static int vmci_transport_recv_connectin
 
 	vsk = vsock_sk(sk);
 	handle = VMCI_INVALID_HANDLE;
-	attach_sub_id = VMCI_INVALID_ID;
 	detach_sub_id = VMCI_INVALID_ID;
 
 	/* If we have gotten here then we should be past the point where old
@@ -1444,23 +1415,15 @@ static int vmci_transport_recv_connectin
 		goto destroy;
 	}
 
-	/* Subscribe to attach and detach events first.
+	/* Subscribe to detach events first.
 	 *
 	 * XXX We attach once for each queue pair created for now so it is easy
 	 * to find the socket (it's provided), but later we should only
 	 * subscribe once and add a way to lookup sockets by queue pair handle.
 	 */
-	err = vmci_event_subscribe(VMCI_EVENT_QP_PEER_ATTACH,
-				   vmci_transport_peer_attach_cb,
-				   sk, &attach_sub_id);
-	if (err < VMCI_SUCCESS) {
-		err = vmci_transport_error_to_vsock_error(err);
-		goto destroy;
-	}
-
 	err = vmci_event_subscribe(VMCI_EVENT_QP_PEER_DETACH,
 				   vmci_transport_peer_detach_cb,
-				   sk, &detach_sub_id);
+				   vmci_trans(vsk), &detach_sub_id);
 	if (err < VMCI_SUCCESS) {
 		err = vmci_transport_error_to_vsock_error(err);
 		goto destroy;
@@ -1496,7 +1459,6 @@ static int vmci_transport_recv_connectin
 	vmci_trans(vsk)->produce_size = vmci_trans(vsk)->consume_size =
 		pkt->u.size;
 
-	vmci_trans(vsk)->attach_sub_id = attach_sub_id;
 	vmci_trans(vsk)->detach_sub_id = detach_sub_id;
 
 	vmci_trans(vsk)->notify_ops->process_negotiate(sk);
@@ -1504,9 +1466,6 @@ static int vmci_transport_recv_connectin
 	return 0;
 
 destroy:
-	if (attach_sub_id != VMCI_INVALID_ID)
-		vmci_event_unsubscribe(attach_sub_id);
-
 	if (detach_sub_id != VMCI_INVALID_ID)
 		vmci_event_unsubscribe(detach_sub_id);
 
@@ -1607,9 +1566,11 @@ static int vmci_transport_socket_init(st
 	vmci_trans(vsk)->qp_handle = VMCI_INVALID_HANDLE;
 	vmci_trans(vsk)->qpair = NULL;
 	vmci_trans(vsk)->produce_size = vmci_trans(vsk)->consume_size = 0;
-	vmci_trans(vsk)->attach_sub_id = vmci_trans(vsk)->detach_sub_id =
-		VMCI_INVALID_ID;
+	vmci_trans(vsk)->detach_sub_id = VMCI_INVALID_ID;
 	vmci_trans(vsk)->notify_ops = NULL;
+	INIT_LIST_HEAD(&vmci_trans(vsk)->elem);
+	vmci_trans(vsk)->sk = &vsk->sk;
+	vmci_trans(vsk)->lock = __SPIN_LOCK_UNLOCKED(vmci_trans(vsk)->lock);
 	if (psk) {
 		vmci_trans(vsk)->queue_pair_size =
 			vmci_trans(psk)->queue_pair_size;
@@ -1629,29 +1590,57 @@ static int vmci_transport_socket_init(st
 	return 0;
 }
 
-static void vmci_transport_destruct(struct vsock_sock *vsk)
+static void vmci_transport_free_resources(struct list_head *transport_list)
 {
-	if (vmci_trans(vsk)->attach_sub_id != VMCI_INVALID_ID) {
-		vmci_event_unsubscribe(vmci_trans(vsk)->attach_sub_id);
-		vmci_trans(vsk)->attach_sub_id = VMCI_INVALID_ID;
-	}
+	while (!list_empty(transport_list)) {
+		struct vmci_transport *transport =
+		    list_first_entry(transport_list, struct vmci_transport,
+				     elem);
+		list_del(&transport->elem);
+
+		if (transport->detach_sub_id != VMCI_INVALID_ID) {
+			vmci_event_unsubscribe(transport->detach_sub_id);
+			transport->detach_sub_id = VMCI_INVALID_ID;
+		}
 
-	if (vmci_trans(vsk)->detach_sub_id != VMCI_INVALID_ID) {
-		vmci_event_unsubscribe(vmci_trans(vsk)->detach_sub_id);
-		vmci_trans(vsk)->detach_sub_id = VMCI_INVALID_ID;
-	}
+		if (!vmci_handle_is_invalid(transport->qp_handle)) {
+			vmci_qpair_detach(&transport->qpair);
+			transport->qp_handle = VMCI_INVALID_HANDLE;
+			transport->produce_size = 0;
+			transport->consume_size = 0;
+		}
 
-	if (!vmci_handle_is_invalid(vmci_trans(vsk)->qp_handle)) {
-		vmci_qpair_detach(&vmci_trans(vsk)->qpair);
-		vmci_trans(vsk)->qp_handle = VMCI_INVALID_HANDLE;
-		vmci_trans(vsk)->produce_size = 0;
-		vmci_trans(vsk)->consume_size = 0;
+		kfree(transport);
 	}
+}
+
+static void vmci_transport_cleanup(struct work_struct *work)
+{
+	LIST_HEAD(pending);
+
+	spin_lock_bh(&vmci_transport_cleanup_lock);
+	list_replace_init(&vmci_transport_cleanup_list, &pending);
+	spin_unlock_bh(&vmci_transport_cleanup_lock);
+	vmci_transport_free_resources(&pending);
+}
+
+static void vmci_transport_destruct(struct vsock_sock *vsk)
+{
+	/* Ensure that the detach callback doesn't use the sk/vsk
+	 * we are about to destruct.
+	 */
+	spin_lock_bh(&vmci_trans(vsk)->lock);
+	vmci_trans(vsk)->sk = NULL;
+	spin_unlock_bh(&vmci_trans(vsk)->lock);
 
 	if (vmci_trans(vsk)->notify_ops)
 		vmci_trans(vsk)->notify_ops->socket_destruct(vsk);
 
-	kfree(vsk->trans);
+	spin_lock_bh(&vmci_transport_cleanup_lock);
+	list_add(&vmci_trans(vsk)->elem, &vmci_transport_cleanup_list);
+	spin_unlock_bh(&vmci_transport_cleanup_lock);
+	schedule_work(&vmci_transport_cleanup_work);
+
 	vsk->trans = NULL;
 }
 
@@ -2148,6 +2137,9 @@ module_init(vmci_transport_init);
 
 static void __exit vmci_transport_exit(void)
 {
+	cancel_work_sync(&vmci_transport_cleanup_work);
+	vmci_transport_free_resources(&vmci_transport_cleanup_list);
+
 	if (!vmci_handle_is_invalid(vmci_transport_stream_handle)) {
 		if (vmci_datagram_destroy_handle(
 			vmci_transport_stream_handle) != VMCI_SUCCESS)
@@ -2166,6 +2158,7 @@ module_exit(vmci_transport_exit);
 
 MODULE_AUTHOR("VMware, Inc.");
 MODULE_DESCRIPTION("VMCI transport for Virtual Sockets");
+MODULE_VERSION("1.0.2.0-k");
 MODULE_LICENSE("GPL v2");
 MODULE_ALIAS("vmware_vsock");
 MODULE_ALIAS_NETPROTO(PF_VSOCK);
--- a/net/vmw_vsock/vmci_transport.h
+++ b/net/vmw_vsock/vmci_transport.h
@@ -119,10 +119,12 @@ struct vmci_transport {
 	u64 queue_pair_size;
 	u64 queue_pair_min_size;
 	u64 queue_pair_max_size;
-	u32 attach_sub_id;
 	u32 detach_sub_id;
 	union vmci_transport_notify notify;
 	struct vmci_transport_notify_ops *notify_ops;
+	struct list_head elem;
+	struct sock *sk;
+	spinlock_t lock; /* protects sk. */
 };
 
 int vmci_transport_register(void);

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 081/133] l2tp: prevent creation of sessions on terminated tunnels
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (78 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 078/133] ARC: Re-enable MMU upon Machine Check exception Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 126/133] net: qmi_wwan: fix divide by 0 on bad descriptors Ben Hutchings
                   ` (53 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Guillaume Nault, David S. Miller

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Guillaume Nault <g.nault@alphalink.fr>

commit f3c66d4e144a0904ea9b95d23ed9f8eb38c11bfb upstream.

l2tp_tunnel_destruct() sets tunnel->sock to NULL, then removes the
tunnel from the pernet list and finally closes all its sessions.
Therefore, it's possible to add a session to a tunnel that is still
reachable, but for which tunnel->sock has already been reset. This can
make l2tp_session_create() dereference a NULL pointer when calling
sock_hold(tunnel->sock).

This patch adds the .acpt_newsess field to struct l2tp_tunnel, which is
used by l2tp_tunnel_closeall() to prevent addition of new sessions to
tunnels. Resetting tunnel->sock is done after l2tp_tunnel_closeall()
returned, so that l2tp_session_add_to_tunnel() can safely take a
reference on it when .acpt_newsess is true.

The .acpt_newsess field is modified in l2tp_tunnel_closeall(), rather
than in l2tp_tunnel_destruct(), so that it benefits all tunnel removal
mechanisms. E.g. on UDP tunnels, a session could be added to a tunnel
after l2tp_udp_encap_destroy() proceeded. This would prevent the tunnel
from being removed because of the references held by this new session
on the tunnel and its socket. Even though the session could be removed
manually later on, this defeats the purpose of
commit 9980d001cec8 ("l2tp: add udp encap socket destroy handler").

Fixes: fd558d186df2 ("l2tp: Split pppol2tp patch into separate l2tp and ppp parts")
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 net/l2tp/l2tp_core.c | 41 ++++++++++++++++++++++++++++-------------
 net/l2tp/l2tp_core.h |  4 ++++
 2 files changed, 32 insertions(+), 13 deletions(-)

--- a/net/l2tp/l2tp_core.c
+++ b/net/l2tp/l2tp_core.c
@@ -377,13 +377,21 @@ static int l2tp_session_add_to_tunnel(st
 	struct hlist_head *g_head;
 	struct hlist_head *head;
 	struct l2tp_net *pn;
+	int err;
 
 	head = l2tp_session_id_hash(tunnel, session->session_id);
 
 	write_lock_bh(&tunnel->hlist_lock);
+	if (!tunnel->acpt_newsess) {
+		err = -ENODEV;
+		goto err_tlock;
+	}
+
 	hlist_for_each_entry(session_walk, head, hlist)
-		if (session_walk->session_id == session->session_id)
-			goto exist;
+		if (session_walk->session_id == session->session_id) {
+			err = -EEXIST;
+			goto err_tlock;
+		}
 
 	if (tunnel->version == L2TP_HDR_VER_3) {
 		pn = l2tp_pernet(tunnel->l2tp_net);
@@ -391,12 +399,21 @@ static int l2tp_session_add_to_tunnel(st
 						session->session_id);
 
 		spin_lock_bh(&pn->l2tp_session_hlist_lock);
+
 		hlist_for_each_entry(session_walk, g_head, global_hlist)
-			if (session_walk->session_id == session->session_id)
-				goto exist_glob;
+			if (session_walk->session_id == session->session_id) {
+				err = -EEXIST;
+				goto err_tlock_pnlock;
+			}
 
+		l2tp_tunnel_inc_refcount(tunnel);
+		sock_hold(tunnel->sock);
 		hlist_add_head_rcu(&session->global_hlist, g_head);
+
 		spin_unlock_bh(&pn->l2tp_session_hlist_lock);
+	} else {
+		l2tp_tunnel_inc_refcount(tunnel);
+		sock_hold(tunnel->sock);
 	}
 
 	hlist_add_head(&session->hlist, head);
@@ -404,12 +421,12 @@ static int l2tp_session_add_to_tunnel(st
 
 	return 0;
 
-exist_glob:
+err_tlock_pnlock:
 	spin_unlock_bh(&pn->l2tp_session_hlist_lock);
-exist:
+err_tlock:
 	write_unlock_bh(&tunnel->hlist_lock);
 
-	return -EEXIST;
+	return err;
 }
 
 /* Lookup a tunnel by id
@@ -1299,7 +1316,6 @@ static void l2tp_tunnel_destruct(struct
 	/* Remove hooks into tunnel socket */
 	sk->sk_destruct = tunnel->old_sk_destruct;
 	sk->sk_user_data = NULL;
-	tunnel->sock = NULL;
 
 	/* Remove the tunnel struct from the tunnel list */
 	pn = l2tp_pernet(tunnel->l2tp_net);
@@ -1309,6 +1325,8 @@ static void l2tp_tunnel_destruct(struct
 	atomic_dec(&l2tp_tunnel_count);
 
 	l2tp_tunnel_closeall(tunnel);
+
+	tunnel->sock = NULL;
 	l2tp_tunnel_dec_refcount(tunnel);
 
 	/* Call the original destructor */
@@ -1333,6 +1351,7 @@ void l2tp_tunnel_closeall(struct l2tp_tu
 		  tunnel->name);
 
 	write_lock_bh(&tunnel->hlist_lock);
+	tunnel->acpt_newsess = false;
 	for (hash = 0; hash < L2TP_HASH_SIZE; hash++) {
 again:
 		hlist_for_each_safe(walk, tmp, &tunnel->session_hlist[hash]) {
@@ -1665,6 +1684,7 @@ int l2tp_tunnel_create(struct net *net,
 	tunnel->magic = L2TP_TUNNEL_MAGIC;
 	sprintf(&tunnel->name[0], "tunl %u", tunnel_id);
 	rwlock_init(&tunnel->hlist_lock);
+	tunnel->acpt_newsess = true;
 
 	/* The net we belong to */
 	tunnel->l2tp_net = net;
@@ -1915,11 +1935,6 @@ struct l2tp_session *l2tp_session_create
 			return ERR_PTR(err);
 		}
 
-		l2tp_tunnel_inc_refcount(tunnel);
-
-		/* Ensure tunnel socket isn't deleted */
-		sock_hold(tunnel->sock);
-
 		/* Ignore management session in session count value */
 		if (session->session_id != 0)
 			atomic_inc(&l2tp_session_count);
--- a/net/l2tp/l2tp_core.h
+++ b/net/l2tp/l2tp_core.h
@@ -171,6 +171,10 @@ struct l2tp_tunnel {
 	int			magic;		/* Should be L2TP_TUNNEL_MAGIC */
 	struct rcu_head rcu;
 	rwlock_t		hlist_lock;	/* protect session_hlist */
+	bool			acpt_newsess;	/* Indicates whether this
+						 * tunnel accepts new sessions.
+						 * Protected by hlist_lock.
+						 */
 	struct hlist_head	session_hlist[L2TP_HASH_SIZE];
 						/* hashed list of sessions,
 						 * hashed by id */

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 097/133] bcache: Fix leak of bdev reference
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (61 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 051/133] RDMA/usnic: Fix remove address space warning Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 088/133] MIPS: AR7: allow NULL clock for clk_get_rate Ben Hutchings
                   ` (70 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Jan Kara, Coly Li, Jens Axboe

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Jan Kara <jack@suse.cz>

commit 4b758df21ee7081ab41448d21d60367efaa625b3 upstream.

If blkdev_get_by_path() in register_bcache() fails, we try to lookup the
block device using lookup_bdev() to detect which situation we are in to
properly report error. However we never drop the reference returned to
us from lookup_bdev(). Fix that.

Signed-off-by: Jan Kara <jack@suse.cz>
Acked-by: Coly Li <colyli@suse.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/md/bcache/super.c | 2 ++
 1 file changed, 2 insertions(+)

--- a/drivers/md/bcache/super.c
+++ b/drivers/md/bcache/super.c
@@ -1974,6 +1974,8 @@ static ssize_t register_bcache(struct ko
 			else
 				err = "device busy";
 			mutex_unlock(&bch_register_lock);
+			if (!IS_ERR(bdev))
+				bdput(bdev);
 			if (attr == &ksysfs_register_quiet)
 				goto out;
 		}

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 092/133] MIPS: Handle non word sized instructions when examining frame
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (130 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 102/133] bcache: fix crash on shutdown in passthrough mode Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 105/133] mm/vmstat.c: fix wrong comment Ben Hutchings
  2017-11-22 15:00 ` [PATCH 3.16 000/133] 3.16.51-rc1 review Guenter Roeck
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Matt Redfearn, linux-mips, Ralf Baechle, Marcin Nowakowski,
	James Hogan, Paul Burton, Ingo Molnar

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Matt Redfearn <matt.redfearn@imgtec.com>

commit 11887ed172a6960673f130dad8f8fb42778f64d7 upstream.

Commit 34c2f668d0f6b ("MIPS: microMIPS: Add unaligned access support.")
added fairly broken support for handling 16bit microMIPS instructions in
get_frame_info(). It adjusts the instruction pointer by 16bits in the
case of a 16bit sp move instruction, but not any other 16bit
instruction.

Commit b6c7a324df37 ("MIPS: Fix get_frame_info() handling of microMIPS
function size") goes some way to fixing get_frame_info() to iterate over
microMIPS instuctions, but the instruction pointer is still manipulated
using a postincrement, and is of union mips_instruction type. Since the
union is sized to the largest member (a word), but microMIPS
instructions are a mix of halfword and word sizes, the function does not
always iterate correctly, ending up misaligned with the instruction
stream and interpreting it incorrectly.

Since the instruction modifying the stack pointer is usually the first
in the function, that one is usually handled correctly. But the
instruction which saves the return address to the sp is some variable
number of instructions into the frame and is frequently missed due to
not being on a word boundary, leading to incomplete walking of the
stack.

Fix this by incrementing the instruction pointer based on the size of
the previously decoded instruction (& remove the hack introduced by
commit 34c2f668d0f6b ("MIPS: microMIPS: Add unaligned access support.")
which adjusts the instruction pointer in the case of a 16bit sp move
instruction, but not any other).

Fixes: 34c2f668d0f6b ("MIPS: microMIPS: Add unaligned access support.")
Signed-off-by: Matt Redfearn <matt.redfearn@imgtec.com>
Cc: Marcin Nowakowski <marcin.nowakowski@imgtec.com>
Cc: James Hogan <james.hogan@imgtec.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Paul Burton <paul.burton@imgtec.com>
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/16953/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 arch/mips/kernel/process.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

--- a/arch/mips/kernel/process.c
+++ b/arch/mips/kernel/process.c
@@ -375,6 +375,7 @@ static int get_frame_info(struct mips_fr
 	bool is_mmips = IS_ENABLED(CONFIG_CPU_MICROMIPS);
 	union mips_instruction insn, *ip, *ip_end;
 	const unsigned int max_insns = 128;
+	unsigned int last_insn_size = 0;
 	unsigned int i;
 
 	info->pc_offset = -1;
@@ -386,15 +387,19 @@ static int get_frame_info(struct mips_fr
 
 	ip_end = (void *)ip + info->func_size;
 
-	for (i = 0; i < max_insns && ip < ip_end; i++, ip++) {
+	for (i = 0; i < max_insns && ip < ip_end; i++) {
+		ip = (void *)ip + last_insn_size;
 		if (is_mmips && mm_insn_16bit(ip->halfword[0])) {
 			insn.halfword[0] = 0;
 			insn.halfword[1] = ip->halfword[0];
+			last_insn_size = 2;
 		} else if (is_mmips) {
 			insn.halfword[0] = ip->halfword[1];
 			insn.halfword[1] = ip->halfword[0];
+			last_insn_size = 4;
 		} else {
 			insn.word = ip->word;
+			last_insn_size = 4;
 		}
 
 		if (is_jump_ins(&insn))
@@ -416,8 +421,6 @@ static int get_frame_info(struct mips_fr
 						tmp = (ip->halfword[0] >> 1);
 						info->frame_size = -(signed short)(tmp & 0xf);
 					}
-					ip = (void *) &ip->halfword[1];
-					ip--;
 				} else
 #endif
 				info->frame_size = - ip->i_format.simmediate;

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 119/133] Input: i8042 - add Gigabyte P57 to the keyboard reset table
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (109 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 069/133] regulator: da9063: Return an error code on probe failure Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 130/133] VSOCK: Fix lockdep issue Ben Hutchings
                   ` (22 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Kai-Heng Feng, Dmitry Torokhov

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Kai-Heng Feng <kai.heng.feng@canonical.com>

commit 697c5d8a36768b36729533fb44622b35d56d6ad0 upstream.

Similar to other Gigabyte laptops, the touchpad on P57 requires a
keyboard reset to detect Elantech touchpad correctly.

BugLink: https://bugs.launchpad.net/bugs/1594214
Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/input/serio/i8042-x86ia64io.h | 7 +++++++
 1 file changed, 7 insertions(+)

--- a/drivers/input/serio/i8042-x86ia64io.h
+++ b/drivers/input/serio/i8042-x86ia64io.h
@@ -804,6 +804,13 @@ static const struct dmi_system_id __init
 		},
 	},
 	{
+		/* Gigabyte P57 - Elantech touchpad */
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "P57"),
+		},
+	},
+	{
 		/* Schenker XMG C504 - Elantech touchpad */
 		.matches = {
 			DMI_MATCH(DMI_SYS_VENDOR, "XMG"),

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 127/133] mac80211: use constant time comparison with keys
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (71 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 113/133] Input: xpad - don't depend on endpoint order Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 070/133] scsi: qla2xxx: Fix an integer overflow in sysfs code Ben Hutchings
                   ` (60 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Johannes Berg, Jason A. Donenfeld

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: "Jason A. Donenfeld" <Jason@zx2c4.com>

commit 2bdd713b92a9cade239d3c7d15205a09f556624d upstream.

Otherwise we risk leaking information via timing side channel.

Fixes: fdf7cb4185b6 ("mac80211: accept key reinstall without changing anything")
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 net/mac80211/key.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

--- a/net/mac80211/key.c
+++ b/net/mac80211/key.c
@@ -18,6 +18,7 @@
 #include <linux/slab.h>
 #include <linux/export.h>
 #include <net/mac80211.h>
+#include <crypto/algapi.h>
 #include <asm/unaligned.h>
 #include "ieee80211_i.h"
 #include "driver-ops.h"
@@ -503,7 +504,7 @@ int ieee80211_key_link(struct ieee80211_
 	 * new version of the key to avoid nonce reuse or replay issues.
 	 */
 	if (old_key && key->conf.keylen == old_key->conf.keylen &&
-	    !memcmp(key->conf.key, old_key->conf.key, key->conf.keylen)) {
+	    !crypto_memneq(key->conf.key, old_key->conf.key, key->conf.keylen)) {
 		ieee80211_key_free_unused(key);
 		ret = 0;
 		goto out;

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 118/133] KVM: async_pf: Fix #DF due to inject "Page not Present" and "Page Ready" exceptions simultaneously
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (102 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 125/133] net: cdc_ether: fix divide by 0 on bad descriptors Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 122/133] [media] cx231xx-cards: fix NULL-deref on missing association descriptor Ben Hutchings
                   ` (29 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Paolo Bonzini, Radim Krčmář, Wanpeng Li

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Wanpeng Li <wanpeng.li@hotmail.com>

commit 9a6e7c39810e4a8bc7fc95056cefb40583fe07ef upstream.

qemu-system-x86-8600  [004] d..1  7205.687530: kvm_entry: vcpu 2
qemu-system-x86-8600  [004] ....  7205.687532: kvm_exit: reason EXCEPTION_NMI rip 0xffffffffa921297d info ffffeb2c0e44e018 80000b0e
qemu-system-x86-8600  [004] ....  7205.687532: kvm_page_fault: address ffffeb2c0e44e018 error_code 0
qemu-system-x86-8600  [004] ....  7205.687620: kvm_try_async_get_page: gva = 0xffffeb2c0e44e018, gfn = 0x427e4e
qemu-system-x86-8600  [004] .N..  7205.687628: kvm_async_pf_not_present: token 0x8b002 gva 0xffffeb2c0e44e018
    kworker/4:2-7814  [004] ....  7205.687655: kvm_async_pf_completed: gva 0xffffeb2c0e44e018 address 0x7fcc30c4e000
qemu-system-x86-8600  [004] ....  7205.687703: kvm_async_pf_ready: token 0x8b002 gva 0xffffeb2c0e44e018
qemu-system-x86-8600  [004] d..1  7205.687711: kvm_entry: vcpu 2

After running some memory intensive workload in guest, I catch the kworker
which completes the GUP too quickly, and queues an "Page Ready" #PF exception
after the "Page not Present" exception before the next vmentry as the above
trace which will result in #DF injected to guest.

This patch fixes it by clearing the queue for "Page not Present" if "Page Ready"
occurs before the next vmentry since the GUP has already got the required page
and shadow page table has already been fixed by "Page Ready" handler.

Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Radim Krčmář <rkrcmar@redhat.com>
Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com>
Fixes: 7c90705bf2a3 ("KVM: Inject asynchronous page fault into a PV guest if page is swapped out.")
[Changed indentation and added clearing of injected. - Radim]
Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
[bwh: Backported to 3.16: Don't assign to kvm_queued_exception::injected or
 x86_exception::async_page_fault]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 arch/x86/kvm/x86.c | 37 ++++++++++++++++++++++++++++---------
 1 file changed, 28 insertions(+), 9 deletions(-)

--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -7561,6 +7561,13 @@ static int apf_put_user(struct kvm_vcpu
 				      sizeof(val));
 }
 
+static int apf_get_user(struct kvm_vcpu *vcpu, u32 *val)
+{
+
+	return kvm_read_guest_cached(vcpu->kvm, &vcpu->arch.apf.data, val,
+				      sizeof(u32));
+}
+
 void kvm_arch_async_page_not_present(struct kvm_vcpu *vcpu,
 				     struct kvm_async_pf *work)
 {
@@ -7587,6 +7594,7 @@ void kvm_arch_async_page_present(struct
 				 struct kvm_async_pf *work)
 {
 	struct x86_exception fault;
+	u32 val;
 
 	trace_kvm_async_pf_ready(work->arch.token, work->gva);
 	if (work->wakeup_all)
@@ -7594,14 +7602,24 @@ void kvm_arch_async_page_present(struct
 	else
 		kvm_del_async_pf_gfn(vcpu, work->arch.gfn);
 
-	if ((vcpu->arch.apf.msr_val & KVM_ASYNC_PF_ENABLED) &&
-	    !apf_put_user(vcpu, KVM_PV_REASON_PAGE_READY)) {
-		fault.vector = PF_VECTOR;
-		fault.error_code_valid = true;
-		fault.error_code = 0;
-		fault.nested_page_fault = false;
-		fault.address = work->arch.token;
-		kvm_inject_page_fault(vcpu, &fault);
+	if (vcpu->arch.apf.msr_val & KVM_ASYNC_PF_ENABLED &&
+	    !apf_get_user(vcpu, &val)) {
+		if (val == KVM_PV_REASON_PAGE_NOT_PRESENT &&
+		    vcpu->arch.exception.pending &&
+		    vcpu->arch.exception.nr == PF_VECTOR &&
+		    !apf_put_user(vcpu, 0)) {
+			vcpu->arch.exception.pending = false;
+			vcpu->arch.exception.nr = 0;
+			vcpu->arch.exception.has_error_code = false;
+			vcpu->arch.exception.error_code = 0;
+		} else if (!apf_put_user(vcpu, KVM_PV_REASON_PAGE_READY)) {
+			fault.vector = PF_VECTOR;
+			fault.error_code_valid = true;
+			fault.error_code = 0;
+			fault.nested_page_fault = false;
+			fault.address = work->arch.token;
+			kvm_inject_page_fault(vcpu, &fault);
+		}
 	}
 	vcpu->arch.apf.halted = false;
 	vcpu->arch.mp_state = KVM_MP_STATE_RUNNABLE;

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 077/133] ftrace: Fix selftest goto location on error
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (48 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 059/133] usb:xhci:Fix regression when ATI chipsets detected Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 082/133] l2tp: pass tunnel pointer to ->session_create() Ben Hutchings
                   ` (83 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Steven Rostedt (VMware)

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: "Steven Rostedt (VMware)" <rostedt@goodmis.org>

commit 46320a6acc4fb58f04bcf78c4c942cc43b20f986 upstream.

In the second iteration of trace_selftest_ops(), the error goto label is
wrong in the case where trace_selftest_test_global_cnt is off. In the
case of error, it leaks the dynamic ops that was allocated.

Fixes: 95950c2e ("ftrace: Add self-tests for multiple function trace users")
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 kernel/trace/trace_selftest.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/kernel/trace/trace_selftest.c
+++ b/kernel/trace/trace_selftest.c
@@ -272,7 +272,7 @@ static int trace_selftest_ops(struct tra
 		goto out_free;
 	if (cnt > 1) {
 		if (trace_selftest_test_global_cnt == 0)
-			goto out;
+			goto out_free;
 	}
 	if (trace_selftest_test_dyn_cnt == 0)
 		goto out_free;

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 113/133] Input: xpad - don't depend on endpoint order
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (70 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 052/133] IB/mlx5: Fix integer overflow when page_shift == 31 Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 127/133] mac80211: use constant time comparison with keys Ben Hutchings
                   ` (61 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Cameron Gutman, Dmitry Torokhov

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Cameron Gutman <aicommander@gmail.com>

commit c01b5e7464f0cf20936d7467c7528163c4e2782d upstream.

The order of endpoints is well defined on official Xbox pads, but
we have found at least one 3rd-party pad that doesn't follow the
standard ("Titanfall 2 Xbox One controller" 0e6f:0165).

Fortunately, we get lucky with this specific pad because it uses
endpoint addresses that differ only by direction. We know that
there are other pads out where this is not true, so let's go
ahead and fix this.

Signed-off-by: Cameron Gutman <aicommander@gmail.com>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
[bwh: Backported to 3.16:
 - Use 'fail3' label in case of failure
 - Adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
--- a/drivers/input/joystick/xpad.c
+++ b/drivers/input/joystick/xpad.c
@@ -723,10 +723,9 @@ exit:
 			__func__, retval);
 }
 
-static int xpad_init_output(struct usb_interface *intf, struct usb_xpad *xpad)
+static int xpad_init_output(struct usb_interface *intf, struct usb_xpad *xpad,
+			struct usb_endpoint_descriptor *ep_irq_out)
 {
-	struct usb_endpoint_descriptor *ep_irq_out;
-	int ep_irq_out_idx;
 	int error;
 
 	if (xpad->xtype == XTYPE_UNKNOWN)
@@ -747,10 +746,6 @@ static int xpad_init_output(struct usb_i
 		goto fail2;
 	}
 
-	/* Xbox One controller has in/out endpoints swapped. */
-	ep_irq_out_idx = xpad->xtype == XTYPE_XBOXONE ? 0 : 1;
-	ep_irq_out = &intf->cur_altsetting->endpoint[ep_irq_out_idx].desc;
-
 	usb_fill_int_urb(xpad->irq_out, xpad->udev,
 			 usb_sndintpipe(xpad->udev, ep_irq_out->bEndpointAddress),
 			 xpad->odata, XPAD_PKT_LEN,
@@ -1005,8 +1000,7 @@ static int xpad_probe(struct usb_interfa
 	struct usb_device *udev = interface_to_usbdev(intf);
 	struct usb_xpad *xpad;
 	struct input_dev *input_dev;
-	struct usb_endpoint_descriptor *ep_irq_in;
-	int ep_irq_in_idx;
+	struct usb_endpoint_descriptor *ep_irq_in, *ep_irq_out;
 	int i, error;
 
 	if (intf->cur_altsetting->desc.bNumEndpoints != 2)
@@ -1123,7 +1117,24 @@ static int xpad_probe(struct usb_interfa
 			xpad_set_up_abs(input_dev, xpad_abs_triggers[i]);
 	}
 
-	error = xpad_init_output(intf, xpad);
+	ep_irq_in = ep_irq_out = NULL;
+
+	for (i = 0; i < 2; i++) {
+		struct usb_endpoint_descriptor *ep =
+				&intf->cur_altsetting->endpoint[i].desc;
+
+		if (usb_endpoint_dir_in(ep))
+			ep_irq_in = ep;
+		else
+			ep_irq_out = ep;
+	}
+
+	if (!ep_irq_in || !ep_irq_out) {
+		error = -ENODEV;
+		goto fail3;
+	}
+
+	error = xpad_init_output(intf, xpad, ep_irq_out);
 	if (error)
 		goto fail3;
 
@@ -1135,10 +1146,6 @@ static int xpad_probe(struct usb_interfa
 	if (error)
 		goto fail5;
 
-	/* Xbox One controller has in/out endpoints swapped. */
-	ep_irq_in_idx = xpad->xtype == XTYPE_XBOXONE ? 1 : 0;
-	ep_irq_in = &intf->cur_altsetting->endpoint[ep_irq_in_idx].desc;
-
 	usb_fill_int_urb(xpad->irq_in, udev,
 			 usb_rcvintpipe(udev, ep_irq_in->bEndpointAddress),
 			 xpad->idata, XPAD_PKT_LEN, xpad_irq_in,

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 064/133] net/mlx4_core: Make explicit conversion to 64bit value
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (63 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 088/133] MIPS: AR7: allow NULL clock for clk_get_rate Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 080/133] Revert "net: use lib/percpu_counter API for fragmentation mem accounting" Ben Hutchings
                   ` (68 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Leon Romanovsky, Tariq Toukan, David S. Miller

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Leon Romanovsky <leonro@mellanox.com>

commit 187782eb58a89ea030731114c6ae37842a4472fe upstream.

The "lg" variable is declared as int so in all places where this variable
is used as a shift operand, the output will be int too.

This produces the following smatch warning:
drivers/net/ethernet/mellanox/mlx4/fw.c:1532 mlx4_map_cmd() warn:
	should '1 << lg' be a 64 bit type?

Simple declaration of "1" to be "1ULL" will fix the issue.

Fixes: 225c7b1feef1 ("IB/mlx4: Add a driver Mellanox ConnectX InfiniBand adapters")
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Tariq Toukan <tariqt@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/net/ethernet/mellanox/mlx4/fw.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/net/ethernet/mellanox/mlx4/fw.c
+++ b/drivers/net/ethernet/mellanox/mlx4/fw.c
@@ -1084,7 +1084,7 @@ int mlx4_map_cmd(struct mlx4_dev *dev, u
 		for (i = 0; i < mlx4_icm_size(&iter) >> lg; ++i) {
 			if (virt != -1) {
 				pages[nent * 2] = cpu_to_be64(virt);
-				virt += 1 << lg;
+				virt += 1ULL << lg;
 			}
 
 			pages[nent * 2 + 1] =

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 098/133] bcache: fix sequential large write IO bypass
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (117 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 093/133] MIPS: microMIPS: Fix detection of addiusp instruction Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 063/133] ARM: 8692/1: mm: abort uaccess retries upon fatal signal Ben Hutchings
                   ` (14 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Jens Axboe, Tang Junhui, Kent Overstreet, Eric Wheeler

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Tang Junhui <tang.junhui@zte.com.cn>

commit c81ffa32a214c84b08900fbc9d432187bd948eba upstream.

Sequential write IOs were tested with bs=1M by FIO in writeback cache
mode, these IOs were expected to be bypassed, but actually they did not.
We debug the code, and find in check_should_bypass():
    if (!congested &&
        mode == CACHE_MODE_WRITEBACK &&
        op_is_write(bio_op(bio)) &&
        (bio->bi_opf & REQ_SYNC))
        goto rescale
that means, If in writeback mode, a write IO with REQ_SYNC flag will not
be bypassed though it is a sequential large IO, It's not a correct thing
to do actually, so this patch remove these codes.

Signed-off-by: tang.junhui <tang.junhui@zte.com.cn>
Reviewed-by: Kent Overstreet <kent.overstreet@gmail.com>
Reviewed-by: Eric Wheeler <bcache@linux.ewheeler.net>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
[bwh: Backported to 3.16: deleted code is slightly different]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/md/bcache/request.c | 6 ------
 1 file changed, 6 deletions(-)

--- a/drivers/md/bcache/request.c
+++ b/drivers/md/bcache/request.c
@@ -395,12 +395,6 @@ static bool check_should_bypass(struct c
 	if (!congested && !dc->sequential_cutoff)
 		goto rescale;
 
-	if (!congested &&
-	    mode == CACHE_MODE_WRITEBACK &&
-	    (bio->bi_rw & REQ_WRITE) &&
-	    (bio->bi_rw & REQ_SYNC))
-		goto rescale;
-
 	spin_lock(&dc->io_lock);
 
 	hlist_for_each_entry(i, iohash(dc, bio->bi_iter.bi_sector), hash)

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 065/133] scsi: aacraid: Fix command send race condition
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (123 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 123/133] media: imon: Fix null-ptr-deref in imon_probe Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 129/133] VSOCK: sock_put wasn't safe to call in interrupt context Ben Hutchings
                   ` (8 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Wen Xiong, Martin K. Petersen, Brian King, Dave Carroll

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Brian King <brking@linux.vnet.ibm.com>

commit 1ae948fa4f00f3a2823e7cb19a3049ef27dd6947 upstream.

This fixes a potential race condition observed on Power systems.

Several places throughout the aacraid driver call aac_fib_send or
similar to send a command to the aacraid adapter, then check the return
code to determine if the command was actually sent to the adapter, then
update the phase field in the scsi command scratch pad area to track
that the firmware now owns this command.  However, there is nothing that
ensures that by the time the aac_fib_send function returns and we go to
write to the scsi command, that the command hasn't already completed and
the scsi command has been freed.  This was causing random crashes in the
TCP stack which was tracked down to be caused by memory that had been a
struct request + scsi_cmnd being now used for an skbuff. Memory
poisoning was enabled in the kernel to debug this which showed that the
last owner of the memory that had been freed was aacraid and that it was
a struct request.  The memory that was corrupted was the exact data
pattern of AAC_OWNER_FIRMWARE and it was at the same offset that aacraid
writes, which is scsicmd->SCp.phase. The patch below resolves this
issue.

Signed-off-by: Brian King <brking@linux.vnet.ibm.com>
Tested-by: Wen Xiong <wenxiong@linux.vnet.ibm.com>
Reviewed-by: Dave Carroll <david.carroll@microsemi.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
[bwh: Backported to 3.16:
 - Drop changes to aac_send_hba_fib()
 - Adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
--- a/drivers/scsi/aacraid/aachba.c
+++ b/drivers/scsi/aacraid/aachba.c
@@ -480,6 +480,7 @@ static int aac_get_container_name(struct
 
 	aac_fib_init(cmd_fibcontext);
 	dinfo = (struct aac_get_name *) fib_data(cmd_fibcontext);
+	scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
 
 	dinfo->command = cpu_to_le32(VM_ContainerConfig);
 	dinfo->type = cpu_to_le32(CT_READ_NAME);
@@ -497,10 +498,8 @@ static int aac_get_container_name(struct
 	/*
 	 *	Check that the command queued to the controller
 	 */
-	if (status == -EINPROGRESS) {
-		scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
+	if (status == -EINPROGRESS)
 		return 0;
-	}
 
 	printk(KERN_WARNING "aac_get_container_name: aac_fib_send failed with status: %d.\n", status);
 	aac_fib_complete(cmd_fibcontext);
@@ -589,6 +588,7 @@ static void _aac_probe_container1(void *
 	dinfo->command = cpu_to_le32(VM_NameServe64);
 	dinfo->count = cpu_to_le32(scmd_id(scsicmd));
 	dinfo->type = cpu_to_le32(FT_FILESYS);
+	scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
 
 	status = aac_fib_send(ContainerCommand,
 			  fibptr,
@@ -600,9 +600,7 @@ static void _aac_probe_container1(void *
 	/*
 	 *	Check that the command queued to the controller
 	 */
-	if (status == -EINPROGRESS)
-		scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
-	else if (status < 0) {
+	if (status < 0 && status != -EINPROGRESS) {
 		/* Inherit results from VM_NameServe, if any */
 		dresp->status = cpu_to_le32(ST_OK);
 		_aac_probe_container2(context, fibptr);
@@ -625,6 +623,7 @@ static int _aac_probe_container(struct s
 		dinfo->count = cpu_to_le32(scmd_id(scsicmd));
 		dinfo->type = cpu_to_le32(FT_FILESYS);
 		scsicmd->SCp.ptr = (char *)callback;
+		scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
 
 		status = aac_fib_send(ContainerCommand,
 			  fibptr,
@@ -636,10 +635,9 @@ static int _aac_probe_container(struct s
 		/*
 		 *	Check that the command queued to the controller
 		 */
-		if (status == -EINPROGRESS) {
-			scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
+		if (status == -EINPROGRESS)
 			return 0;
-		}
+
 		if (status < 0) {
 			scsicmd->SCp.ptr = NULL;
 			aac_fib_complete(fibptr);
@@ -873,6 +871,7 @@ static int aac_get_container_serial(stru
 	dinfo->command = cpu_to_le32(VM_ContainerConfig);
 	dinfo->type = cpu_to_le32(CT_CID_TO_32BITS_UID);
 	dinfo->cid = cpu_to_le32(scmd_id(scsicmd));
+	scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
 
 	status = aac_fib_send(ContainerCommand,
 		  cmd_fibcontext,
@@ -885,10 +884,8 @@ static int aac_get_container_serial(stru
 	/*
 	 *	Check that the command queued to the controller
 	 */
-	if (status == -EINPROGRESS) {
-		scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
+	if (status == -EINPROGRESS)
 		return 0;
-	}
 
 	printk(KERN_WARNING "aac_get_container_serial: aac_fib_send failed with status: %d.\n", status);
 	aac_fib_complete(cmd_fibcontext);
@@ -1774,16 +1771,14 @@ static int aac_read(struct scsi_cmnd * s
 		printk(KERN_WARNING "aac_read: fib allocation failed\n");
 		return -1;
 	}
-
+	scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
 	status = aac_adapter_read(cmd_fibcontext, scsicmd, lba, count);
 
 	/*
 	 *	Check that the command queued to the controller
 	 */
-	if (status == -EINPROGRESS) {
-		scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
+	if (status == -EINPROGRESS)
 		return 0;
-	}
 
 	printk(KERN_WARNING "aac_read: aac_fib_send failed with status: %d.\n", status);
 	/*
@@ -1877,16 +1872,14 @@ static int aac_write(struct scsi_cmnd *
 		printk(KERN_WARNING "aac_write: fib allocation failed\n");
 		return -1;
 	}
-
+	scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
 	status = aac_adapter_write(cmd_fibcontext, scsicmd, lba, count, fua);
 
 	/*
 	 *	Check that the command queued to the controller
 	 */
-	if (status == -EINPROGRESS) {
-		scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
+	if (status == -EINPROGRESS)
 		return 0;
-	}
 
 	printk(KERN_WARNING "aac_write: aac_fib_send failed with status: %d\n", status);
 	/*
@@ -2036,6 +2029,7 @@ static int aac_synchronize(struct scsi_c
 	synchronizecmd->cid = cpu_to_le32(scmd_id(scsicmd));
 	synchronizecmd->count =
 	     cpu_to_le32(sizeof(((struct aac_synchronize_reply *)NULL)->data));
+	scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
 
 	/*
 	 *	Now send the Fib to the adapter
@@ -2051,10 +2045,8 @@ static int aac_synchronize(struct scsi_c
 	/*
 	 *	Check that the command queued to the controller
 	 */
-	if (status == -EINPROGRESS) {
-		scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
+	if (status == -EINPROGRESS)
 		return 0;
-	}
 
 	printk(KERN_WARNING
 		"aac_synchronize: aac_fib_send failed with status: %d.\n", status);
@@ -2116,6 +2108,7 @@ static int aac_start_stop(struct scsi_cm
 	pmcmd->cid = cpu_to_le32(sdev_id(sdev));
 	pmcmd->parm = (scsicmd->cmnd[1] & 1) ?
 		cpu_to_le32(CT_PM_UNIT_IMMEDIATE) : 0;
+	scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
 
 	/*
 	 *	Now send the Fib to the adapter
@@ -2131,10 +2124,8 @@ static int aac_start_stop(struct scsi_cm
 	/*
 	 *	Check that the command queued to the controller
 	 */
-	if (status == -EINPROGRESS) {
-		scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
+	if (status == -EINPROGRESS)
 		return 0;
-	}
 
 	aac_fib_complete(cmd_fibcontext);
 	aac_fib_free(cmd_fibcontext);
@@ -2889,15 +2880,14 @@ static int aac_send_srb_fib(struct scsi_
 	if (!(cmd_fibcontext = aac_fib_alloc(dev))) {
 		return -1;
 	}
+	scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
 	status = aac_adapter_scsi(cmd_fibcontext, scsicmd);
 
 	/*
 	 *	Check that the command queued to the controller
 	 */
-	if (status == -EINPROGRESS) {
-		scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
+	if (status == -EINPROGRESS)
 		return 0;
-	}
 
 	printk(KERN_WARNING "aac_srb: aac_fib_send failed with status: %d\n", status);
 	aac_fib_complete(cmd_fibcontext);

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 049/133] perf tools: Really install manpages via 'make install-man'
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (75 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 124/133] Input: gtco - fix potential out-of-bound access Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 083/133] mfd: max8998: Fix potential NULL pointer dereference Ben Hutchings
                   ` (56 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Konstantin Khlebnikov, Borislav Petkov, Peter Zijlstra,
	Alexander Shishkin, Arnaldo Carvalho de Melo

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>

commit 2826478a6660158d261bc49ad8954a8f5c39be07 upstream.

Target install-man builds them but forget to install.

Signed-off-by: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Borislav Petkov <borislav.petkov@amd.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Fixes: af3df2cf17f5 ("perf tools: Try to build Documentation when installing")
Link: http://lkml.kernel.org/r/150322915300.129715.13645857235229756834.stgit@buzz
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 tools/perf/Documentation/Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/tools/perf/Documentation/Makefile
+++ b/tools/perf/Documentation/Makefile
@@ -192,7 +192,7 @@ do-install-man: man
 #		$(INSTALL) -m 644 $(DOC_MAN5) $(DESTDIR)$(man5dir); \
 #		$(INSTALL) -m 644 $(DOC_MAN7) $(DESTDIR)$(man7dir)
 
-install-man: check-man-tools man
+install-man: check-man-tools man do-install-man
 
 ifdef missing_tools
   DO_INSTALL_MAN = $(warning Please install $(missing_tools) to have the man pages installed)

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 100/133] bcache: correct cache_dirty_target in __update_writeback_rate()
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (50 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 082/133] l2tp: pass tunnel pointer to ->session_create() Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  3:41   ` Joe Perches
  2017-11-22  1:58 ` [PATCH 3.16 071/133] powerpc/44x: Fix mask and shift to zero bug Ben Hutchings
                   ` (81 subsequent siblings)
  133 siblings, 1 reply; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Coly Li, Tang Junhui, Jens Axboe

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Tang Junhui <tang.junhui@zte.com.cn>

commit a8394090a9129b40f9d90dcb7f4a49d60c727ca6 upstream.

__update_write_rate() uses a Proportion-Differentiation Controller
algorithm to control writeback rate. A dirty target number is used in
this PD controller to control writeback rate. A larger target number
will make the writeback rate smaller, on the versus, a smaller target
number will make the writeback rate larger.

bcache uses the following steps to calculate the target number,
1) cache_sectors = all-buckets-of-cache-set * buckets-size
2) cache_dirty_target = cache_sectors * cached-device-writeback_percent
3) target = cache_dirty_target *
(sectors-of-cached-device/sectors-of-all-cached-devices-of-this-cache-set)

The calculation at step 1) for cache_sectors is incorrect, which does
not consider dirty blocks occupied by flash only volume.

A flash only volume can be took as a bcache device without cached
device. All data sectors allocated for it are persistent on cache device
and marked dirty, they are not touched by bcache writeback and garbage
collection code. So data blocks of flash only volume should be ignore
when calculating cache_sectors of cache set.

Current code does not subtract dirty sectors of flash only volume, which
results a larger target number from the above 3 steps. And in sequence
the cache device's writeback rate is smaller then a correct value,
writeback speed is slower on all cached devices.

This patch fixes the incorrect slower writeback rate by subtracting
dirty sectors of flash only volumes in __update_writeback_rate().

(Commit log composed by Coly Li to pass checkpatch.pl checking)

Signed-off-by: Tang Junhui <tang.junhui@zte.com.cn>
Reviewed-by: Coly Li <colyli@suse.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/md/bcache/writeback.c |  3 ++-
 drivers/md/bcache/writeback.h | 19 +++++++++++++++++++
 2 files changed, 21 insertions(+), 1 deletion(-)

--- a/drivers/md/bcache/writeback.c
+++ b/drivers/md/bcache/writeback.c
@@ -21,7 +21,8 @@
 static void __update_writeback_rate(struct cached_dev *dc)
 {
 	struct cache_set *c = dc->disk.c;
-	uint64_t cache_sectors = c->nbuckets * c->sb.bucket_size;
+	uint64_t cache_sectors = c->nbuckets * c->sb.bucket_size -
+				bcache_flash_devs_sectors_dirty(c);
 	uint64_t cache_dirty_target =
 		div_u64(cache_sectors * dc->writeback_percent, 100);
 
--- a/drivers/md/bcache/writeback.h
+++ b/drivers/md/bcache/writeback.h
@@ -14,6 +14,25 @@ static inline uint64_t bcache_dev_sector
 	return ret;
 }
 
+static inline uint64_t  bcache_flash_devs_sectors_dirty(struct cache_set *c)
+{
+	uint64_t i, ret = 0;
+
+	mutex_lock(&bch_register_lock);
+
+	for (i = 0; i < c->nr_uuids; i++) {
+		struct bcache_device *d = c->devices[i];
+
+		if (!d || !UUID_FLASH_ONLY(&c->uuids[i]))
+			continue;
+	   ret += bcache_dev_sectors_dirty(d);
+	}
+
+	mutex_unlock(&bch_register_lock);
+
+	return ret;
+}
+
 static inline unsigned offset_to_stripe(struct bcache_device *d,
 					uint64_t offset)
 {

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 122/133] [media] cx231xx-cards: fix NULL-deref on missing association descriptor
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (103 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 118/133] KVM: async_pf: Fix #DF due to inject "Page not Present" and "Page Ready" exceptions simultaneously Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 101/133] bcache: Correct return value for sysfs attach errors Ben Hutchings
                   ` (28 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Mauro Carvalho Chehab, Hans Verkuil, Johan Hovold,
	Andrey Konovalov

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Johan Hovold <johan@kernel.org>

commit 6c3b047fa2d2286d5e438bcb470c7b1a49f415f6 upstream.

Make sure to check that we actually have an Interface Association
Descriptor before dereferencing it during probe to avoid dereferencing a
NULL-pointer.

Fixes: e0d3bafd0258 ("V4L/DVB (10954): Add cx231xx USB driver")

Reported-by: Andrey Konovalov <andreyknvl@google.com>
Signed-off-by: Johan Hovold <johan@kernel.org>
Tested-by: Andrey Konovalov <andreyknvl@google.com>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
[bwh: Backported to 3.16: adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/media/usb/cx231xx/cx231xx-cards.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/media/usb/cx231xx/cx231xx-cards.c
+++ b/drivers/media/usb/cx231xx/cx231xx-cards.c
@@ -1226,7 +1226,7 @@ static int cx231xx_usb_probe(struct usb_
 	nr = dev->devno;
 
 	assoc_desc = udev->actconfig->intf_assoc[0];
-	if (assoc_desc->bFirstInterface != ifnum) {
+	if (!assoc_desc || assoc_desc->bFirstInterface != ifnum) {
 		cx231xx_err(DRIVER_NAME ": Not found "
 			    "matching IAD interface\n");
 		retval = -ENODEV;

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 114/133] Input: xpad - validate USB endpoint type during probe
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (115 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 108/133] bcache: initialize dirty stripes in flash_dev_run() Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 093/133] MIPS: microMIPS: Fix detection of addiusp instruction Ben Hutchings
                   ` (16 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Cameron Gutman, Dmitry Torokhov, Andrey Konovalov

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Cameron Gutman <aicommander@gmail.com>

commit 122d6a347329818419b032c5a1776e6b3866d9b9 upstream.

We should only see devices with interrupt endpoints. Ignore any other
endpoints that we find, so we don't send try to send them interrupt URBs
and trigger a WARN down in the USB stack.

Reported-by: Andrey Konovalov <andreyknvl@google.com>
Tested-by: Andrey Konovalov <andreyknvl@google.com>
Signed-off-by: Cameron Gutman <aicommander@gmail.com>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/input/joystick/xpad.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

--- a/drivers/input/joystick/xpad.c
+++ b/drivers/input/joystick/xpad.c
@@ -1123,10 +1123,12 @@ static int xpad_probe(struct usb_interfa
 		struct usb_endpoint_descriptor *ep =
 				&intf->cur_altsetting->endpoint[i].desc;
 
-		if (usb_endpoint_dir_in(ep))
-			ep_irq_in = ep;
-		else
-			ep_irq_out = ep;
+		if (usb_endpoint_xfer_int(ep)) {
+			if (usb_endpoint_dir_in(ep))
+				ep_irq_in = ep;
+			else
+				ep_irq_out = ep;
+		}
 	}
 
 	if (!ep_irq_in || !ep_irq_out) {

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 103/133] bcache: fix for gc and write-back race
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (46 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 005/133] perf tests attr: Fix no-delay test Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 059/133] usb:xhci:Fix regression when ATI chipsets detected Ben Hutchings
                   ` (85 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Tang Junhui, Jens Axboe, Coly Li

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Tang Junhui <tang.junhui@zte.com.cn>

commit 9baf30972b5568d8b5bc8b3c46a6ec5b58100463 upstream.

gc and write-back get raced (see the email "bcache get stucked" I sended
before):
gc thread                               write-back thread
|                                       |bch_writeback_thread()
|bch_gc_thread()                        |
|                                       |==>read_dirty()
|==>bch_btree_gc()                      |
|==>btree_root() //get btree root       |
|                //node write locker    |
|==>bch_btree_gc_root()                 |
|                                       |==>read_dirty_submit()
|                                       |==>write_dirty()
|                                       |==>continue_at(cl,
|                                       |               write_dirty_finish,
|                                       |               system_wq);
|                                       |==>write_dirty_finish()//excute
|                                       |               //in system_wq
|                                       |==>bch_btree_insert()
|                                       |==>bch_btree_map_leaf_nodes()
|                                       |==>__bch_btree_map_nodes()
|                                       |==>btree_root //try to get btree
|                                       |              //root node read
|                                       |              //lock
|                                       |-----stuck here
|==>bch_btree_set_root()
|==>bch_journal_meta()
|==>bch_journal()
|==>journal_try_write()
|==>journal_write_unlocked() //journal_full(&c->journal)
|                            //condition satisfied
|==>continue_at(cl, journal_write, system_wq); //try to excute
|                               //journal_write in system_wq
|                               //but work queue is excuting
|                               //write_dirty_finish()
|==>closure_sync(); //wait journal_write execute
|                   //over and wake up gc,
|-------------stuck here
|==>release root node write locker

This patch alloc a separate work-queue for write-back thread to avoid such
race.

(Commit log re-organized by Coly Li to pass checkpatch.pl checking)

Signed-off-by: Tang Junhui <tang.junhui@zte.com.cn>
Acked-by: Coly Li <colyli@suse.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
[bwh: Backported to 3.16: adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/md/bcache/bcache.h    | 1 +
 drivers/md/bcache/super.c     | 2 ++
 drivers/md/bcache/writeback.c | 9 +++++++--
 3 files changed, 10 insertions(+), 2 deletions(-)

--- a/drivers/md/bcache/bcache.h
+++ b/drivers/md/bcache/bcache.h
@@ -348,6 +348,7 @@ struct cached_dev {
 	/* Limit number of writeback bios in flight */
 	struct semaphore	in_flight;
 	struct task_struct	*writeback_thread;
+	struct workqueue_struct	*writeback_write_wq;
 
 	struct keybuf		writeback_keys;
 
--- a/drivers/md/bcache/super.c
+++ b/drivers/md/bcache/super.c
@@ -1075,6 +1075,8 @@ static void cached_dev_free(struct closu
 	cancel_delayed_work_sync(&dc->writeback_rate_update);
 	if (!IS_ERR_OR_NULL(dc->writeback_thread))
 		kthread_stop(dc->writeback_thread);
+	if (dc->writeback_write_wq)
+		destroy_workqueue(dc->writeback_write_wq);
 
 	mutex_lock(&bch_register_lock);
 
--- a/drivers/md/bcache/writeback.c
+++ b/drivers/md/bcache/writeback.c
@@ -191,7 +191,7 @@ static void write_dirty(struct closure *
 
 	closure_bio_submit(&io->bio, cl, &io->dc->disk);
 
-	continue_at(cl, write_dirty_finish, system_wq);
+	continue_at(cl, write_dirty_finish, io->dc->writeback_write_wq);
 }
 
 static void read_dirty_endio(struct bio *bio, int error)
@@ -211,7 +211,7 @@ static void read_dirty_submit(struct clo
 
 	closure_bio_submit(&io->bio, cl, &io->dc->disk);
 
-	continue_at(cl, write_dirty, system_wq);
+	continue_at(cl, write_dirty, io->dc->writeback_write_wq);
 }
 
 static void read_dirty(struct cached_dev *dc)
@@ -518,6 +518,11 @@ int bch_cached_dev_writeback_init(struct
 	dc->writeback_rate_d_term	= 30;
 	dc->writeback_rate_p_term_inverse = 6000;
 
+	dc->writeback_write_wq = alloc_workqueue("bcache_writeback_wq",
+						WQ_MEM_RECLAIM, 0);
+	if (!dc->writeback_write_wq)
+		return -ENOMEM;
+
 	dc->writeback_thread = kthread_create(bch_writeback_thread, dc,
 					      "bcache_writeback");
 	if (IS_ERR(dc->writeback_thread))

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 073/133] powerpc: Correct instruction code for xxlor instruction
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (83 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 048/133] f2fs: check hot_data for roll-forward recovery Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 099/133] bcache: do not subtract sectors_to_gc for bypassed IO Ben Hutchings
                   ` (48 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Paul Mackerras, Michael Ellerman

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Paul Mackerras <paulus@ozlabs.org>

commit 93b2d3cf3733b4060d3623161551f51ea1ab5499 upstream.

The instruction code for xxlor that commit 0016a4cf5582 ("powerpc:
Emulate most Book I instructions in emulate_step()", 2010-06-15)
added is actually the code for xxlnor.  It is used in get_vsr()
and put_vsr() and the effect of the error is that if emulate_step
is used to emulate a VSX load or store from any register other
than vsr0, the bitwise complement of the correct value will be
loaded or stored.  This corrects the error.

Fixes: 0016a4cf5582 ("powerpc: Emulate most Book I instructions in emulate_step()")
Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
[bwh: Backported to 3.16: adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 arch/powerpc/include/asm/ppc-opcode.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/arch/powerpc/include/asm/ppc-opcode.h
+++ b/arch/powerpc/include/asm/ppc-opcode.h
@@ -182,7 +182,7 @@
 #define PPC_INST_WAIT			0x7c00007c
 #define PPC_INST_TLBIVAX		0x7c000624
 #define PPC_INST_TLBSRX_DOT		0x7c0006a5
-#define PPC_INST_XXLOR			0xf0000510
+#define PPC_INST_XXLOR			0xf0000490
 #define PPC_INST_XXSWAPD		0xf0000250
 #define PPC_INST_XVCPSGNDP		0xf0000780
 #define PPC_INST_TRECHKPT		0x7c0007dd

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 096/133] MIPS: Stacktrace: Fix microMIPS stack unwinding on big endian systems
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (92 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 074/133] xen/events: events_fifo: Don't use {get,put}_cpu() in xen_evtchn_fifo_init() Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 087/133] s390/mm: fix race on mm->context.flush_mm Ben Hutchings
                   ` (39 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Paul Burton, Ingo Molnar, Marcin Nowakowski, James Hogan,
	linux-mips, Matt Redfearn, Ralf Baechle

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Matt Redfearn <matt.redfearn@imgtec.com>

commit 41885b02127c7ae169dc94542de4a8eed175495a upstream.

The stack unwinding code uses the mips_instuction union to decode the
instructions it finds. That union uses the __BITFIELD_FIELD macro to
reorder depending on endianness. The stack unwinding code always places
16bit instructions in halfword 1 of the union. This makes the union
accesses correct for little endian systems. Similarly, 32bit
instructions are reordered such that they are correct for little endian
systems. This handling leaves unwinding the stack on big endian systems
broken, as the mips_instruction union will then look for the fields in
the wrong halfword.

To fix this, use a logical shift to place the 16bit instruction into the
correct position in the word field of the union. Use the same shifting
to order the 2 halfwords of 32bit instuctions. Then replace accesses to
the halfword with accesses to the shifted word.
In the case of the ADDIUS5 instruction, switch to using the
mm16_r5_format union member to avoid the need for a 16bit shift.

Fixes: 34c2f668d0f6 ("MIPS: microMIPS: Add unaligned access support.")
Signed-off-by: Matt Redfearn <matt.redfearn@imgtec.com>
Reviewed-by: James Hogan <james.hogan@imgtec.com>
Cc: Marcin Nowakowski <marcin.nowakowski@imgtec.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Paul Burton <paul.burton@imgtec.com>
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/16956/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 arch/mips/kernel/process.c | 16 +++++++---------
 1 file changed, 7 insertions(+), 9 deletions(-)

--- a/arch/mips/kernel/process.c
+++ b/arch/mips/kernel/process.c
@@ -235,7 +235,7 @@ static inline int is_ra_save_ins(union m
 	 *
 	 * microMIPS is way more fun...
 	 */
-	if (mm_insn_16bit(ip->halfword[1])) {
+	if (mm_insn_16bit(ip->word >> 16)) {
 		switch (ip->mm16_r5_format.opcode) {
 		case mm_swsp16_op:
 			if (ip->mm16_r5_format.rt != 31)
@@ -314,7 +314,7 @@ static inline int is_jump_ins(union mips
 	 *
 	 * microMIPS is kind of more fun...
 	 */
-	if (mm_insn_16bit(ip->halfword[1])) {
+	if (mm_insn_16bit(ip->word >> 16)) {
 		if ((ip->mm16_r5_format.opcode == mm_pool16c_op &&
 		    (ip->mm16_r5_format.rt & mm_jr16_op) == mm_jr16_op))
 			return 1;
@@ -351,7 +351,7 @@ static inline int is_sp_move_ins(union m
 	 *
 	 * microMIPS is not more fun...
 	 */
-	if (mm_insn_16bit(ip->halfword[1])) {
+	if (mm_insn_16bit(ip->word >> 16)) {
 		return (ip->mm16_r3_format.opcode == mm_pool16d_op &&
 			ip->mm16_r3_format.simmediate & mm_addiusp_func) ||
 		       (ip->mm16_r5_format.opcode == mm_pool16d_op &&
@@ -390,12 +390,10 @@ static int get_frame_info(struct mips_fr
 	for (i = 0; i < max_insns && ip < ip_end; i++) {
 		ip = (void *)ip + last_insn_size;
 		if (is_mmips && mm_insn_16bit(ip->halfword[0])) {
-			insn.halfword[0] = 0;
-			insn.halfword[1] = ip->halfword[0];
+			insn.word = ip->halfword[0] << 16;
 			last_insn_size = 2;
 		} else if (is_mmips) {
-			insn.halfword[0] = ip->halfword[1];
-			insn.halfword[1] = ip->halfword[0];
+			insn.word = ip->halfword[0] << 16 | ip->halfword[1];
 			last_insn_size = 4;
 		} else {
 			insn.word = ip->word;
@@ -409,7 +407,7 @@ static int get_frame_info(struct mips_fr
 			if (is_sp_move_ins(&insn))
 			{
 #ifdef CONFIG_CPU_MICROMIPS
-				if (mm_insn_16bit(ip->halfword[0]))
+				if (mm_insn_16bit(insn.word >> 16))
 				{
 					unsigned short tmp;
 
@@ -422,7 +420,7 @@ static int get_frame_info(struct mips_fr
 							tmp ^= 0x100;
 						info->frame_size = -(signed short)(tmp << 2);
 					} else {
-						tmp = (ip->halfword[0] >> 1);
+						tmp = (ip->mm16_r5_format.imm >> 1);
 						info->frame_size = -(signed short)(tmp & 0xf);
 					}
 				} else

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 079/133] xfs: fix incorrect log_flushed on fsync
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (107 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 115/133] smsc95xx: Configure pause time to 0xffff when tx flow control enabled Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 069/133] regulator: da9063: Return an error code on probe failure Ben Hutchings
                   ` (24 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Amir Goldstein, Darrick J. Wong, Josef Bacik,
	Christoph Hellwig

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Amir Goldstein <amir73il@gmail.com>

commit 47c7d0b19502583120c3f396c7559e7a77288a68 upstream.

When calling into _xfs_log_force{,_lsn}() with a pointer
to log_flushed variable, log_flushed will be set to 1 if:
1. xlog_sync() is called to flush the active log buffer
AND/OR
2. xlog_wait() is called to wait on a syncing log buffers

xfs_file_fsync() checks the value of log_flushed after
_xfs_log_force_lsn() call to optimize away an explicit
PREFLUSH request to the data block device after writing
out all the file's pages to disk.

This optimization is incorrect in the following sequence of events:

 Task A                    Task B
 -------------------------------------------------------
 xfs_file_fsync()
   _xfs_log_force_lsn()
     xlog_sync()
        [submit PREFLUSH]
                           xfs_file_fsync()
                             file_write_and_wait_range()
                               [submit WRITE X]
                               [endio  WRITE X]
                             _xfs_log_force_lsn()
                               xlog_wait()
        [endio  PREFLUSH]

The write X is not guarantied to be on persistent storage
when PREFLUSH request in completed, because write A was submitted
after the PREFLUSH request, but xfs_file_fsync() of task A will
be notified of log_flushed=1 and will skip explicit flush.

If the system crashes after fsync of task A, write X may not be
present on disk after reboot.

This bug was discovered and demonstrated using Josef Bacik's
dm-log-writes target, which can be used to record block io operations
and then replay a subset of these operations onto the target device.
The test goes something like this:
- Use fsx to execute ops of a file and record ops on log device
- Every now and then fsync the file, store md5 of file and mark
  the location in the log
- Then replay log onto device for each mark, mount fs and compare
  md5 of file to stored value

Cc: Christoph Hellwig <hch@lst.de>
Cc: Josef Bacik <jbacik@fb.com>
Signed-off-by: Amir Goldstein <amir73il@gmail.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
[bwh: Backported to 3.16: adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 fs/xfs/xfs_log.c | 7 -------
 1 file changed, 7 deletions(-)

--- a/fs/xfs/xfs_log.c
+++ b/fs/xfs/xfs_log.c
@@ -3257,8 +3257,6 @@ maybe_sleep:
 		 */
 		if (iclog->ic_state & XLOG_STATE_IOERROR)
 			return XFS_ERROR(EIO);
-		if (log_flushed)
-			*log_flushed = 1;
 	} else {
 
 no_sleep:
@@ -3366,8 +3364,6 @@ try_again:
 
 				xlog_wait(&iclog->ic_prev->ic_write_wait,
 							&log->l_icloglock);
-				if (log_flushed)
-					*log_flushed = 1;
 				already_slept = 1;
 				goto try_again;
 			}
@@ -3401,9 +3397,6 @@ try_again:
 			 */
 			if (iclog->ic_state & XLOG_STATE_IOERROR)
 				return XFS_ERROR(EIO);
-
-			if (log_flushed)
-				*log_flushed = 1;
 		} else {		/* just return */
 			spin_unlock(&log->l_icloglock);
 		}

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 106/133] tracing: Apply trace_clock changes to instance max buffer
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (59 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 072/133] powerpc: Fix DAR reporting when alignment handler faults Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 051/133] RDMA/usnic: Fix remove address space warning Ben Hutchings
                   ` (72 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Steven Rostedt (VMware), Baohong Liu

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Baohong Liu <baohong.liu@intel.com>

commit 170b3b1050e28d1ba0700e262f0899ffa4fccc52 upstream.

Currently trace_clock timestamps are applied to both regular and max
buffers only for global trace. For instance trace, trace_clock
timestamps are applied only to regular buffer. But, regular and max
buffers can be swapped, for example, following a snapshot. So, for
instance trace, bad timestamps can be seen following a snapshot.
Let's apply trace_clock timestamps to instance max buffer as well.

Link: http://lkml.kernel.org/r/ebdb168d0be042dcdf51f81e696b17fabe3609c1.1504642143.git.tom.zanussi@linux.intel.com

Fixes: 277ba0446 ("tracing: Add interface to allow multiple trace buffers")
Signed-off-by: Baohong Liu <baohong.liu@intel.com>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 kernel/trace/trace.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -4945,7 +4945,7 @@ static int tracing_set_clock(struct trac
 	tracing_reset_online_cpus(&tr->trace_buffer);
 
 #ifdef CONFIG_TRACER_MAX_TRACE
-	if (tr->flags & TRACE_ARRAY_FL_GLOBAL && tr->max_buffer.buffer)
+	if (tr->max_buffer.buffer)
 		ring_buffer_set_clock(tr->max_buffer.buffer, trace_clocks[i].func);
 	tracing_reset_online_cpus(&tr->max_buffer);
 #endif

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 075/133] driver core: bus: Fix a potential double free
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (73 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 070/133] scsi: qla2xxx: Fix an integer overflow in sysfs code Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 124/133] Input: gtco - fix potential out-of-bound access Ben Hutchings
                   ` (58 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Christophe JAILLET, Greg Kroah-Hartman

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Christophe JAILLET <christophe.jaillet@wanadoo.fr>

commit 0f9b011d3321ca1079c7a46c18cb1956fbdb7bcb upstream.

The .release function of driver_ktype is 'driver_release()'.
This function frees the container_of this kobject.

So, this memory must not be freed explicitly in the error handling path of
'bus_add_driver()'. Otherwise a double free will occur.

Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/base/bus.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/base/bus.c
+++ b/drivers/base/bus.c
@@ -722,7 +722,7 @@ int bus_add_driver(struct device_driver
 
 out_unregister:
 	kobject_put(&priv->kobj);
-	kfree(drv->p);
+	/* drv->p is freed in driver_release()  */
 	drv->p = NULL;
 out_put_bus:
 	bus_put(bus);

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 056/133] USB: core: Avoid race of async_completed() w/ usbdev_release()
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (55 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 107/133] genirq: Make sparse_irq_lock protect what it should protect Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 120/133] sctp: do not peel off an assoc from one netns to another one Ben Hutchings
                   ` (76 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Douglas Anderson, Greg Kroah-Hartman, Alan Stern

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Douglas Anderson <dianders@chromium.org>

commit ed62ca2f4f51c17841ea39d98c0c409cb53a3e10 upstream.

While running reboot tests w/ a specific set of USB devices (and
slub_debug enabled), I found that once every few hours my device would
be crashed with a stack that looked like this:

[   14.012445] BUG: spinlock bad magic on CPU#0, modprobe/2091
[   14.012460]  lock: 0xffffffc0cb055978, .magic: ffffffc0, .owner: cryption contexts: %lu/%lu
[   14.012460] /1025536097, .owner_cpu: 0
[   14.012466] CPU: 0 PID: 2091 Comm: modprobe Not tainted 4.4.79 #352
[   14.012468] Hardware name: Google Kevin (DT)
[   14.012471] Call trace:
[   14.012483] [<....>] dump_backtrace+0x0/0x160
[   14.012487] [<....>] show_stack+0x20/0x28
[   14.012494] [<....>] dump_stack+0xb4/0xf0
[   14.012500] [<....>] spin_dump+0x8c/0x98
[   14.012504] [<....>] spin_bug+0x30/0x3c
[   14.012508] [<....>] do_raw_spin_lock+0x40/0x164
[   14.012515] [<....>] _raw_spin_lock_irqsave+0x64/0x74
[   14.012521] [<....>] __wake_up+0x2c/0x60
[   14.012528] [<....>] async_completed+0x2d0/0x300
[   14.012534] [<....>] __usb_hcd_giveback_urb+0xc4/0x138
[   14.012538] [<....>] usb_hcd_giveback_urb+0x54/0xf0
[   14.012544] [<....>] xhci_irq+0x1314/0x1348
[   14.012548] [<....>] usb_hcd_irq+0x40/0x50
[   14.012553] [<....>] handle_irq_event_percpu+0x1b4/0x3f0
[   14.012556] [<....>] handle_irq_event+0x4c/0x7c
[   14.012561] [<....>] handle_fasteoi_irq+0x158/0x1c8
[   14.012564] [<....>] generic_handle_irq+0x30/0x44
[   14.012568] [<....>] __handle_domain_irq+0x90/0xbc
[   14.012572] [<....>] gic_handle_irq+0xcc/0x18c

Investigation using kgdb() found that the wait queue that was passed
into wake_up() had been freed (it was filled with slub_debug poison).

I analyzed and instrumented the code and reproduced.  My current
belief is that this is happening:

1. async_completed() is called (from IRQ).  Moves "as" onto the
   completed list.
2. On another CPU, proc_reapurbnonblock_compat() calls
   async_getcompleted().  Blocks on spinlock.
3. async_completed() releases the lock; keeps running; gets blocked
   midway through wake_up().
4. proc_reapurbnonblock_compat() => async_getcompleted() gets the
   lock; removes "as" from completed list and frees it.
5. usbdev_release() is called.  Frees "ps".
6. async_completed() finally continues running wake_up().  ...but
   wake_up() has a pointer to the freed "ps".

The instrumentation that led me to believe this was based on adding
some trace_printk() calls in a select few functions and then using
kdb's "ftdump" at crash time.  The trace follows (NOTE: in the trace
below I cheated a little bit and added a udelay(1000) in
async_completed() after releasing the spinlock because I wanted it to
trigger quicker):

<...>-2104   0d.h2 13759034us!: async_completed at start: as=ffffffc0cc638200
mtpd-2055    3.... 13759356us : async_getcompleted before spin_lock_irqsave
mtpd-2055    3d..1 13759362us : async_getcompleted after list_del_init: as=ffffffc0cc638200
mtpd-2055    3.... 13759371us+: proc_reapurbnonblock_compat: free_async(ffffffc0cc638200)
mtpd-2055    3.... 13759422us+: async_getcompleted before spin_lock_irqsave
mtpd-2055    3.... 13759479us : usbdev_release at start: ps=ffffffc0cc042080
mtpd-2055    3.... 13759487us : async_getcompleted before spin_lock_irqsave
mtpd-2055    3.... 13759497us!: usbdev_release after kfree(ps): ps=ffffffc0cc042080
<...>-2104   0d.h2 13760294us : async_completed before wake_up(): as=ffffffc0cc638200

To fix this problem we can just move the wake_up() under the ps->lock.
There should be no issues there that I'm aware of.

Signed-off-by: Douglas Anderson <dianders@chromium.org>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/usb/core/devio.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- a/drivers/usb/core/devio.c
+++ b/drivers/usb/core/devio.c
@@ -519,6 +519,8 @@ static void async_completed(struct urb *
 	if (as->status < 0 && as->bulk_addr && as->status != -ECONNRESET &&
 			as->status != -ENOENT)
 		cancel_bulk_urbs(ps, as->bulk_addr);
+
+	wake_up(&ps->wait);
 	spin_unlock(&ps->lock);
 
 	if (signr) {
@@ -526,8 +528,6 @@ static void async_completed(struct urb *
 		put_pid(pid);
 		put_cred(cred);
 	}
-
-	wake_up(&ps->wait);
 }
 
 static void destroy_async(struct usb_dev_state *ps, struct list_head *list)

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 091/133] MIPS: ralink: allow NULL clock for clk_get_rate
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (127 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 084/133] mfd: omap-usb-tll: Fix register offsets Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 057/133] usb: quirks: add delay init quirk for Corsair Strafe RGB keyboard Ben Hutchings
                   ` (4 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, John Crispin, Mathias Kresin, Jonas Gorski, linux-mips,
	Ralf Baechle

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Jonas Gorski <jonas.gorski@gmail.com>

commit a18097b7676bf5fb2677bf5e6cc24e721d7c2596 upstream.

Make the behaviour of clk_get_rate consistent with common clk's
clk_get_rate by accepting NULL clocks as parameter. Some device
drivers rely on this, and will cause an OOPS otherwise.

Fixes: 3f0a06b0368d ("MIPS: ralink: adds clkdev code")
Reported-by: Mathias Kresin <dev@kresin.me>
Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
Cc: John Crispin <john@phrozen.org>
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/16778/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 arch/mips/ralink/clk.c | 3 +++
 1 file changed, 3 insertions(+)

--- a/arch/mips/ralink/clk.c
+++ b/arch/mips/ralink/clk.c
@@ -52,6 +52,9 @@ EXPORT_SYMBOL_GPL(clk_disable);
 
 unsigned long clk_get_rate(struct clk *clk)
 {
+	if (!clk)
+		return 0;
+
 	return clk->rate;
 }
 EXPORT_SYMBOL_GPL(clk_get_rate);

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 131/133] VSOCK: Detach QP check should filter out non matching QPs.
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (97 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 132/133] kvm/x86: Handle async PF in RCU read-side critical sections Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 111/133] Input: ucb1400_ts - fix suspend and resume handling Ben Hutchings
                   ` (34 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, George Zhang, Jorgen Hansen, David S. Miller, Michal Hocko

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Jorgen Hansen <jhansen@vmware.com>

commit 8ab18d71de8b07d2c4d6f984b718418c09ea45c5 upstream.

The check in vmci_transport_peer_detach_cb should only allow a
detach when the qp handle of the transport matches the one in
the detach message.

Testing: Before this change, a detach from a peer on a different
socket would cause an active stream socket to register a detach.

Reviewed-by: George Zhang <georgezhang@vmware.com>
Signed-off-by: Jorgen Hansen <jhansen@vmware.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Michal Hocko <mhocko@suse.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 net/vmw_vsock/vmci_transport.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- a/net/vmw_vsock/vmci_transport.c
+++ b/net/vmw_vsock/vmci_transport.c
@@ -844,7 +844,7 @@ static void vmci_transport_peer_detach_c
 	 * qp_handle.
 	 */
 	if (vmci_handle_is_invalid(e_payload->handle) ||
-	    vmci_handle_is_equal(trans->qp_handle, e_payload->handle))
+	    !vmci_handle_is_equal(trans->qp_handle, e_payload->handle))
 		return;
 
 	/* We don't ask for delayed CBs when we subscribe to this event (we
@@ -2158,7 +2158,7 @@ module_exit(vmci_transport_exit);
 
 MODULE_AUTHOR("VMware, Inc.");
 MODULE_DESCRIPTION("VMCI transport for Virtual Sockets");
-MODULE_VERSION("1.0.2.0-k");
+MODULE_VERSION("1.0.3.0-k");
 MODULE_LICENSE("GPL v2");
 MODULE_ALIAS("vmware_vsock");
 MODULE_ALIAS_NETPROTO(PF_VSOCK);

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 132/133] kvm/x86: Handle async PF in RCU read-side critical sections
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (96 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 110/133] ipv6: fix typo in fib6_net_exit() Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 131/133] VSOCK: Detach QP check should filter out non matching QPs Ben Hutchings
                   ` (35 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Sasha Levin, Peter Zijlstra, Paul E. McKenney, Boqun Feng,
	Paolo Bonzini

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Boqun Feng <boqun.feng@gmail.com>

commit b862789aa5186d5ea3a024b7cfe0f80c3a38b980 upstream.

Sasha Levin reported a WARNING:

| WARNING: CPU: 0 PID: 6974 at kernel/rcu/tree_plugin.h:329
| rcu_preempt_note_context_switch kernel/rcu/tree_plugin.h:329 [inline]
| WARNING: CPU: 0 PID: 6974 at kernel/rcu/tree_plugin.h:329
| rcu_note_context_switch+0x16c/0x2210 kernel/rcu/tree.c:458
...
| CPU: 0 PID: 6974 Comm: syz-fuzzer Not tainted 4.13.0-next-20170908+ #246
| Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
| 1.10.1-1ubuntu1 04/01/2014
| Call Trace:
...
| RIP: 0010:rcu_preempt_note_context_switch kernel/rcu/tree_plugin.h:329 [inline]
| RIP: 0010:rcu_note_context_switch+0x16c/0x2210 kernel/rcu/tree.c:458
| RSP: 0018:ffff88003b2debc8 EFLAGS: 00010002
| RAX: 0000000000000001 RBX: 1ffff1000765bd85 RCX: 0000000000000000
| RDX: 1ffff100075d7882 RSI: ffffffffb5c7da20 RDI: ffff88003aebc410
| RBP: ffff88003b2def30 R08: dffffc0000000000 R09: 0000000000000001
| R10: 0000000000000000 R11: 0000000000000000 R12: ffff88003b2def08
| R13: 0000000000000000 R14: ffff88003aebc040 R15: ffff88003aebc040
| __schedule+0x201/0x2240 kernel/sched/core.c:3292
| schedule+0x113/0x460 kernel/sched/core.c:3421
| kvm_async_pf_task_wait+0x43f/0x940 arch/x86/kernel/kvm.c:158
| do_async_page_fault+0x72/0x90 arch/x86/kernel/kvm.c:271
| async_page_fault+0x22/0x30 arch/x86/entry/entry_64.S:1069
| RIP: 0010:format_decode+0x240/0x830 lib/vsprintf.c:1996
| RSP: 0018:ffff88003b2df520 EFLAGS: 00010283
| RAX: 000000000000003f RBX: ffffffffb5d1e141 RCX: ffff88003b2df670
| RDX: 0000000000000001 RSI: dffffc0000000000 RDI: ffffffffb5d1e140
| RBP: ffff88003b2df560 R08: dffffc0000000000 R09: 0000000000000000
| R10: ffff88003b2df718 R11: 0000000000000000 R12: ffff88003b2df5d8
| R13: 0000000000000064 R14: ffffffffb5d1e140 R15: 0000000000000000
| vsnprintf+0x173/0x1700 lib/vsprintf.c:2136
| sprintf+0xbe/0xf0 lib/vsprintf.c:2386
| proc_self_get_link+0xfb/0x1c0 fs/proc/self.c:23
| get_link fs/namei.c:1047 [inline]
| link_path_walk+0x1041/0x1490 fs/namei.c:2127
...

This happened when the host hit a page fault, and delivered it as in an
async page fault, while the guest was in an RCU read-side critical
section.  The guest then tries to reschedule in kvm_async_pf_task_wait(),
but rcu_preempt_note_context_switch() would treat the reschedule as a
sleep in RCU read-side critical section, which is not allowed (even in
preemptible RCU).  Thus the WARN.

To cure this, make kvm_async_pf_task_wait() go to the halt path if the
PF happens in a RCU read-side critical section.

Reported-by: Sasha Levin <levinsasha928@gmail.com>
Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
[bwh: Backported to 3.16: adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 arch/x86/kernel/kvm.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

--- a/arch/x86/kernel/kvm.c
+++ b/arch/x86/kernel/kvm.c
@@ -139,7 +139,8 @@ void kvm_async_pf_task_wait(u32 token)
 
 	n.token = token;
 	n.cpu = smp_processor_id();
-	n.halted = is_idle_task(current) || preempt_count() > 1;
+	n.halted = is_idle_task(current) || preempt_count() > 1 ||
+		   rcu_preempt_depth();
 	init_waitqueue_head(&n.wq);
 	hlist_add_head(&n.link, &b->list);
 	spin_unlock(&b->lock);

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 058/133] usb: Add device quirk for Logitech HD Pro Webcam C920-C
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (66 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 085/133] mac80211_hwsim: Use proper TX power Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 109/133] ipv6: fix memory leak with multiple tables during netns destruction Ben Hutchings
                   ` (65 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Dmitry Fleytman, Greg Kroah-Hartman

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Dmitry Fleytman <dmitry@daynix.com>

commit a1279ef74eeeb5f627f091c71d80dd7ac766c99d upstream.

Commit e0429362ab15
("usb: Add device quirk for Logitech HD Pro Webcams C920 and C930e")
introduced quirk to workaround an issue with some Logitech webcams.

Apparently model C920-C has the same issue so applying
the same quirk as well.

See aforementioned commit message for detailed explanation of the problem.

Signed-off-by: Dmitry Fleytman <dmitry@daynix.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/usb/core/quirks.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

--- a/drivers/usb/core/quirks.c
+++ b/drivers/usb/core/quirks.c
@@ -57,8 +57,9 @@ static const struct usb_device_id usb_qu
 	/* Microsoft LifeCam-VX700 v2.0 */
 	{ USB_DEVICE(0x045e, 0x0770), .driver_info = USB_QUIRK_RESET_RESUME },
 
-	/* Logitech HD Pro Webcams C920 and C930e */
+	/* Logitech HD Pro Webcams C920, C920-C and C930e */
 	{ USB_DEVICE(0x046d, 0x082d), .driver_info = USB_QUIRK_DELAY_INIT },
+	{ USB_DEVICE(0x046d, 0x0841), .driver_info = USB_QUIRK_DELAY_INIT },
 	{ USB_DEVICE(0x046d, 0x0843), .driver_info = USB_QUIRK_DELAY_INIT },
 
 	/* Logitech ConferenceCam CC3000e */

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 128/133] mac80211: don't compare TKIP TX MIC key in reinstall prevention
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (113 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 117/133] IB/mlx4: fix sprintf format warning Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 108/133] bcache: initialize dirty stripes in flash_dev_run() Ben Hutchings
                   ` (18 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Johannes Berg

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Johannes Berg <johannes.berg@intel.com>

commit cfbb0d90a7abb289edc91833d0905931f8805f12 upstream.

For the reinstall prevention, the code I had added compares the
whole key. It turns out though that iwlwifi firmware doesn't
provide the TKIP TX MIC key as it's not needed in client mode,
and thus the comparison will always return false.

For client mode, thus always zero out the TX MIC key part before
doing the comparison in order to avoid accepting the reinstall
of the key with identical encryption and RX MIC key, but not the
same TX MIC key (since the supplicant provides the real one.)

Fixes: fdf7cb4185b6 ("mac80211: accept key reinstall without changing anything")
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 net/mac80211/key.c | 36 ++++++++++++++++++++++++++++++++++--
 1 file changed, 34 insertions(+), 2 deletions(-)

--- a/net/mac80211/key.c
+++ b/net/mac80211/key.c
@@ -475,6 +475,39 @@ void ieee80211_key_free_unused(struct ie
 	ieee80211_key_free_common(key);
 }
 
+static bool ieee80211_key_identical(struct ieee80211_sub_if_data *sdata,
+				    struct ieee80211_key *old,
+				    struct ieee80211_key *new)
+{
+	u8 tkip_old[WLAN_KEY_LEN_TKIP], tkip_new[WLAN_KEY_LEN_TKIP];
+	u8 *tk_old, *tk_new;
+
+	if (!old || new->conf.keylen != old->conf.keylen)
+		return false;
+
+	tk_old = old->conf.key;
+	tk_new = new->conf.key;
+
+	/*
+	 * In station mode, don't compare the TX MIC key, as it's never used
+	 * and offloaded rekeying may not care to send it to the host. This
+	 * is the case in iwlwifi, for example.
+	 */
+	if (sdata->vif.type == NL80211_IFTYPE_STATION &&
+	    new->conf.cipher == WLAN_CIPHER_SUITE_TKIP &&
+	    new->conf.keylen == WLAN_KEY_LEN_TKIP &&
+	    !(new->conf.flags & IEEE80211_KEY_FLAG_PAIRWISE)) {
+		memcpy(tkip_old, tk_old, WLAN_KEY_LEN_TKIP);
+		memcpy(tkip_new, tk_new, WLAN_KEY_LEN_TKIP);
+		memset(tkip_old + NL80211_TKIP_DATA_OFFSET_TX_MIC_KEY, 0, 8);
+		memset(tkip_new + NL80211_TKIP_DATA_OFFSET_TX_MIC_KEY, 0, 8);
+		tk_old = tkip_old;
+		tk_new = tkip_new;
+	}
+
+	return !crypto_memneq(tk_old, tk_new, new->conf.keylen);
+}
+
 int ieee80211_key_link(struct ieee80211_key *key,
 		       struct ieee80211_sub_if_data *sdata,
 		       struct sta_info *sta)
@@ -503,8 +536,7 @@ int ieee80211_key_link(struct ieee80211_
 	 * Silently accept key re-installation without really installing the
 	 * new version of the key to avoid nonce reuse or replay issues.
 	 */
-	if (old_key && key->conf.keylen == old_key->conf.keylen &&
-	    !crypto_memneq(key->conf.key, old_key->conf.key, key->conf.keylen)) {
+	if (ieee80211_key_identical(sdata, old_key, key)) {
 		ieee80211_key_free_unused(key);
 		ret = 0;
 		goto out;

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 083/133] mfd: max8998: Fix potential NULL pointer dereference
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (76 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 049/133] perf tools: Really install manpages via 'make install-man' Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 078/133] ARC: Re-enable MMU upon Machine Check exception Ben Hutchings
                   ` (55 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Christophe JAILLET, Lee Jones

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Christophe JAILLET <christophe.jaillet@wanadoo.fr>

commit 2042f3c29f2f11129434de8a610878e8a15b4174 upstream.

if 'max8998_i2c_parse_dt_pdata() fails (when out of memory), a NULL
pointer dereference will occur in the error handling code.

Return directly instead.

Fixes: ee999fb3f17f("mfd: max8998: Add support for Device Tree")
Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/mfd/max8998.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

--- a/drivers/mfd/max8998.c
+++ b/drivers/mfd/max8998.c
@@ -195,10 +195,8 @@ static int max8998_i2c_probe(struct i2c_
 
 	if (IS_ENABLED(CONFIG_OF) && i2c->dev.of_node) {
 		pdata = max8998_i2c_parse_dt_pdata(&i2c->dev);
-		if (IS_ERR(pdata)) {
-			ret = PTR_ERR(pdata);
-			goto err;
-		}
+		if (IS_ERR(pdata))
+			return PTR_ERR(pdata);
 	}
 
 	i2c_set_clientdata(i2c, max8998);

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 090/133] MIPS: Loongson 2F: allow NULL clock for clk_get_rate
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (100 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 076/133] md/bitmap: disable bitmap_resize for file-backed bitmaps Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 125/133] net: cdc_ether: fix divide by 0 on bad descriptors Ben Hutchings
                   ` (31 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, linux-mips, Jonas Gorski, Ralf Baechle, Mathias Kresin

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Jonas Gorski <jonas.gorski@gmail.com>

commit 386787b1fcab2dd3d16ca3f46729aaafdef306e3 upstream.

Make the behaviour of clk_get_rate consistent with common clk's
clk_get_rate by accepting NULL clocks as parameter, as some device
drivers rely on this.

Make the behaviour of clk_get_rate consistent with common clk's
clk_get_rate by accepting NULL clocks as parameter. Some device
drivers rely on this, and will cause an OOPS otherwise.

Fixes: f8ede0f700f5 ("MIPS: Loongson 2F: Add CPU frequency scaling support")
Reported-by: Mathias Kresin <dev@kresin.me>
Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/16777/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
[bwh: Backported to 3.16: adjust filename]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 arch/mips/loongson/lemote-2f/clock.c | 3 +++
 1 file changed, 3 insertions(+)

--- a/arch/mips/loongson/lemote-2f/clock.c
+++ b/arch/mips/loongson/lemote-2f/clock.c
@@ -80,6 +80,9 @@ EXPORT_SYMBOL(clk_disable);
 
 unsigned long clk_get_rate(struct clk *clk)
 {
+	if (!clk)
+		return 0;
+
 	return (unsigned long)clk->rate;
 }
 EXPORT_SYMBOL(clk_get_rate);

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 059/133] usb:xhci:Fix regression when ATI chipsets detected
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (47 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 103/133] bcache: fix for gc and write-back race Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 077/133] ftrace: Fix selftest goto location on error Ben Hutchings
                   ` (84 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Greg Kroah-Hartman, Nehal Shah, Sandeep Singh,
	Sandeep Singh, Shyam Sundar S K

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Sandeep Singh <sandeep.singh@amd.com>

commit e6b422b88b46353cf596e0db6dc0e39d50d90d6e upstream.

The following commit cause a regression on ATI chipsets.
'commit e788787ef4f9 ("usb:xhci:Add quirk for Certain
failing HP keyboard on reset after resume")'

This causes pinfo->smbus_dev to be wrongly set to NULL on
systems with the ATI chipset that this function checks for first.

Added conditional check for AMD chipsets to avoid the overwriting
pinfo->smbus_dev.

Reported-by: Ben Hutchings <ben@decadent.org.uk>
Fixes: e788787ef4f9 ("usb:xhci:Add quirk for Certain
failing HP keyboard on reset after resume")
cc: Nehal Shah <Nehal-bakulchandra.Shah@amd.com>
Signed-off-by: Sandeep Singh <Sandeep.Singh@amd.com>
Signed-off-by: Shyam Sundar S K <Shyam-sundar.S-k@amd.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/usb/host/pci-quirks.c | 35 ++++++++++++++++++-----------------
 1 file changed, 18 insertions(+), 17 deletions(-)

--- a/drivers/usb/host/pci-quirks.c
+++ b/drivers/usb/host/pci-quirks.c
@@ -143,29 +143,30 @@ static int amd_chipset_sb_type_init(stru
 			pinfo->sb_type.gen = AMD_CHIPSET_SB700;
 		else if (rev >= 0x40 && rev <= 0x4f)
 			pinfo->sb_type.gen = AMD_CHIPSET_SB800;
-	}
-	pinfo->smbus_dev = pci_get_device(PCI_VENDOR_ID_AMD,
-					  0x145c, NULL);
-	if (pinfo->smbus_dev) {
-		pinfo->sb_type.gen = AMD_CHIPSET_TAISHAN;
 	} else {
 		pinfo->smbus_dev = pci_get_device(PCI_VENDOR_ID_AMD,
 				PCI_DEVICE_ID_AMD_HUDSON2_SMBUS, NULL);
 
-		if (!pinfo->smbus_dev) {
-			pinfo->sb_type.gen = NOT_AMD_CHIPSET;
-			return 0;
+		if (pinfo->smbus_dev) {
+			rev = pinfo->smbus_dev->revision;
+			if (rev >= 0x11 && rev <= 0x14)
+				pinfo->sb_type.gen = AMD_CHIPSET_HUDSON2;
+			else if (rev >= 0x15 && rev <= 0x18)
+				pinfo->sb_type.gen = AMD_CHIPSET_BOLTON;
+			else if (rev >= 0x39 && rev <= 0x3a)
+				pinfo->sb_type.gen = AMD_CHIPSET_YANGTZE;
+		} else {
+			pinfo->smbus_dev = pci_get_device(PCI_VENDOR_ID_AMD,
+							  0x145c, NULL);
+			if (pinfo->smbus_dev) {
+				rev = pinfo->smbus_dev->revision;
+				pinfo->sb_type.gen = AMD_CHIPSET_TAISHAN;
+			} else {
+				pinfo->sb_type.gen = NOT_AMD_CHIPSET;
+				return 0;
+			}
 		}
-
-		rev = pinfo->smbus_dev->revision;
-		if (rev >= 0x11 && rev <= 0x14)
-			pinfo->sb_type.gen = AMD_CHIPSET_HUDSON2;
-		else if (rev >= 0x15 && rev <= 0x18)
-			pinfo->sb_type.gen = AMD_CHIPSET_BOLTON;
-		else if (rev >= 0x39 && rev <= 0x3a)
-			pinfo->sb_type.gen = AMD_CHIPSET_YANGTZE;
 	}
-
 	pinfo->sb_type.rev = rev;
 	return 1;
 }

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 068/133] iwlwifi: mvm: Avoid deferring non bufferable frames
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (89 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 053/133] media: em28xx: calculate left volume level correctly Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 116/133] KVM: SVM: Add a missing 'break' statement Ben Hutchings
                   ` (42 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Luca Coelho, David Spinadel

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: David Spinadel <david.spinadel@intel.com>

commit eb045e6e0389eabfd704dd7a76d8b2a892970e85 upstream.

Use bcast station for all non bufferable frames on AP and AD-HOC.

The host is no longer aware of STAs PS status because of buffer
station offload, so we can't rely on mac80211 to toggle on
IEEE80211_TX_CTL_NO_PS_BUFFER bit.

A possible issue with buffering such frames, beside the obvious spec
violation, is when a station disconnects while in PS but the AP isn't
aware of that. In such scenarios the AP won't be able to send probe
responses or auth frames so the STA won't be able to reconnect and
the AP will have a queue hang.

Fixes: 3e56eadfb6a1 ("iwlwifi: mvm: implement AP/GO uAPSD support")
Signed-off-by: David Spinadel <david.spinadel@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/net/wireless/iwlwifi/mvm/mac80211.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

--- a/drivers/net/wireless/iwlwifi/mvm/mac80211.c
+++ b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
@@ -485,10 +485,11 @@ static void iwl_mvm_mac_tx(struct ieee80
 	    !test_bit(IWL_MVM_STATUS_ROC_RUNNING, &mvm->status))
 		goto drop;
 
-	/* treat non-bufferable MMPDUs as broadcast if sta is sleeping */
-	if (unlikely(info->flags & IEEE80211_TX_CTL_NO_PS_BUFFER &&
-		     ieee80211_is_mgmt(hdr->frame_control) &&
-		     !ieee80211_is_bufferable_mmpdu(hdr->frame_control)))
+	/* treat non-bufferable MMPDUs on AP interfaces as broadcast */
+	if ((info->control.vif->type == NL80211_IFTYPE_AP ||
+	     info->control.vif->type == NL80211_IFTYPE_ADHOC) &&
+	    ieee80211_is_mgmt(hdr->frame_control) &&
+	    !ieee80211_is_bufferable_mmpdu(hdr->frame_control))
 		sta = NULL;
 
 	if (sta) {

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 112/133] Input: xpad - add support for Xbox One controllers
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (53 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 060/133] ACPI, APEI, EINJ: Subtract any matching Register Region from Trigger resources Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 107/133] genirq: Make sparse_irq_lock protect what it should protect Ben Hutchings
                   ` (78 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Dmitry Torokhov, Ted Mielczarek

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Ted Mielczarek <ted@mielczarek.org>

commit 1a48ff81b3912be5fadae3fafde6c2f632246a4c upstream.

Xbox One controllers require an initialization message to start sending
data, so xpad_init_output becomes a required function. The Xbox One
controller does not have LEDs like the Xbox 360 controller, so that
functionality is not implemented. The format of messages controlling rumble
is currently undocumented, so rumble support is not yet implemented.

Note that Xbox One controller advertises three interfaces with the same
interface class, subclass and protocol, so we have to also match against
interface number.

Signed-off-by: Ted Mielczarek <ted@mielczarek.org>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/input/joystick/xpad.c | 174 +++++++++++++++++++++++++++++++++++++-----
 1 file changed, 157 insertions(+), 17 deletions(-)

--- a/drivers/input/joystick/xpad.c
+++ b/drivers/input/joystick/xpad.c
@@ -95,7 +95,8 @@
 #define XTYPE_XBOX        0
 #define XTYPE_XBOX360     1
 #define XTYPE_XBOX360W    2
-#define XTYPE_UNKNOWN     3
+#define XTYPE_XBOXONE     3
+#define XTYPE_UNKNOWN     4
 
 static bool dpad_to_buttons;
 module_param(dpad_to_buttons, bool, S_IRUGO);
@@ -121,6 +122,7 @@ static const struct xpad_device {
 	{ 0x045e, 0x0287, "Microsoft Xbox Controller S", 0, XTYPE_XBOX },
 	{ 0x045e, 0x0289, "Microsoft X-Box pad v2 (US)", 0, XTYPE_XBOX },
 	{ 0x045e, 0x028e, "Microsoft X-Box 360 pad", 0, XTYPE_XBOX360 },
+	{ 0x045e, 0x02d1, "Microsoft X-Box One pad", 0, XTYPE_XBOXONE },
 	{ 0x045e, 0x0291, "Xbox 360 Wireless Receiver (XBOX)", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360W },
 	{ 0x045e, 0x0719, "Xbox 360 Wireless Receiver", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360W },
 	{ 0x044f, 0x0f07, "Thrustmaster, Inc. Controller", 0, XTYPE_XBOX },
@@ -263,10 +265,12 @@ static const signed short xpad_abs_trigg
 	-1
 };
 
-/* Xbox 360 has a vendor-specific class, so we cannot match it with only
+/*
+ * Xbox 360 has a vendor-specific class, so we cannot match it with only
  * USB_INTERFACE_INFO (also specifically refused by USB subsystem), so we
  * match against vendor id as well. Wired Xbox 360 devices have protocol 1,
- * wireless controllers have protocol 129. */
+ * wireless controllers have protocol 129.
+ */
 #define XPAD_XBOX360_VENDOR_PROTOCOL(vend,pr) \
 	.match_flags = USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_INT_INFO, \
 	.idVendor = (vend), \
@@ -277,9 +281,20 @@ static const signed short xpad_abs_trigg
 	{ XPAD_XBOX360_VENDOR_PROTOCOL(vend,1) }, \
 	{ XPAD_XBOX360_VENDOR_PROTOCOL(vend,129) }
 
+/* The Xbox One controller uses subclass 71 and protocol 208. */
+#define XPAD_XBOXONE_VENDOR_PROTOCOL(vend, pr) \
+	.match_flags = USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_INT_INFO, \
+	.idVendor = (vend), \
+	.bInterfaceClass = USB_CLASS_VENDOR_SPEC, \
+	.bInterfaceSubClass = 71, \
+	.bInterfaceProtocol = (pr)
+#define XPAD_XBOXONE_VENDOR(vend) \
+	{ XPAD_XBOXONE_VENDOR_PROTOCOL(vend, 208) }
+
 static struct usb_device_id xpad_table[] = {
 	{ USB_INTERFACE_INFO('X', 'B', 0) },	/* X-Box USB-IF not approved class */
 	XPAD_XBOX360_VENDOR(0x045e),		/* Microsoft X-Box 360 controllers */
+	XPAD_XBOXONE_VENDOR(0x045e),		/* Microsoft X-Box One controllers */
 	XPAD_XBOX360_VENDOR(0x046d),		/* Logitech X-Box 360 style controllers */
 	XPAD_XBOX360_VENDOR(0x0738),		/* Mad Catz X-Box 360 controllers */
 	{ USB_DEVICE(0x0738, 0x4540) },		/* Mad Catz Beat Pad */
@@ -313,12 +328,10 @@ struct usb_xpad {
 	struct urb *bulk_out;
 	unsigned char *bdata;
 
-#if defined(CONFIG_JOYSTICK_XPAD_FF) || defined(CONFIG_JOYSTICK_XPAD_LEDS)
 	struct urb *irq_out;		/* urb for interrupt out report */
 	unsigned char *odata;		/* output data */
 	dma_addr_t odata_dma;
 	struct mutex odata_mutex;
-#endif
 
 #if defined(CONFIG_JOYSTICK_XPAD_LEDS)
 	struct xpad_led *led;
@@ -509,6 +522,105 @@ static void xpad360w_process_packet(stru
 	xpad360_process_packet(xpad, cmd, &data[4]);
 }
 
+/*
+ *	xpadone_process_buttons
+ *
+ *	Process a button update packet from an Xbox one controller.
+ */
+static void xpadone_process_buttons(struct usb_xpad *xpad,
+				struct input_dev *dev,
+				unsigned char *data)
+{
+	/* menu/view buttons */
+	input_report_key(dev, BTN_START,  data[4] & 0x04);
+	input_report_key(dev, BTN_SELECT, data[4] & 0x08);
+
+	/* buttons A,B,X,Y */
+	input_report_key(dev, BTN_A,	data[4] & 0x10);
+	input_report_key(dev, BTN_B,	data[4] & 0x20);
+	input_report_key(dev, BTN_X,	data[4] & 0x40);
+	input_report_key(dev, BTN_Y,	data[4] & 0x80);
+
+	/* digital pad */
+	if (xpad->mapping & MAP_DPAD_TO_BUTTONS) {
+		/* dpad as buttons (left, right, up, down) */
+		input_report_key(dev, BTN_TRIGGER_HAPPY1, data[5] & 0x04);
+		input_report_key(dev, BTN_TRIGGER_HAPPY2, data[5] & 0x08);
+		input_report_key(dev, BTN_TRIGGER_HAPPY3, data[5] & 0x01);
+		input_report_key(dev, BTN_TRIGGER_HAPPY4, data[5] & 0x02);
+	} else {
+		input_report_abs(dev, ABS_HAT0X,
+				 !!(data[5] & 0x08) - !!(data[5] & 0x04));
+		input_report_abs(dev, ABS_HAT0Y,
+				 !!(data[5] & 0x02) - !!(data[5] & 0x01));
+	}
+
+	/* TL/TR */
+	input_report_key(dev, BTN_TL,	data[5] & 0x10);
+	input_report_key(dev, BTN_TR,	data[5] & 0x20);
+
+	/* stick press left/right */
+	input_report_key(dev, BTN_THUMBL, data[5] & 0x40);
+	input_report_key(dev, BTN_THUMBR, data[5] & 0x80);
+
+	if (!(xpad->mapping & MAP_STICKS_TO_NULL)) {
+		/* left stick */
+		input_report_abs(dev, ABS_X,
+				 (__s16) le16_to_cpup((__le16 *)(data + 10)));
+		input_report_abs(dev, ABS_Y,
+				 ~(__s16) le16_to_cpup((__le16 *)(data + 12)));
+
+		/* right stick */
+		input_report_abs(dev, ABS_RX,
+				 (__s16) le16_to_cpup((__le16 *)(data + 14)));
+		input_report_abs(dev, ABS_RY,
+				 ~(__s16) le16_to_cpup((__le16 *)(data + 16)));
+	}
+
+	/* triggers left/right */
+	if (xpad->mapping & MAP_TRIGGERS_TO_BUTTONS) {
+		input_report_key(dev, BTN_TL2,
+				 (__u16) le16_to_cpup((__le16 *)(data + 6)));
+		input_report_key(dev, BTN_TR2,
+				 (__u16) le16_to_cpup((__le16 *)(data + 8)));
+	} else {
+		input_report_abs(dev, ABS_Z,
+				 (__u16) le16_to_cpup((__le16 *)(data + 6)));
+		input_report_abs(dev, ABS_RZ,
+				 (__u16) le16_to_cpup((__le16 *)(data + 8)));
+	}
+
+	input_sync(dev);
+}
+
+/*
+ *	xpadone_process_packet
+ *
+ *	Completes a request by converting the data into events for the
+ *	input subsystem. This version is for the Xbox One controller.
+ *
+ *	The report format was gleaned from
+ *	https://github.com/kylelemons/xbox/blob/master/xbox.go
+ */
+
+static void xpadone_process_packet(struct usb_xpad *xpad,
+				u16 cmd, unsigned char *data)
+{
+	struct input_dev *dev = xpad->dev;
+
+	switch (data[0]) {
+	case 0x20:
+		xpadone_process_buttons(xpad, dev, data);
+		break;
+
+	case 0x07:
+		/* the xbox button has its own special report */
+		input_report_key(dev, BTN_MODE, data[4] & 0x01);
+		input_sync(dev);
+		break;
+	}
+}
+
 static void xpad_irq_in(struct urb *urb)
 {
 	struct usb_xpad *xpad = urb->context;
@@ -541,6 +653,9 @@ static void xpad_irq_in(struct urb *urb)
 	case XTYPE_XBOX360W:
 		xpad360w_process_packet(xpad, 0, xpad->idata);
 		break;
+	case XTYPE_XBOXONE:
+		xpadone_process_packet(xpad, 0, xpad->idata);
+		break;
 	default:
 		xpad_process_packet(xpad, 0, xpad->idata);
 	}
@@ -574,7 +689,6 @@ static void xpad_bulk_out(struct urb *ur
 	}
 }
 
-#if defined(CONFIG_JOYSTICK_XPAD_FF) || defined(CONFIG_JOYSTICK_XPAD_LEDS)
 static void xpad_irq_out(struct urb *urb)
 {
 	struct usb_xpad *xpad = urb->context;
@@ -612,6 +726,7 @@ exit:
 static int xpad_init_output(struct usb_interface *intf, struct usb_xpad *xpad)
 {
 	struct usb_endpoint_descriptor *ep_irq_out;
+	int ep_irq_out_idx;
 	int error;
 
 	if (xpad->xtype == XTYPE_UNKNOWN)
@@ -632,7 +747,10 @@ static int xpad_init_output(struct usb_i
 		goto fail2;
 	}
 
-	ep_irq_out = &intf->cur_altsetting->endpoint[1].desc;
+	/* Xbox One controller has in/out endpoints swapped. */
+	ep_irq_out_idx = xpad->xtype == XTYPE_XBOXONE ? 0 : 1;
+	ep_irq_out = &intf->cur_altsetting->endpoint[ep_irq_out_idx].desc;
+
 	usb_fill_int_urb(xpad->irq_out, xpad->udev,
 			 usb_sndintpipe(xpad->udev, ep_irq_out->bEndpointAddress),
 			 xpad->odata, XPAD_PKT_LEN,
@@ -660,11 +778,6 @@ static void xpad_deinit_output(struct us
 				xpad->odata, xpad->odata_dma);
 	}
 }
-#else
-static int xpad_init_output(struct usb_interface *intf, struct usb_xpad *xpad) { return 0; }
-static void xpad_deinit_output(struct usb_xpad *xpad) {}
-static void xpad_stop_output(struct usb_xpad *xpad) {}
-#endif
 
 #ifdef CONFIG_JOYSTICK_XPAD_FF
 static int xpad_play_effect(struct input_dev *dev, void *data, struct ff_effect *effect)
@@ -731,7 +844,7 @@ static int xpad_play_effect(struct input
 
 static int xpad_init_ff(struct usb_xpad *xpad)
 {
-	if (xpad->xtype == XTYPE_UNKNOWN)
+	if (xpad->xtype == XTYPE_UNKNOWN || xpad->xtype == XTYPE_XBOXONE)
 		return 0;
 
 	input_set_capability(xpad->dev, EV_FF, FF_RUMBLE);
@@ -840,6 +953,14 @@ static int xpad_open(struct input_dev *d
 	if (usb_submit_urb(xpad->irq_in, GFP_KERNEL))
 		return -EIO;
 
+	if (xpad->xtype == XTYPE_XBOXONE) {
+		/* Xbox one controller needs to be initialized. */
+		xpad->odata[0] = 0x05;
+		xpad->odata[1] = 0x20;
+		xpad->irq_out->transfer_buffer_length = 2;
+		return usb_submit_urb(xpad->irq_out, GFP_KERNEL);
+	}
+
 	return 0;
 }
 
@@ -855,6 +976,7 @@ static void xpad_close(struct input_dev
 
 static void xpad_set_up_abs(struct input_dev *input_dev, signed short abs)
 {
+	struct usb_xpad *xpad = input_get_drvdata(input_dev);
 	set_bit(abs, input_dev->absbit);
 
 	switch (abs) {
@@ -866,7 +988,10 @@ static void xpad_set_up_abs(struct input
 		break;
 	case ABS_Z:
 	case ABS_RZ:	/* the triggers (if mapped to axes) */
-		input_set_abs_params(input_dev, abs, 0, 255, 0, 0);
+		if (xpad->xtype == XTYPE_XBOXONE)
+			input_set_abs_params(input_dev, abs, 0, 1023, 0, 0);
+		else
+			input_set_abs_params(input_dev, abs, 0, 255, 0, 0);
 		break;
 	case ABS_HAT0X:
 	case ABS_HAT0Y:	/* the d-pad (only if dpad is mapped to axes */
@@ -881,6 +1006,7 @@ static int xpad_probe(struct usb_interfa
 	struct usb_xpad *xpad;
 	struct input_dev *input_dev;
 	struct usb_endpoint_descriptor *ep_irq_in;
+	int ep_irq_in_idx;
 	int i, error;
 
 	if (intf->cur_altsetting->desc.bNumEndpoints != 2)
@@ -892,6 +1018,16 @@ static int xpad_probe(struct usb_interfa
 			break;
 	}
 
+	if (xpad_device[i].xtype == XTYPE_XBOXONE &&
+	    intf->cur_altsetting->desc.bInterfaceNumber != 0) {
+		/*
+		 * The Xbox One controller lists three interfaces all with the
+		 * same interface class, subclass and protocol. Differentiate by
+		 * interface number.
+		 */
+		return -ENODEV;
+	}
+
 	xpad = kzalloc(sizeof(struct usb_xpad), GFP_KERNEL);
 	input_dev = input_allocate_device();
 	if (!xpad || !input_dev) {
@@ -962,7 +1098,8 @@ static int xpad_probe(struct usb_interfa
 		__set_bit(xpad_common_btn[i], input_dev->keybit);
 
 	/* set up model-specific ones */
-	if (xpad->xtype == XTYPE_XBOX360 || xpad->xtype == XTYPE_XBOX360W) {
+	if (xpad->xtype == XTYPE_XBOX360 || xpad->xtype == XTYPE_XBOX360W ||
+	    xpad->xtype == XTYPE_XBOXONE) {
 		for (i = 0; xpad360_btn[i] >= 0; i++)
 			__set_bit(xpad360_btn[i], input_dev->keybit);
 	} else {
@@ -975,7 +1112,7 @@ static int xpad_probe(struct usb_interfa
 			__set_bit(xpad_btn_pad[i], input_dev->keybit);
 	} else {
 		for (i = 0; xpad_abs_pad[i] >= 0; i++)
-		    xpad_set_up_abs(input_dev, xpad_abs_pad[i]);
+			xpad_set_up_abs(input_dev, xpad_abs_pad[i]);
 	}
 
 	if (xpad->mapping & MAP_TRIGGERS_TO_BUTTONS) {
@@ -998,7 +1135,10 @@ static int xpad_probe(struct usb_interfa
 	if (error)
 		goto fail5;
 
-	ep_irq_in = &intf->cur_altsetting->endpoint[0].desc;
+	/* Xbox One controller has in/out endpoints swapped. */
+	ep_irq_in_idx = xpad->xtype == XTYPE_XBOXONE ? 1 : 0;
+	ep_irq_in = &intf->cur_altsetting->endpoint[ep_irq_in_idx].desc;
+
 	usb_fill_int_urb(xpad->irq_in, udev,
 			 usb_rcvintpipe(udev, ep_irq_in->bEndpointAddress),
 			 xpad->idata, XPAD_PKT_LEN, xpad_irq_in,

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 115/133] smsc95xx: Configure pause time to 0xffff when tx flow control enabled
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (106 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 067/133] iwlwifi: mvm: simplify bufferable MMPDU check Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 079/133] xfs: fix incorrect log_flushed on fsync Ben Hutchings
                   ` (25 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, David S. Miller, Nisar Sayed

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Nisar Sayed <Nisar.Sayed@microchip.com>

commit 9c0827317f235865ae421293f8aecf6cb327a63e upstream.

Configure pause time to 0xffff when tx flow control enabled

Set pause time to 0xffff in the pause frame to indicate the
partner to stop sending the packets. When RX buffer frees up,
the device sends pause frame with pause time zero for partner to
resume transmission.

Fixes: 2f7ca802bdae ("Add SMSC LAN9500 USB2.0 10/100 ethernet adapter driver")
Signed-off-by: Nisar Sayed <Nisar.Sayed@microchip.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/net/usb/smsc95xx.c | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

--- a/drivers/net/usb/smsc95xx.c
+++ b/drivers/net/usb/smsc95xx.c
@@ -516,7 +516,7 @@ static void smsc95xx_set_multicast(struc
 static int smsc95xx_phy_update_flowcontrol(struct usbnet *dev, u8 duplex,
 					   u16 lcladv, u16 rmtadv)
 {
-	u32 flow, afc_cfg = 0;
+	u32 flow = 0, afc_cfg;
 
 	int ret = smsc95xx_read_reg(dev, AFC_CFG, &afc_cfg);
 	if (ret < 0)
@@ -527,20 +527,19 @@ static int smsc95xx_phy_update_flowcontr
 
 		if (cap & FLOW_CTRL_RX)
 			flow = 0xFFFF0002;
-		else
-			flow = 0;
 
-		if (cap & FLOW_CTRL_TX)
+		if (cap & FLOW_CTRL_TX) {
 			afc_cfg |= 0xF;
-		else
+			flow |= 0xFFFF0000;
+		} else {
 			afc_cfg &= ~0xF;
+		}
 
 		netif_dbg(dev, link, dev->net, "rx pause %s, tx pause %s\n",
 				   cap & FLOW_CTRL_RX ? "enabled" : "disabled",
 				   cap & FLOW_CTRL_TX ? "enabled" : "disabled");
 	} else {
 		netif_dbg(dev, link, dev->net, "half duplex\n");
-		flow = 0;
 		afc_cfg |= 0xF;
 	}
 

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 121/133] USB: serial: console: fix use-after-free after failed setup
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (121 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 062/133] IB/usnic: check for allocation failure Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 123/133] media: imon: Fix null-ptr-deref in imon_probe Ben Hutchings
                   ` (10 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Johan Hovold, Greg Kroah-Hartman

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Johan Hovold <johan@kernel.org>

commit 299d7572e46f98534033a9e65973f13ad1ce9047 upstream.

Make sure to reset the USB-console port pointer when console setup fails
in order to avoid having the struct usb_serial be prematurely freed by
the console code when the device is later disconnected.

Fixes: 73e487fdb75f ("[PATCH] USB console: fix disconnection issues")
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/usb/serial/console.c | 1 +
 1 file changed, 1 insertion(+)

--- a/drivers/usb/serial/console.c
+++ b/drivers/usb/serial/console.c
@@ -187,6 +187,7 @@ static int usb_console_setup(struct cons
 	tty_kref_put(tty);
  reset_open_count:
 	port->port.count = 0;
+	info->port = NULL;
 	usb_autopm_put_interface(serial->interface);
  error_get_interface:
 	usb_serial_put(serial);

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 089/133] MIPS: BCM63XX: allow NULL clock for clk_get_rate
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (111 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 130/133] VSOCK: Fix lockdep issue Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 117/133] IB/mlx4: fix sprintf format warning Ben Hutchings
                   ` (20 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Mathias Kresin, linux-mips, Jonas Gorski, Ralf Baechle,
	bcm-kernel-feedback-list, Florian Fainelli, James Hogan

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Jonas Gorski <jonas.gorski@gmail.com>

commit 1b495faec231980b6c719994b24044ccc04ae06c upstream.

Make the behaviour of clk_get_rate consistent with common clk's
clk_get_rate by accepting NULL clocks as parameter. Some device
drivers rely on this, and will cause an OOPS otherwise.

Fixes: e7300d04bd08 ("MIPS: BCM63xx: Add support for the Broadcom BCM63xx family of SOCs.")
Reported-by: Mathias Kresin <dev@kresin.me>
Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Cc: bcm-kernel-feedback-list@broadcom.com
Cc: James Hogan <james.hogan@imgtec.com>
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/16776/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 arch/mips/bcm63xx/clk.c | 3 +++
 1 file changed, 3 insertions(+)

--- a/arch/mips/bcm63xx/clk.c
+++ b/arch/mips/bcm63xx/clk.c
@@ -335,6 +335,9 @@ EXPORT_SYMBOL(clk_disable);
 
 unsigned long clk_get_rate(struct clk *clk)
 {
+	if (!clk)
+		return 0;
+
 	return clk->rate;
 }
 

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 093/133] MIPS: microMIPS: Fix detection of addiusp instruction
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (116 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 114/133] Input: xpad - validate USB endpoint type during probe Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 098/133] bcache: fix sequential large write IO bypass Ben Hutchings
                   ` (15 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Ingo Molnar, Paul Burton, Ralf Baechle, Matt Redfearn,
	linux-mips, Marcin Nowakowski

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Matt Redfearn <matt.redfearn@imgtec.com>

commit b332fec0489295ee7a0aab4a89bd7257cd126f7f upstream.

The addiusp instruction uses the pool16d opcode, with bit 0 of the
immediate set. The test for the addiusp opcode erroneously did a logical
and of the immediate with mm_addiusp_func, which has value 1, so this
test always passes when the immediate is non-zero.

Fix the test by replacing the logical and with a bitwise and.

Fixes: 34c2f668d0f6 ("MIPS: microMIPS: Add unaligned access support.")
Signed-off-by: Matt Redfearn <matt.redfearn@imgtec.com>
Cc: Marcin Nowakowski <marcin.nowakowski@imgtec.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Paul Burton <paul.burton@imgtec.com>
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/16954/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 arch/mips/kernel/process.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/arch/mips/kernel/process.c
+++ b/arch/mips/kernel/process.c
@@ -353,7 +353,7 @@ static inline int is_sp_move_ins(union m
 	 */
 	if (mm_insn_16bit(ip->halfword[1])) {
 		return (ip->mm16_r3_format.opcode == mm_pool16d_op &&
-			ip->mm16_r3_format.simmediate && mm_addiusp_func) ||
+			ip->mm16_r3_format.simmediate & mm_addiusp_func) ||
 		       (ip->mm16_r5_format.opcode == mm_pool16d_op &&
 			ip->mm16_r5_format.rt == 29);
 	}

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 072/133] powerpc: Fix DAR reporting when alignment handler faults
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (58 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 050/133] rtc: sa1100: fix unbalanced clk_prepare_enable/clk_disable_unprepare Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 106/133] tracing: Apply trace_clock changes to instance max buffer Ben Hutchings
                   ` (73 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Paul Mackerras, Michael Ellerman

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Michael Ellerman <mpe@ellerman.id.au>

commit f9effe925039cf54489b5c04e0d40073bb3a123d upstream.

Anton noticed that if we fault part way through emulating an unaligned
instruction, we don't update the DAR to reflect that.

The DAR value is eventually reported back to userspace as the address
in the SEGV signal, and if userspace is using that value to demand
fault then it can be confused by us not setting the value correctly.

This patch is ugly as hell, but is intended to be the minimal fix and
back ports easily.

Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Reviewed-by: Paul Mackerras <paulus@ozlabs.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 arch/powerpc/kernel/align.c | 119 +++++++++++++++++++++++++++-----------------
 1 file changed, 74 insertions(+), 45 deletions(-)

--- a/arch/powerpc/kernel/align.c
+++ b/arch/powerpc/kernel/align.c
@@ -236,6 +236,28 @@ static int emulate_dcbz(struct pt_regs *
 
 #define SWIZ_PTR(p)		((unsigned char __user *)((p) ^ swiz))
 
+#define __get_user_or_set_dar(_regs, _dest, _addr)		\
+	({							\
+		int rc = 0;					\
+		typeof(_addr) __addr = (_addr);			\
+		if (__get_user_inatomic(_dest, __addr)) {	\
+			_regs->dar = (unsigned long)__addr;	\
+			rc = -EFAULT;				\
+		}						\
+		rc;						\
+	})
+
+#define __put_user_or_set_dar(_regs, _src, _addr)		\
+	({							\
+		int rc = 0;					\
+		typeof(_addr) __addr = (_addr);			\
+		if (__put_user_inatomic(_src, __addr)) {	\
+			_regs->dar = (unsigned long)__addr;	\
+			rc = -EFAULT;				\
+		}						\
+		rc;						\
+	})
+
 static int emulate_multiple(struct pt_regs *regs, unsigned char __user *addr,
 			    unsigned int reg, unsigned int nb,
 			    unsigned int flags, unsigned int instr,
@@ -264,9 +286,10 @@ static int emulate_multiple(struct pt_re
 		} else {
 			unsigned long pc = regs->nip ^ (swiz & 4);
 
-			if (__get_user_inatomic(instr,
-						(unsigned int __user *)pc))
+			if (__get_user_or_set_dar(regs, instr,
+						  (unsigned int __user *)pc))
 				return -EFAULT;
+
 			if (swiz == 0 && (flags & SW))
 				instr = cpu_to_le32(instr);
 			nb = (instr >> 11) & 0x1f;
@@ -310,31 +333,31 @@ static int emulate_multiple(struct pt_re
 			       ((nb0 + 3) / 4) * sizeof(unsigned long));
 
 		for (i = 0; i < nb; ++i, ++p)
-			if (__get_user_inatomic(REG_BYTE(rptr, i ^ bswiz),
-						SWIZ_PTR(p)))
+			if (__get_user_or_set_dar(regs, REG_BYTE(rptr, i ^ bswiz),
+						  SWIZ_PTR(p)))
 				return -EFAULT;
 		if (nb0 > 0) {
 			rptr = &regs->gpr[0];
 			addr += nb;
 			for (i = 0; i < nb0; ++i, ++p)
-				if (__get_user_inatomic(REG_BYTE(rptr,
-								 i ^ bswiz),
-							SWIZ_PTR(p)))
+				if (__get_user_or_set_dar(regs,
+							  REG_BYTE(rptr, i ^ bswiz),
+							  SWIZ_PTR(p)))
 					return -EFAULT;
 		}
 
 	} else {
 		for (i = 0; i < nb; ++i, ++p)
-			if (__put_user_inatomic(REG_BYTE(rptr, i ^ bswiz),
-						SWIZ_PTR(p)))
+			if (__put_user_or_set_dar(regs, REG_BYTE(rptr, i ^ bswiz),
+						  SWIZ_PTR(p)))
 				return -EFAULT;
 		if (nb0 > 0) {
 			rptr = &regs->gpr[0];
 			addr += nb;
 			for (i = 0; i < nb0; ++i, ++p)
-				if (__put_user_inatomic(REG_BYTE(rptr,
-								 i ^ bswiz),
-							SWIZ_PTR(p)))
+				if (__put_user_or_set_dar(regs,
+							  REG_BYTE(rptr, i ^ bswiz),
+							  SWIZ_PTR(p)))
 					return -EFAULT;
 		}
 	}
@@ -346,29 +369,32 @@ static int emulate_multiple(struct pt_re
  * Only POWER6 has these instructions, and it does true little-endian,
  * so we don't need the address swizzling.
  */
-static int emulate_fp_pair(unsigned char __user *addr, unsigned int reg,
-			   unsigned int flags)
+static int emulate_fp_pair(struct pt_regs *regs, unsigned char __user *addr,
+			   unsigned int reg, unsigned int flags)
 {
 	char *ptr0 = (char *) &current->thread.TS_FPR(reg);
 	char *ptr1 = (char *) &current->thread.TS_FPR(reg+1);
-	int i, ret, sw = 0;
+	int i, sw = 0;
 
 	if (reg & 1)
 		return 0;	/* invalid form: FRS/FRT must be even */
 	if (flags & SW)
 		sw = 7;
-	ret = 0;
+
 	for (i = 0; i < 8; ++i) {
 		if (!(flags & ST)) {
-			ret |= __get_user(ptr0[i^sw], addr + i);
-			ret |= __get_user(ptr1[i^sw], addr + i + 8);
+			if (__get_user_or_set_dar(regs, ptr0[i^sw], addr + i))
+				return -EFAULT;
+			if (__get_user_or_set_dar(regs, ptr1[i^sw], addr + i + 8))
+				return -EFAULT;
 		} else {
-			ret |= __put_user(ptr0[i^sw], addr + i);
-			ret |= __put_user(ptr1[i^sw], addr + i + 8);
+			if (__put_user_or_set_dar(regs, ptr0[i^sw], addr + i))
+				return -EFAULT;
+			if (__put_user_or_set_dar(regs, ptr1[i^sw], addr + i + 8))
+				return -EFAULT;
 		}
 	}
-	if (ret)
-		return -EFAULT;
+
 	return 1;	/* exception handled and fixed up */
 }
 
@@ -378,24 +404,27 @@ static int emulate_lq_stq(struct pt_regs
 {
 	char *ptr0 = (char *)&regs->gpr[reg];
 	char *ptr1 = (char *)&regs->gpr[reg+1];
-	int i, ret, sw = 0;
+	int i, sw = 0;
 
 	if (reg & 1)
 		return 0;	/* invalid form: GPR must be even */
 	if (flags & SW)
 		sw = 7;
-	ret = 0;
+
 	for (i = 0; i < 8; ++i) {
 		if (!(flags & ST)) {
-			ret |= __get_user(ptr0[i^sw], addr + i);
-			ret |= __get_user(ptr1[i^sw], addr + i + 8);
+			if (__get_user_or_set_dar(regs, ptr0[i^sw], addr + i))
+				return -EFAULT;
+			if (__get_user_or_set_dar(regs, ptr1[i^sw], addr + i + 8))
+				return -EFAULT;
 		} else {
-			ret |= __put_user(ptr0[i^sw], addr + i);
-			ret |= __put_user(ptr1[i^sw], addr + i + 8);
+			if (__put_user_or_set_dar(regs, ptr0[i^sw], addr + i))
+				return -EFAULT;
+			if (__put_user_or_set_dar(regs, ptr1[i^sw], addr + i + 8))
+				return -EFAULT;
 		}
 	}
-	if (ret)
-		return -EFAULT;
+
 	return 1;	/* exception handled and fixed up */
 }
 #endif /* CONFIG_PPC64 */
@@ -688,9 +717,14 @@ static int emulate_vsx(unsigned char __u
 	for (j = 0; j < length; j += elsize) {
 		for (i = 0; i < elsize; ++i) {
 			if (flags & ST)
-				ret |= __put_user(ptr[i^sw], addr + i);
+				ret = __put_user_or_set_dar(regs, ptr[i^sw],
+							    addr + i);
 			else
-				ret |= __get_user(ptr[i^sw], addr + i);
+				ret = __get_user_or_set_dar(regs, ptr[i^sw],
+							    addr + i);
+
+			if (ret)
+				return ret;
 		}
 		ptr  += elsize;
 #ifdef __LITTLE_ENDIAN__
@@ -740,7 +774,7 @@ int fix_alignment(struct pt_regs *regs)
 	unsigned int dsisr;
 	unsigned char __user *addr;
 	unsigned long p, swiz;
-	int ret, i;
+	int i;
 	union data {
 		u64 ll;
 		double dd;
@@ -923,7 +957,7 @@ int fix_alignment(struct pt_regs *regs)
 		if (flags & F) {
 			/* Special case for 16-byte FP loads and stores */
 			PPC_WARN_ALIGNMENT(fp_pair, regs);
-			return emulate_fp_pair(addr, reg, flags);
+			return emulate_fp_pair(regs, addr, reg, flags);
 		} else {
 #ifdef CONFIG_PPC64
 			/* Special case for 16-byte loads and stores */
@@ -953,15 +987,12 @@ int fix_alignment(struct pt_regs *regs)
 		}
 
 		data.ll = 0;
-		ret = 0;
 		p = (unsigned long)addr;
 
 		for (i = 0; i < nb; i++)
-			ret |= __get_user_inatomic(data.v[start + i],
-						   SWIZ_PTR(p++));
-
-		if (unlikely(ret))
-			return -EFAULT;
+			if (__get_user_or_set_dar(regs, data.v[start + i],
+						  SWIZ_PTR(p++)))
+				return -EFAULT;
 
 	} else if (flags & F) {
 		data.ll = current->thread.TS_FPR(reg);
@@ -1031,15 +1062,13 @@ int fix_alignment(struct pt_regs *regs)
 			break;
 		}
 
-		ret = 0;
 		p = (unsigned long)addr;
 
 		for (i = 0; i < nb; i++)
-			ret |= __put_user_inatomic(data.v[start + i],
-						   SWIZ_PTR(p++));
+			if (__put_user_or_set_dar(regs, data.v[start + i],
+						  SWIZ_PTR(p++)))
+				return -EFAULT;
 
-		if (unlikely(ret))
-			return -EFAULT;
 	} else if (flags & F)
 		current->thread.TS_FPR(reg) = data.ll;
 	else

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 067/133] iwlwifi: mvm: simplify bufferable MMPDU check
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (105 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 101/133] bcache: Correct return value for sysfs attach errors Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 115/133] smsc95xx: Configure pause time to 0xffff when tx flow control enabled Ben Hutchings
                   ` (26 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Luca Coelho, Johannes Berg

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Johannes Berg <johannes.berg@intel.com>

commit 7426ee33a29b3215357986378c77bb9949518154 upstream.

There's no need to spell out the cases when we can just
use ieee80211_is_bufferable_mmpdu().

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
[bwh: Backported to 3.16: adjust filename]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/net/wireless/iwlwifi/mvm/mac80211.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

--- a/drivers/net/wireless/iwlwifi/mvm/mac80211.c
+++ b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
@@ -488,9 +488,7 @@ static void iwl_mvm_mac_tx(struct ieee80
 	/* treat non-bufferable MMPDUs as broadcast if sta is sleeping */
 	if (unlikely(info->flags & IEEE80211_TX_CTL_NO_PS_BUFFER &&
 		     ieee80211_is_mgmt(hdr->frame_control) &&
-		     !ieee80211_is_deauth(hdr->frame_control) &&
-		     !ieee80211_is_disassoc(hdr->frame_control) &&
-		     !ieee80211_is_action(hdr->frame_control)))
+		     !ieee80211_is_bufferable_mmpdu(hdr->frame_control)))
 		sta = NULL;
 
 	if (sta) {

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 066/133] USB: serial: option: add support for D-Link DWM-157 C1
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (80 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 126/133] net: qmi_wwan: fix divide by 0 on bad descriptors Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 086/133] mac80211: flush hw_roc_start work before cancelling the ROC Ben Hutchings
                   ` (51 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Maciej S. Szmigiero, Johan Hovold

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: "Maciej S. Szmigiero" <mail@maciej.szmigiero.name>

commit 169e86546f5712179709de23cd64bbb15f199fab upstream.

This commit adds support (an ID, really) for D-Link DWM-157 hardware
version C1 USB modem to option driver.

According to manufacturer-provided Windows INF file the device has four
serial ports:
"D-Link HSPA+DataCard Diagnostics Interface" (interface 2; modem port),
"D-Link HSPA+DataCard NMEA Device" (interface 3),
"D-Link HSPA+DataCard Speech Port" (interface 4),
"D-Link HSPA+DataCard Debug Port" (interface 5).

usb-devices output:
T:  Bus=05 Lev=01 Prnt=01 Port=04 Cnt=01 Dev#=  3 Spd=480 MxCh= 0
D:  Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
P:  Vendor=2001 ProdID=7d0e Rev=03.00
S:  Manufacturer=D-Link,Inc
S:  Product=D-Link DWM-157
C:  #Ifs= 7 Cfg#= 1 Atr=a0 MxPwr=500mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=0e Prot=00 Driver=cdc_mbim
I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=02 Prot=01 Driver=option
I:  If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
I:  If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
I:  If#= 5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
I:  If#= 6 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage

Signed-off-by: Maciej S. Szmigiero <mail@maciej.szmigiero.name>
Signed-off-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/usb/serial/option.c | 1 +
 1 file changed, 1 insertion(+)

--- a/drivers/usb/serial/option.c
+++ b/drivers/usb/serial/option.c
@@ -2034,6 +2034,7 @@ static const struct usb_device_id option
 	{ USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d03, 0xff, 0x02, 0x01) },
 	{ USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x7d03, 0xff, 0x00, 0x00) },
 	{ USB_DEVICE_INTERFACE_CLASS(0x2001, 0x7d04, 0xff) },			/* D-Link DWM-158 */
+	{ USB_DEVICE_INTERFACE_CLASS(0x2001, 0x7d0e, 0xff) },			/* D-Link DWM-157 C1 */
 	{ USB_DEVICE_INTERFACE_CLASS(0x2001, 0x7e19, 0xff),			/* D-Link DWM-221 B1 */
 	  .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
 	{ USB_DEVICE_INTERFACE_CLASS(0x2001, 0x7e35, 0xff),			/* D-Link DWM-222 */

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 116/133] KVM: SVM: Add a missing 'break' statement
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (90 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 068/133] iwlwifi: mvm: Avoid deferring non bufferable frames Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 074/133] xen/events: events_fifo: Don't use {get,put}_cpu() in xen_evtchn_fifo_init() Ben Hutchings
                   ` (41 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Radim Krčmář, David Hildenbrand,
	Jan H. Schönherr

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Jan H. Schönherr <jschoenh@amazon.de>

commit 49a8afca386ee1775519a4aa80f8e121bd227dd4 upstream.

Signed-off-by: Jan H. Schönherr <jschoenh@amazon.de>
Fixes: f6511935f424 ("KVM: SVM: Add checks for IO instructions")
Reviewed-by: David Hildenbrand <david@redhat.com>
Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 arch/x86/kvm/svm.c | 1 +
 1 file changed, 1 insertion(+)

--- a/arch/x86/kvm/svm.c
+++ b/arch/x86/kvm/svm.c
@@ -4248,6 +4248,7 @@ static int svm_check_intercept(struct kv
 		 */
 		if (info->rep_prefix != REPE_PREFIX)
 			goto out;
+		break;
 	case SVM_EXIT_IOIO: {
 		u64 exit_info;
 		u32 bytes;

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 084/133] mfd: omap-usb-tll: Fix register offsets
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (126 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 054/133] m68k: allow NULL clock for clk_get_rate Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 091/133] MIPS: ralink: allow NULL clock for clk_get_rate Ben Hutchings
                   ` (5 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Lee Jones, Arnd Bergmann

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit 993dc737c0996c163325961fb62a0ed9fd0308b4 upstream.

gcc-8 notices that the register number calculation is wrong
when the offset is an 'u8' but the number is larger than 256:

drivers/mfd/omap-usb-tll.c: In function 'omap_tll_init':
drivers/mfd/omap-usb-tll.c:90:46: error: overflow in conversion from 'int' to 'u8 {aka unsigned char}' chages value from 'i * 256 + 2070' to '22' [-Werror=overflow]

This addresses it by always using a 32-bit offset number for
the register. This is apparently an old problem that previous
compilers did not find.

Fixes: 16fa3dc75c22 ("mfd: omap-usb-tll: HOST TLL platform driver")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/mfd/omap-usb-tll.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- a/drivers/mfd/omap-usb-tll.c
+++ b/drivers/mfd/omap-usb-tll.c
@@ -129,12 +129,12 @@ static inline u32 usbtll_read(void __iom
 	return readl_relaxed(base + reg);
 }
 
-static inline void usbtll_writeb(void __iomem *base, u8 reg, u8 val)
+static inline void usbtll_writeb(void __iomem *base, u32 reg, u8 val)
 {
 	writeb_relaxed(val, base + reg);
 }
 
-static inline u8 usbtll_readb(void __iomem *base, u8 reg)
+static inline u8 usbtll_readb(void __iomem *base, u32 reg)
 {
 	return readb_relaxed(base + reg);
 }

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 101/133] bcache: Correct return value for sysfs attach errors
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (104 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 122/133] [media] cx231xx-cards: fix NULL-deref on missing association descriptor Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 067/133] iwlwifi: mvm: simplify bufferable MMPDU check Ben Hutchings
                   ` (27 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Coly Li, Tony Asleson, Jens Axboe

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Tony Asleson <tasleson@redhat.com>

commit 77fa100f27475d08a569b9d51c17722130f089e7 upstream.

If you encounter any errors in bch_cached_dev_attach it will return
a negative error code.  The variable 'v' which stores the result is
unsigned, thus user space sees a very large value returned for bytes
written which can cause incorrect user space behavior.  Utilize 1
signed variable to use throughout the function to preserve error return
capability.

Signed-off-by: Tony Asleson <tasleson@redhat.com>
Acked-by: Coly Li <colyli@suse.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/md/bcache/sysfs.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- a/drivers/md/bcache/sysfs.c
+++ b/drivers/md/bcache/sysfs.c
@@ -191,7 +191,7 @@ STORE(__cached_dev)
 {
 	struct cached_dev *dc = container_of(kobj, struct cached_dev,
 					     disk.kobj);
-	unsigned v = size;
+	ssize_t v = size;
 	struct cache_set *c;
 	struct kobj_uevent_env *env;
 
@@ -226,7 +226,7 @@ STORE(__cached_dev)
 		bch_cached_dev_run(dc);
 
 	if (attr == &sysfs_cache_mode) {
-		ssize_t v = bch_read_string_list(buf, bch_cache_modes + 1);
+		v = bch_read_string_list(buf, bch_cache_modes + 1);
 
 		if (v < 0)
 			return v;

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 060/133] ACPI, APEI, EINJ: Subtract any matching Register Region from Trigger resources
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (52 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 071/133] powerpc/44x: Fix mask and shift to zero bug Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 112/133] Input: xpad - add support for Xbox One controllers Ben Hutchings
                   ` (79 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Rafael J. Wysocki, Yazen Ghannam, Tony Luck

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Yazen Ghannam <yazen.ghannam@amd.com>

commit 1d5d820b8fe83b5f859d1ebb028a09ada426447e upstream.

ACPI defines a number of instructions to use for triggering errors. However
we are currently removing the address resources from the trigger resources
for only the WRITE_REGISTER_VALUE instruction. This leads to a resource
conflict for any other valid instruction.

Check that the instruction is less than or equal to the
WRITE_REGISTER_VALUE instruction. This allows all valid memory access
instructions and protects against invalid instructions.

Fixes: b4e008dc53a3 (ACPI, APEI, EINJ, Refine the fix of resource conflict)
Signed-off-by: Yazen Ghannam <yazen.ghannam@amd.com>
Acked-by: Tony Luck <tony.luck@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/acpi/apei/einj.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/acpi/apei/einj.c
+++ b/drivers/acpi/apei/einj.c
@@ -285,7 +285,7 @@ static struct acpi_generic_address *einj
 		((char *)trigger_tab + sizeof(struct acpi_einj_trigger));
 	for (i = 0; i < trigger_tab->entry_count; i++) {
 		if (entry->action == ACPI_EINJ_TRIGGER_ERROR &&
-		entry->instruction == ACPI_EINJ_WRITE_REGISTER_VALUE &&
+		entry->instruction <= ACPI_EINJ_WRITE_REGISTER_VALUE &&
 		entry->register_region.space_id ==
 			ACPI_ADR_SPACE_SYSTEM_MEMORY &&
 		(entry->register_region.address & param2) == (param1 & param2))

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 102/133] bcache: fix crash on shutdown in passthrough mode
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (129 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 057/133] usb: quirks: add delay init quirk for Corsair Strafe RGB keyboard Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 092/133] MIPS: Handle non word sized instructions when examining frame Ben Hutchings
                   ` (2 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Slava Pestov

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Slava Pestov <sp@daterainc.com>

commit a664d0f05a2ec02c8f042db536d84d15d6e19e81 upstream.

We never started the writeback thread in this case, so don't stop it.
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/md/bcache/super.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

--- a/drivers/md/bcache/super.c
+++ b/drivers/md/bcache/super.c
@@ -1073,7 +1073,8 @@ static void cached_dev_free(struct closu
 	struct cached_dev *dc = container_of(cl, struct cached_dev, disk.cl);
 
 	cancel_delayed_work_sync(&dc->writeback_rate_update);
-	kthread_stop(dc->writeback_thread);
+	if (!IS_ERR_OR_NULL(dc->writeback_thread))
+		kthread_stop(dc->writeback_thread);
 
 	mutex_lock(&bch_register_lock);
 

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 117/133] IB/mlx4: fix sprintf format warning
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (112 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 089/133] MIPS: BCM63XX: allow NULL clock for clk_get_rate Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 128/133] mac80211: don't compare TKIP TX MIC key in reinstall prevention Ben Hutchings
                   ` (19 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Linus Torvalds, Leon Romanovsky, Arnd Bergmann

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Arnd Bergmann <arnd@arndb.de>

commit d0dbf771309fecd73f4ac1566c1400cb12807ee2 upstream.

gcc-7 points out that a negative port_num value would overflow the
string buffer:

  drivers/infiniband/hw/mlx4/sysfs.c: In function 'mlx4_ib_device_register_sysfs':
  drivers/infiniband/hw/mlx4/sysfs.c:251:16: error: 'sprintf' may write a terminating nul past the end of the destination [-Werror=format-overflow=]
  drivers/infiniband/hw/mlx4/sysfs.c:251:2: note: 'sprintf' output between 2 and 11 bytes into a destination of size 10
  drivers/infiniband/hw/mlx4/sysfs.c:303:17: error: 'sprintf' may write a terminating nul past the end of the destination [-Werror=format-overflow=]
  drivers/infiniband/hw/mlx4/sysfs.c:303:3: note: 'sprintf' output between 2 and 11 bytes into a destination of size 10

While we should be able to assume that port_num is positive here, making
the buffer one byte longer has no downsides and avoids the warning.

Fixes: c1e7e466120b ("IB/mlx4: Add iov directory in sysfs under the ib device")
Link: http://lkml.kernel.org/r/20170714120720.906842-23-arnd@arndb.de
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Reviewed-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/infiniband/hw/mlx4/sysfs.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/infiniband/hw/mlx4/sysfs.c
+++ b/drivers/infiniband/hw/mlx4/sysfs.c
@@ -241,7 +241,7 @@ void del_sysfs_port_mcg_attr(struct mlx4
 static int add_port_entries(struct mlx4_ib_dev *device, int port_num)
 {
 	int i;
-	char buff[10];
+	char buff[11];
 	struct mlx4_ib_iov_port *port = NULL;
 	int ret = 0 ;
 	struct ib_port_attr attr;

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 111/133] Input: ucb1400_ts - fix suspend and resume handling
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (98 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 131/133] VSOCK: Detach QP check should filter out non matching QPs Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 076/133] md/bitmap: disable bitmap_resize for file-backed bitmaps Ben Hutchings
                   ` (33 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Anton Volkov, Dmitry Torokhov

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Dmitry Torokhov <dmitry.torokhov@gmail.com>

commit 39467fc1054a91efa697162a94e5b0e1a4b7b580 upstream.

Instead of stopping the touchscreen we were starting it in suspend, and
disabling it in resume.

Fixes: c899afedf168 ("Input: ucb1400_ts - convert to threaded IRQ")
Reported-by: Anton Volkov <avolkov@ispras.ru>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/input/touchscreen/ucb1400_ts.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- a/drivers/input/touchscreen/ucb1400_ts.c
+++ b/drivers/input/touchscreen/ucb1400_ts.c
@@ -415,7 +415,7 @@ static int ucb1400_ts_suspend(struct dev
 	mutex_lock(&idev->mutex);
 
 	if (idev->users)
-		ucb1400_ts_start(ucb);
+		ucb1400_ts_stop(ucb);
 
 	mutex_unlock(&idev->mutex);
 	return 0;
@@ -429,7 +429,7 @@ static int ucb1400_ts_resume(struct devi
 	mutex_lock(&idev->mutex);
 
 	if (idev->users)
-		ucb1400_ts_stop(ucb);
+		ucb1400_ts_start(ucb);
 
 	mutex_unlock(&idev->mutex);
 	return 0;

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 054/133] m68k: allow NULL clock for clk_get_rate
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (125 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 129/133] VSOCK: sock_put wasn't safe to call in interrupt context Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 084/133] mfd: omap-usb-tll: Fix register offsets Ben Hutchings
                   ` (6 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Mathias Kresin, linux-m68k, Geert Uytterhoeven,
	Greg Ungerer, Jonas Gorski

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Jonas Gorski <jonas.gorski@gmail.com>

commit 94b282267c2f3af725b154c91275ed374c1f11de upstream.

Make the behaviour of clk_get_rate consistent with common clk's
clk_get_rate by accepting NULL clocks as parameter. Some device
drivers rely on this, and will cause an OOPS otherwise.

Fixes: facdf0ed4f59 ("m68knommu: introduce basic clk infrastructure")
Cc: Greg Ungerer <gerg@linux-m68k.org>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: linux-m68k@lists.linux-m68k.org
Cc: linux-kernel@vger.kernel.org
Reported-by: Mathias Kresin <dev@kresin.me>
Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
Signed-off-by: Greg Ungerer <gerg@linux-m68k.org>
[bwh: Backported to 3.16: adjust filename]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 arch/m68k/platform/coldfire/clk.c | 3 +++
 1 file changed, 3 insertions(+)

--- a/arch/m68k/platform/coldfire/clk.c
+++ b/arch/m68k/platform/coldfire/clk.c
@@ -117,6 +117,9 @@ EXPORT_SYMBOL(clk_put);
 
 unsigned long clk_get_rate(struct clk *clk)
 {
+	if (!clk)
+		return 0;
+
 	return clk->rate;
 }
 EXPORT_SYMBOL(clk_get_rate);

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 080/133] Revert "net: use lib/percpu_counter API for fragmentation mem accounting"
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (64 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 064/133] net/mlx4_core: Make explicit conversion to 64bit value Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 085/133] mac80211_hwsim: Use proper TX power Ben Hutchings
                   ` (67 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Jesper Dangaard Brouer, David S. Miller, Florian Westphal

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Jesper Dangaard Brouer <brouer@redhat.com>

commit fb452a1aa3fd4034d7999e309c5466ff2d7005aa upstream.

This reverts commit 6d7b857d541ecd1d9bd997c97242d4ef94b19de2.

There is a bug in fragmentation codes use of the percpu_counter API,
that can cause issues on systems with many CPUs.

The frag_mem_limit() just reads the global counter (fbc->count),
without considering other CPUs can have upto batch size (130K) that
haven't been subtracted yet.  Due to the 3MBytes lower thresh limit,
this become dangerous at >=24 CPUs (3*1024*1024/130000=24).

The correct API usage would be to use __percpu_counter_compare() which
does the right thing, and takes into account the number of (online)
CPUs and batch size, to account for this and call __percpu_counter_sum()
when needed.

We choose to revert the use of the lib/percpu_counter API for frag
memory accounting for several reasons:

1) On systems with CPUs > 24, the heavier fully locked
   __percpu_counter_sum() is always invoked, which will be more
   expensive than the atomic_t that is reverted to.

Given systems with more than 24 CPUs are becoming common this doesn't
seem like a good option.  To mitigate this, the batch size could be
decreased and thresh be increased.

2) The add_frag_mem_limit+sub_frag_mem_limit pairs happen on the RX
   CPU, before SKBs are pushed into sockets on remote CPUs.  Given
   NICs can only hash on L2 part of the IP-header, the NIC-RXq's will
   likely be limited.  Thus, a fair chance that atomic add+dec happen
   on the same CPU.

Revert note that commit 1d6119baf061 ("net: fix percpu memory leaks")
removed init_frag_mem_limit() and instead use inet_frags_init_net().
After this revert, inet_frags_uninit_net() becomes empty.

Fixes: 6d7b857d541e ("net: use lib/percpu_counter API for fragmentation mem accounting")
Fixes: 1d6119baf061 ("net: fix percpu memory leaks")
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
Acked-by: Florian Westphal <fw@strlen.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
[bwh: Backported to 3.16: adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 include/net/inet_frag.h  | 30 +++++++++---------------------
 net/ipv4/inet_fragment.c |  4 +---
 2 files changed, 10 insertions(+), 24 deletions(-)

--- a/include/net/inet_frag.h
+++ b/include/net/inet_frag.h
@@ -1,18 +1,13 @@
 #ifndef __NET_FRAG_H__
 #define __NET_FRAG_H__
 
-#include <linux/percpu_counter.h>
-
 struct netns_frags {
 	int			nqueues;
 	struct list_head	lru_list;
 	spinlock_t		lru_lock;
 
-	/* The percpu_counter "mem" need to be cacheline aligned.
-	 *  mem.count must not share cacheline with other writers
-	 */
-	struct percpu_counter   mem ____cacheline_aligned_in_smp;
-
+	/* Keep atomic mem on separate cachelines in structs that include it */
+	atomic_t		mem ____cacheline_aligned_in_smp;
 	/* sysctls */
 	int			timeout;
 	int			high_thresh;
@@ -104,42 +99,29 @@ static inline void inet_frag_put(struct
 
 /* Memory Tracking Functions. */
 
-/* The default percpu_counter batch size is not big enough to scale to
- * fragmentation mem acct sizes.
- * The mem size of a 64K fragment is approx:
- *  (44 fragments * 2944 truesize) + frag_queue struct(200) = 129736 bytes
- */
-static unsigned int frag_percpu_counter_batch = 130000;
-
 static inline int frag_mem_limit(struct netns_frags *nf)
 {
-	return percpu_counter_read(&nf->mem);
+	return atomic_read(&nf->mem);
 }
 
 static inline void sub_frag_mem_limit(struct inet_frag_queue *q, int i)
 {
-	__percpu_counter_add(&q->net->mem, -i, frag_percpu_counter_batch);
+	atomic_sub(i, &q->net->mem);
 }
 
 static inline void add_frag_mem_limit(struct inet_frag_queue *q, int i)
 {
-	__percpu_counter_add(&q->net->mem, i, frag_percpu_counter_batch);
+	atomic_add(i, &q->net->mem);
 }
 
 static inline void init_frag_mem_limit(struct netns_frags *nf)
 {
-	percpu_counter_init(&nf->mem, 0);
+	atomic_set(&nf->mem, 0);
 }
 
 static inline int sum_frag_mem_limit(struct netns_frags *nf)
 {
-	int res;
-
-	local_bh_disable();
-	res = percpu_counter_sum_positive(&nf->mem);
-	local_bh_enable();
-
-	return res;
+	return atomic_read(&nf->mem);
 }
 
 static inline void inet_frag_lru_move(struct inet_frag_queue *q)
--- a/net/ipv4/inet_fragment.c
+++ b/net/ipv4/inet_fragment.c
@@ -122,8 +122,6 @@ void inet_frags_exit_net(struct netns_fr
 	local_bh_disable();
 	inet_frag_evictor(nf, f, true);
 	local_bh_enable();
-
-	percpu_counter_destroy(&nf->mem);
 }
 EXPORT_SYMBOL(inet_frags_exit_net);
 

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 125/133] net: cdc_ether: fix divide by 0 on bad descriptors
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (101 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 090/133] MIPS: Loongson 2F: allow NULL clock for clk_get_rate Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 118/133] KVM: async_pf: Fix #DF due to inject "Page not Present" and "Page Ready" exceptions simultaneously Ben Hutchings
                   ` (30 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, David S. Miller, Bjørn Mork, Oliver Neukum

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Bjørn Mork <bjorn@mork.no>

commit 2cb80187ba065d7decad7c6614e35e07aec8a974 upstream.

Setting dev->hard_mtu to 0 will cause a divide error in
usbnet_probe. Protect against devices with bogus CDC Ethernet
functional descriptors by ignoring a zero wMaxSegmentSize.

Signed-off-by: Bjørn Mork <bjorn@mork.no>
Acked-by: Oliver Neukum <oneukum@suse.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
[bwh: Backported to 3.16: parsing code is organised differently]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
--- a/drivers/net/usb/cdc_ether.c
+++ b/drivers/net/usb/cdc_ether.c
@@ -235,8 +235,9 @@ int usbnet_generic_cdc_bind(struct usbne
 					info->ether->bLength);
 				goto bad_desc;
 			}
-			dev->hard_mtu = le16_to_cpu(
-						info->ether->wMaxSegmentSize);
+			if (info->ether->wMaxSegmentSize)
+				dev->hard_mtu = le16_to_cpu(
+					info->ether->wMaxSegmentSize);
 			/* because of Zaurus, we may be ignoring the host
 			 * side link address we were given.
 			 */

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 110/133] ipv6: fix typo in fib6_net_exit()
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (95 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 104/133] bcache: fix bch_hprint crash and improve output Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 132/133] kvm/x86: Handle async PF in RCU read-side critical sections Ben Hutchings
                   ` (36 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Eric Dumazet, David S. Miller

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Eric Dumazet <edumazet@google.com>

commit 32a805baf0fb70b6dbedefcd7249ac7f580f9e3b upstream.

IPv6 FIB should use FIB6_TABLE_HASHSZ, not FIB_TABLE_HASHSZ.

Fixes: ba1cc08d9488 ("ipv6: fix memory leak with multiple tables during netns destruction")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 net/ipv6/ip6_fib.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/net/ipv6/ip6_fib.c
+++ b/net/ipv6/ip6_fib.c
@@ -1847,7 +1847,7 @@ static void fib6_net_exit(struct net *ne
 	rt6_ifdown(net, NULL);
 	del_timer_sync(&net->ipv6.ip6_fib_timer);
 
-	for (i = 0; i < FIB_TABLE_HASHSZ; i++) {
+	for (i = 0; i < FIB6_TABLE_HASHSZ; i++) {
 		struct hlist_head *head = &net->ipv6.fib_table_hash[i];
 		struct hlist_node *tmp;
 		struct fib6_table *tb;

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 055/133] staging: lustre: obdclass: return -EFAULT if copy_from_user() fails
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (86 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 133/133] kvm/x86: Avoid async PF preempting the kernel incorrectly Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 094/133] MIPS: microMIPS: Fix decoding of addiusp instruction Ben Hutchings
                   ` (45 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Greg Kroah-Hartman, Dan Carpenter

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Dan Carpenter <dan.carpenter@oracle.com>

commit 092c3def24bb68a00ff58c76ed67b9ff448387ce upstream.

The copy_from_user() function returns the number of bytes which we
weren't able to copy.  We don't want to return that to the user but
instead we want to return -EFAULT.

Fixes: d7e09d0397e8 ("staging: add Lustre file system client support")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
[bwh: Backported to 3.16: adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
--- a/drivers/staging/lustre/lustre/obdclass/class_obd.c
+++ b/drivers/staging/lustre/lustre/obdclass/class_obd.c
@@ -232,8 +232,8 @@ int class_handle_ioctl(unsigned int cmd,
 		OBD_ALLOC(lcfg, data->ioc_plen1);
 		if (lcfg == NULL)
 			GOTO(out, err = -ENOMEM);
-		err = copy_from_user(lcfg, data->ioc_pbuf1,
-					 data->ioc_plen1);
+		if (copy_from_user(lcfg, data->ioc_pbuf1, data->ioc_plen1))
+			err = -EFAULT;
 		if (!err)
 			err = lustre_cfg_sanity_check(lcfg, data->ioc_plen1);
 		if (!err)

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 050/133] rtc: sa1100: fix unbalanced clk_prepare_enable/clk_disable_unprepare
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (57 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 120/133] sctp: do not peel off an assoc from one netns to another one Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 072/133] powerpc: Fix DAR reporting when alignment handler faults Ben Hutchings
                   ` (74 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Alexandre Belloni, Robert Jarzmik

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Alexandre Belloni <alexandre.belloni@free-electrons.com>

commit 1cf85b2327a9b03bde5266e72ee64a38d085256d upstream.

In the error path of sa1100_rtc_open(), info->clk is disabled which will
happen again in sa1100_rtc_remove() when the module is removed whereas it
is only enabled once in sa1100_rtc_init().

Fixes: 0cc0c38e9139 ("drivers/rtc/rtc-sa1100.c: move clock enable/disable to probe/remove")
Acked-by: Robert Jarzmik <robert.jarzmik@free.fr>
Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/rtc/rtc-sa1100.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

--- a/drivers/rtc/rtc-sa1100.c
+++ b/drivers/rtc/rtc-sa1100.c
@@ -111,7 +111,7 @@ static int sa1100_rtc_open(struct device
 	ret = request_irq(info->irq_1hz, sa1100_rtc_interrupt, 0, "rtc 1Hz", dev);
 	if (ret) {
 		dev_err(dev, "IRQ %d already in use.\n", info->irq_1hz);
-		goto fail_ui;
+		return ret;
 	}
 	ret = request_irq(info->irq_alarm, sa1100_rtc_interrupt, 0, "rtc Alrm", dev);
 	if (ret) {
@@ -125,8 +125,6 @@ static int sa1100_rtc_open(struct device
 
  fail_ai:
 	free_irq(info->irq_1hz, dev);
- fail_ui:
-	clk_disable_unprepare(info->clk);
 	return ret;
 }
 

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 052/133] IB/mlx5: Fix integer overflow when page_shift == 31
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (69 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 095/133] MIPS: microMIPS: Fix decoding of swsp16 instruction Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 113/133] Input: xpad - don't depend on endpoint order Ben Hutchings
                   ` (62 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Doug Ledford, Leon Romanovsky, Ilya Lesokhin

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Ilya Lesokhin <ilyal@mellanox.com>

commit 7b4cdaae73ee833975a767cf54a3354d355b3f8d upstream.

Fix a bug where MR registration fails when mlx5_ib_cont_pages
indicates that the MR can be mapped using 2GB pages (page_shift == 31).

Fixes: e126ba97dba9 ("mlx5: Add driver for Mellanox Connect-IB adapters")
Signed-off-by: Ilya Lesokhin <ilyal@mellanox.com>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
Signed-off-by: Doug Ledford <dledford@redhat.com>
[bwh: Backported to 3.16: adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/infiniband/hw/mlx5/mr.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

--- a/drivers/infiniband/hw/mlx5/mr.c
+++ b/drivers/infiniband/hw/mlx5/mr.c
@@ -682,13 +682,14 @@ err_free:
 	return ERR_PTR(err);
 }
 
-static int get_octo_len(u64 addr, u64 len, int page_size)
+static int get_octo_len(u64 addr, u64 len, int page_shift)
 {
+	u64 page_size = 1ULL << page_shift;
 	u64 offset;
 	int npages;
 
 	offset = addr & (page_size - 1);
-	npages = ALIGN(len + offset, page_size) >> ilog2(page_size);
+	npages = ALIGN(len + offset, page_size) >> page_shift;
 	return (npages + 1) / 2;
 }
 
@@ -870,11 +871,11 @@ static struct mlx5_ib_mr *reg_create(str
 	in->seg.start_addr = cpu_to_be64(virt_addr);
 	in->seg.len = cpu_to_be64(length);
 	in->seg.bsfs_octo_size = 0;
-	in->seg.xlt_oct_size = cpu_to_be32(get_octo_len(virt_addr, length, 1 << page_shift));
+	in->seg.xlt_oct_size = cpu_to_be32(get_octo_len(virt_addr, length, page_shift));
 	in->seg.log2_page_size = page_shift;
 	in->seg.qpn_mkey7_0 = cpu_to_be32(0xffffff << 8);
 	in->xlat_oct_act_size = cpu_to_be32(get_octo_len(virt_addr, length,
-							 1 << page_shift));
+							 page_shift));
 	err = mlx5_core_create_mkey(&dev->mdev, &mr->mmr, in, inlen, NULL,
 				    NULL, NULL);
 	if (err) {

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 086/133] mac80211: flush hw_roc_start work before cancelling the ROC
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (81 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 066/133] USB: serial: option: add support for D-Link DWM-157 C1 Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 048/133] f2fs: check hot_data for roll-forward recovery Ben Hutchings
                   ` (50 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Avraham Stern, Luca Coelho, Johannes Berg

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Avraham Stern <avraham.stern@intel.com>

commit 6e46d8ce894374fc135c96a8d1057c6af1fef237 upstream.

When HW ROC is supported it is possible that after the HW notified
that the ROC has started, the ROC was cancelled and another ROC was
added while the hw_roc_start worker is waiting on the mutex (since
cancelling the ROC and adding another one also holds the same mutex).
As a result, the hw_roc_start worker will continue to run after the
new ROC is added but before it is actually started by the HW.
This may result in notifying userspace that the ROC has started before
it actually does, or in case of management tx ROC, in an attempt to
tx while not on the right channel.

In addition, when the driver will notify mac80211 that the second ROC
has started, mac80211 will warn that this ROC has already been
notified.

Fix this by flushing the hw_roc_start work before cancelling an ROC.

Signed-off-by: Avraham Stern <avraham.stern@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
[bwh: Backported to 3.16: adjust filename]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 net/mac80211/cfg.c | 2 ++
 1 file changed, 2 insertions(+)

--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -2891,6 +2891,8 @@ static int ieee80211_cancel_roc(struct i
 	struct ieee80211_roc_work *roc, *tmp, *found = NULL;
 	int ret;
 
+	flush_work(&local->hw_roc_start);
+
 	mutex_lock(&local->mtx);
 	list_for_each_entry_safe(roc, tmp, &local->roc_list, list) {
 		struct ieee80211_roc_work *dep, *tmp2;

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 085/133] mac80211_hwsim: Use proper TX power
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (65 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 080/133] Revert "net: use lib/percpu_counter API for fragmentation mem accounting" Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 058/133] usb: Add device quirk for Logitech HD Pro Webcam C920-C Ben Hutchings
                   ` (66 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Beni Lev, Johannes Berg, Luca Coelho

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Beni Lev <beni.lev@intel.com>

commit 9de981f507474f326e42117858dc9a9321331ae5 upstream.

In struct ieee80211_tx_info, control.vif pointer and rate_driver_data[0]
falls on the same place, depending on the union usage.
During the whole TX process, the union is referred to as a control struct,
which holds the vif that is later used in the tx flow, especially in order
to derive the used tx power.
Referring direcly to rate_driver_data[0] and assigning a value to it,
overwrites the vif pointer, hence making all later references irrelevant.
Moreover, rate_driver_data[0] isn't used later in the flow in order to
retrieve the channel that it is pointing to.

Signed-off-by: Beni Lev <beni.lev@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
[bwh: Backported to 3.16: adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/net/wireless/mac80211_hwsim.c | 2 --
 1 file changed, 2 deletions(-)

--- a/drivers/net/wireless/mac80211_hwsim.c
+++ b/drivers/net/wireless/mac80211_hwsim.c
@@ -1122,7 +1122,6 @@ static void mac80211_hwsim_tx(struct iee
 				       txi->control.rates,
 				       ARRAY_SIZE(txi->control.rates));
 
-	txi->rate_driver_data[0] = channel;
 	mac80211_hwsim_monitor_rx(hw, skb, channel);
 
 	/* wmediumd mode check */

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 133/133] kvm/x86: Avoid async PF preempting the kernel incorrectly
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (85 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 099/133] bcache: do not subtract sectors_to_gc for bypassed IO Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 055/133] staging: lustre: obdclass: return -EFAULT if copy_from_user() fails Ben Hutchings
                   ` (46 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Peter Zijlstra, Paul E. McKenney, Wanpeng Li,
	Radim Krčmář, Boqun Feng

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Boqun Feng <boqun.feng@gmail.com>

commit a2b7861bb33b2538420bb5d8554153484d3f961f upstream.

Currently, in PREEMPT_COUNT=n kernel, kvm_async_pf_task_wait() could call
schedule() to reschedule in some cases.  This could result in
accidentally ending the current RCU read-side critical section early,
causing random memory corruption in the guest, or otherwise preempting
the currently running task inside between preempt_disable and
preempt_enable.

The difficulty to handle this well is because we don't know whether an
async PF delivered in a preemptible section or RCU read-side critical section
for PREEMPT_COUNT=n, since preempt_disable()/enable() and rcu_read_lock/unlock()
are both no-ops in that case.

To cure this, we treat any async PF interrupting a kernel context as one
that cannot be preempted, preventing kvm_async_pf_task_wait() from choosing
the schedule() path in that case.

To do so, a second parameter for kvm_async_pf_task_wait() is introduced,
so that we know whether it's called from a context interrupting the
kernel, and the parameter is set properly in all the callsites.

Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Wanpeng Li <wanpeng.li@hotmail.com>
Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
[bwh: Backported to 3.16:
 - Use user_mode_vm() as equivalent to upstream user_mode()
 - Adjust filename, context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 arch/x86/include/asm/kvm_para.h |  4 ++--
 arch/x86/kernel/kvm.c           | 14 ++++++++++----
 arch/x86/kvm/svm.c              |  2 +-
 3 files changed, 13 insertions(+), 7 deletions(-)

--- a/arch/x86/include/asm/kvm_para.h
+++ b/arch/x86/include/asm/kvm_para.h
@@ -95,7 +95,7 @@ static inline long kvm_hypercall4(unsign
 bool kvm_para_available(void);
 unsigned int kvm_arch_para_features(void);
 void __init kvm_guest_init(void);
-void kvm_async_pf_task_wait(u32 token);
+void kvm_async_pf_task_wait(u32 token, int interrupt_kernel);
 void kvm_async_pf_task_wake(u32 token);
 u32 kvm_read_and_reset_pf_reason(void);
 extern void kvm_disable_steal_time(void);
@@ -110,7 +110,7 @@ static inline void kvm_spinlock_init(voi
 
 #else /* CONFIG_KVM_GUEST */
 #define kvm_guest_init() do {} while (0)
-#define kvm_async_pf_task_wait(T) do {} while(0)
+#define kvm_async_pf_task_wait(T, I) do {} while(0)
 #define kvm_async_pf_task_wake(T) do {} while(0)
 
 static inline bool kvm_para_available(void)
--- a/arch/x86/kernel/kvm.c
+++ b/arch/x86/kernel/kvm.c
@@ -116,7 +116,11 @@ static struct kvm_task_sleep_node *_find
 	return NULL;
 }
 
-void kvm_async_pf_task_wait(u32 token)
+/*
+ * @interrupt_kernel: Is this called from a routine which interrupts the kernel
+ * 		      (other than user space)?
+ */
+void kvm_async_pf_task_wait(u32 token, int interrupt_kernel)
 {
 	u32 key = hash_32(token, KVM_TASK_SLEEP_HASHBITS);
 	struct kvm_task_sleep_head *b = &async_pf_sleepers[key];
@@ -139,8 +143,10 @@ void kvm_async_pf_task_wait(u32 token)
 
 	n.token = token;
 	n.cpu = smp_processor_id();
-	n.halted = is_idle_task(current) || preempt_count() > 1 ||
-		   rcu_preempt_depth();
+	n.halted = is_idle_task(current) ||
+		   (IS_ENABLED(CONFIG_PREEMPT_COUNT)
+		    ? preempt_count() > 1 || rcu_preempt_depth()
+		    : interrupt_kernel);
 	init_waitqueue_head(&n.wq);
 	hlist_add_head(&n.link, &b->list);
 	spin_unlock(&b->lock);
@@ -269,7 +275,7 @@ do_async_page_fault(struct pt_regs *regs
 		/* page is swapped out by the host. */
 		prev_state = exception_enter();
 		exit_idle();
-		kvm_async_pf_task_wait((u32)read_cr2());
+		kvm_async_pf_task_wait((u32)read_cr2(), !user_mode_vm(regs));
 		exception_exit(prev_state);
 		break;
 	case KVM_PV_REASON_PAGE_READY:
--- a/arch/x86/kvm/svm.c
+++ b/arch/x86/kvm/svm.c
@@ -1718,7 +1718,7 @@ static int pf_interception(struct vcpu_s
 	case KVM_PV_REASON_PAGE_NOT_PRESENT:
 		svm->apf_reason = 0;
 		local_irq_disable();
-		kvm_async_pf_task_wait(fault_address);
+		kvm_async_pf_task_wait(fault_address, 0);
 		local_irq_enable();
 		break;
 	case KVM_PV_REASON_PAGE_READY:

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 053/133] media: em28xx: calculate left volume level correctly
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (88 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 094/133] MIPS: microMIPS: Fix decoding of addiusp instruction Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 068/133] iwlwifi: mvm: Avoid deferring non bufferable frames Ben Hutchings
                   ` (43 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Mauro Carvalho Chehab, Hans Verkuil, Colin Ian King

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Colin Ian King <colin.king@canonical.com>

commit 801e3659bf2c87c31b7024087d61e89e172b5651 upstream.

The calculation of the left volume looks suspect, the value of
0x1f - ((val << 8) & 0x1f) is always 0x1f. The debug prior to the
assignment of value[1] prints the left volume setting using the
calculation 0x1f - (val >> 8) & 0x1f which looks correct to me.
Fix the left volume by using the correct expression as used in
the debug.

Detected by CoverityScan, CID#146140 ("Wrong operator used")

Fixes: 850d24a5a861 ("[media] em28xx-alsa: add mixer support for AC97 volume controls")

Signed-off-by: Colin Ian King <colin.king@canonical.com>
Signed-off-by: Hans Verkuil <hansverk@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/media/usb/em28xx/em28xx-audio.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/media/usb/em28xx/em28xx-audio.c
+++ b/drivers/media/usb/em28xx/em28xx-audio.c
@@ -562,7 +562,7 @@ static int em28xx_vol_get(struct snd_kco
 		val, (int)kcontrol->private_value);
 
 	value->value.integer.value[0] = 0x1f - (val & 0x1f);
-	value->value.integer.value[1] = 0x1f - ((val << 8) & 0x1f);
+	value->value.integer.value[1] = 0x1f - ((val >> 8) & 0x1f);
 
 	return 0;
 }

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 099/133] bcache: do not subtract sectors_to_gc for bypassed IO
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (84 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 073/133] powerpc: Correct instruction code for xxlor instruction Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 133/133] kvm/x86: Avoid async PF preempting the kernel incorrectly Ben Hutchings
                   ` (47 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Eric Wheeler, Coly Li, Jens Axboe, Tang Junhui,
	Christoph Hellwig

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Tang Junhui <tang.junhui@zte.com.cn>

commit 69daf03adef5f7bc13e0ac86b4b8007df1767aab upstream.

Since bypassed IOs use no bucket, so do not subtract sectors_to_gc to
trigger gc thread.

Signed-off-by: tang.junhui <tang.junhui@zte.com.cn>
Acked-by: Coly Li <colyli@suse.de>
Reviewed-by: Eric Wheeler <bcache@linux.ewheeler.net>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
[bwh: Backported to 3.16: adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/md/bcache/request.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

--- a/drivers/md/bcache/request.c
+++ b/drivers/md/bcache/request.c
@@ -193,14 +193,14 @@ static void bch_data_insert_start(struct
 	struct data_insert_op *op = container_of(cl, struct data_insert_op, cl);
 	struct bio *bio = op->bio, *n;
 
+	if (op->bypass)
+		return bch_data_invalidate(cl);
+
 	if (atomic_sub_return(bio_sectors(bio), &op->c->sectors_to_gc) < 0) {
 		set_gc_sectors(op->c);
 		wake_up_gc(op->c);
 	}
 
-	if (op->bypass)
-		return bch_data_invalidate(cl);
-
 	/*
 	 * Journal writes are marked REQ_FLUSH; if the original write was a
 	 * flush, it'll wait on the journal write.

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 048/133] f2fs: check hot_data for roll-forward recovery
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (82 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 086/133] mac80211: flush hw_roc_start work before cancelling the ROC Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 073/133] powerpc: Correct instruction code for xxlor instruction Ben Hutchings
                   ` (49 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Jaegeuk Kim, Chao Yu

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Jaegeuk Kim <jaegeuk@kernel.org>

commit 125c9fb1ccb53eb2ea9380df40f3c743f3fb2fed upstream.

We need to check HOT_DATA to truncate any previous data block when doing
roll-forward recovery.

Reviewed-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 fs/f2fs/recovery.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/fs/f2fs/recovery.c
+++ b/fs/f2fs/recovery.c
@@ -239,7 +239,7 @@ static int check_index_in_prev_nodes(str
 		return 0;
 
 	/* Get the previous summary */
-	for (i = CURSEG_WARM_DATA; i <= CURSEG_COLD_DATA; i++) {
+	for (i = CURSEG_HOT_DATA; i <= CURSEG_COLD_DATA; i++) {
 		struct curseg_info *curseg = CURSEG_I(sbi, i);
 		if (curseg->segno == segno) {
 			sum = curseg->sum_blk->entries[blkoff];

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 109/133] ipv6: fix memory leak with multiple tables during netns destruction
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (67 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 058/133] usb: Add device quirk for Logitech HD Pro Webcam C920-C Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 095/133] MIPS: microMIPS: Fix decoding of swsp16 instruction Ben Hutchings
                   ` (64 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Jianlin Shi, David S. Miller, Sabrina Dubroca

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Sabrina Dubroca <sd@queasysnail.net>

commit ba1cc08d9488c94cb8d94f545305688b72a2a300 upstream.

fib6_net_exit only frees the main and local tables. If another table was
created with fib6_alloc_table, we leak it when the netns is destroyed.

Fix this in the same way ip_fib_net_exit cleans up tables, by walking
through the whole hashtable of fib6_table's. We can get rid of the
special cases for local and main, since they're also part of the
hashtable.

Reproducer:
    ip netns add x
    ip -net x -6 rule add from 6003:1::/64 table 100
    ip netns del x

Reported-by: Jianlin Shi <jishi@redhat.com>
Fixes: 58f09b78b730 ("[NETNS][IPV6] ip6_fib - make it per network namespace")
Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 net/ipv6/ip6_fib.c | 25 +++++++++++++++++++------
 1 file changed, 19 insertions(+), 6 deletions(-)

--- a/net/ipv6/ip6_fib.c
+++ b/net/ipv6/ip6_fib.c
@@ -174,6 +174,12 @@ static __inline__ void rt6_release(struc
 		dst_free(&rt->dst);
 }
 
+static void fib6_free_table(struct fib6_table *table)
+{
+	inetpeer_invalidate_tree(&table->tb6_peers);
+	kfree(table);
+}
+
 static void fib6_link_table(struct net *net, struct fib6_table *tb)
 {
 	unsigned int h;
@@ -1836,15 +1842,22 @@ out_timer:
 
 static void fib6_net_exit(struct net *net)
 {
+	unsigned int i;
+
 	rt6_ifdown(net, NULL);
 	del_timer_sync(&net->ipv6.ip6_fib_timer);
 
-#ifdef CONFIG_IPV6_MULTIPLE_TABLES
-	inetpeer_invalidate_tree(&net->ipv6.fib6_local_tbl->tb6_peers);
-	kfree(net->ipv6.fib6_local_tbl);
-#endif
-	inetpeer_invalidate_tree(&net->ipv6.fib6_main_tbl->tb6_peers);
-	kfree(net->ipv6.fib6_main_tbl);
+	for (i = 0; i < FIB_TABLE_HASHSZ; i++) {
+		struct hlist_head *head = &net->ipv6.fib_table_hash[i];
+		struct hlist_node *tmp;
+		struct fib6_table *tb;
+
+		hlist_for_each_entry_safe(tb, tmp, head, tb6_hlist) {
+			hlist_del(&tb->tb6_hlist);
+			fib6_free_table(tb);
+		}
+	}
+
 	kfree(net->ipv6.fib_table_hash);
 	kfree(net->ipv6.rt6_stats);
 }

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 094/133] MIPS: microMIPS: Fix decoding of addiusp instruction
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (87 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 055/133] staging: lustre: obdclass: return -EFAULT if copy_from_user() fails Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 053/133] media: em28xx: calculate left volume level correctly Ben Hutchings
                   ` (44 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Marcin Nowakowski, James Hogan, Matt Redfearn, linux-mips,
	Ralf Baechle, Paul Burton, Ingo Molnar

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Matt Redfearn <matt.redfearn@imgtec.com>

commit a0ae2b08331a9882150618e0c81ea837e4a37ace upstream.

Commit 34c2f668d0f6 ("MIPS: microMIPS: Add unaligned access support.")
added handling of microMIPS instructions to manipulate the stack
pointer. Unfortunately the decoding of the addiusp instruction was
incorrect, and performed a left shift by 2 bits to the raw immediate,
rather than decoding the immediate and then performing the shift, as
documented in the ISA.

This led to incomplete stack traces, due to incorrect frame sizes being
calculated. For example the instruction:
801faee0 <do_sys_poll>:
801faee0:       4e25            addiu   sp,sp,-952

As decoded by objdump, would be interpreted by the existing code as
having manipulated the stack pointer by +1096.

Fix this by changing the order of decoding the immediate and applying
the left shift. Also change to accessing the instuction through the
union to avoid the endianness problem of accesing halfword[0], which
will fail on big endian systems.

Cope with the special behaviour of immediates 0x0, 0x1, 0x1fe and 0x1ff
by XORing with 0x100 again if mod(immediate) < 4. This logic was tested
with the following test code:

int main(int argc, char **argv)
{
	unsigned int enc;
	int imm;

	for (enc = 0; enc < 512; ++enc) {
		int tmp = enc << 2;
		imm = -(signed short)(tmp | ((tmp & 0x100) ? 0xfe00 : 0));
		unsigned short tmp = enc;
		tmp = (tmp ^ 0x100) - 0x100;
		if ((unsigned short)(tmp + 2) < 4)
			tmp ^= 0x100;
		imm = -(signed short)(tmp << 2);
		printf("%#x\t%d\t->\t(%#x\t%d)\t%#x\t%d\n",
		       enc, enc,
		       (short)tmp, (short)tmp,
		       imm, imm);
	}
	return EXIT_SUCCESS;
}

Which generates the table:

input encoding	->	tmp (matching manual)	frame size
-----------------------------------------------------------------------
0	0	->	(0x100		256)	0xfffffc00	-1024
0x1	1	->	(0x101		257)	0xfffffbfc	-1028
0x2	2	->	(0x2		2)	0xfffffff8	-8
0x3	3	->	(0x3		3)	0xfffffff4	-12
...
0xfe	254	->	(0xfe		254)	0xfffffc08	-1016
0xff	255	->	(0xff		255)	0xfffffc04	-1020
0x100	256	->	(0xffffff00	-256)	0x400		1024
0x101	257	->	(0xffffff01	-255)	0x3fc		1020
...
0x1fc	508	->	(0xfffffffc	-4)	0x10		16
0x1fd	509	->	(0xfffffffd	-3)	0xc		12
0x1fe	510	->	(0xfffffefe	-258)	0x408		1032
0x1ff	511	->	(0xfffffeff	-257)	0x404		1028

Thanks to James Hogan for the test code & verifying the logic.

Fixes: 34c2f668d0f6 ("MIPS: microMIPS: Add unaligned access support.")
Suggested-by: James Hogan <james.hogan@imgtec.com>
Signed-off-by: Matt Redfearn <matt.redfearn@imgtec.com>
Cc: Marcin Nowakowski <marcin.nowakowski@imgtec.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Paul Burton <paul.burton@imgtec.com>
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/16955/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 arch/mips/kernel/process.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

--- a/arch/mips/kernel/process.c
+++ b/arch/mips/kernel/process.c
@@ -413,10 +413,14 @@ static int get_frame_info(struct mips_fr
 				{
 					unsigned short tmp;
 
-					if (ip->halfword[0] & mm_addiusp_func)
+					if (ip->mm16_r3_format.simmediate & mm_addiusp_func)
 					{
-						tmp = (((ip->halfword[0] >> 1) & 0x1ff) << 2);
-						info->frame_size = -(signed short)(tmp | ((tmp & 0x100) ? 0xfe00 : 0));
+						tmp = ip->mm_b0_format.simmediate >> 1;
+						tmp = ((tmp & 0x1ff) ^ 0x100) - 0x100;
+						/* 0x0,0x1,0x1fe,0x1ff are special */
+						if ((tmp + 2) < 4)
+							tmp ^= 0x100;
+						info->frame_size = -(signed short)(tmp << 2);
 					} else {
 						tmp = (ip->halfword[0] >> 1);
 						info->frame_size = -(signed short)(tmp & 0xf);

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 074/133] xen/events: events_fifo: Don't use {get,put}_cpu() in xen_evtchn_fifo_init()
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (91 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 116/133] KVM: SVM: Add a missing 'break' statement Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 096/133] MIPS: Stacktrace: Fix microMIPS stack unwinding on big endian systems Ben Hutchings
                   ` (40 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Julien Grall, Andre Przywara, Boris Ostrovsky

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Julien Grall <julien.grall@arm.com>

commit 22f12f0df802cea865672d8f39fbebdc03981050 upstream.

When booting Linux as Xen guest with CONFIG_DEBUG_ATOMIC, the following
splat appears:

[    0.002323] Mountpoint-cache hash table entries: 1024 (order: 1, 8192 bytes)
[    0.019717] ASID allocator initialised with 65536 entries
[    0.020019] xen:grant_table: Grant tables using version 1 layout
[    0.020051] Grant table initialized
[    0.020069] BUG: sleeping function called from invalid context at /data/src/linux/mm/page_alloc.c:4046
[    0.020100] in_atomic(): 1, irqs_disabled(): 0, pid: 1, name: swapper/0
[    0.020123] no locks held by swapper/0/1.
[    0.020143] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.13.0-rc5 #598
[    0.020166] Hardware name: FVP Base (DT)
[    0.020182] Call trace:
[    0.020199] [<ffff00000808a5c0>] dump_backtrace+0x0/0x270
[    0.020222] [<ffff00000808a95c>] show_stack+0x24/0x30
[    0.020244] [<ffff000008c1ef20>] dump_stack+0xb8/0xf0
[    0.020267] [<ffff0000081128c0>] ___might_sleep+0x1c8/0x1f8
[    0.020291] [<ffff000008112948>] __might_sleep+0x58/0x90
[    0.020313] [<ffff0000082171b8>] __alloc_pages_nodemask+0x1c0/0x12e8
[    0.020338] [<ffff00000827a110>] alloc_page_interleave+0x38/0x88
[    0.020363] [<ffff00000827a904>] alloc_pages_current+0xdc/0xf0
[    0.020387] [<ffff000008211f38>] __get_free_pages+0x28/0x50
[    0.020411] [<ffff0000086566a4>] evtchn_fifo_alloc_control_block+0x2c/0xa0
[    0.020437] [<ffff0000091747b0>] xen_evtchn_fifo_init+0x38/0xb4
[    0.020461] [<ffff0000091746c0>] xen_init_IRQ+0x44/0xc8
[    0.020484] [<ffff000009128adc>] xen_guest_init+0x250/0x300
[    0.020507] [<ffff000008083974>] do_one_initcall+0x44/0x130
[    0.020531] [<ffff000009120df8>] kernel_init_freeable+0x120/0x288
[    0.020556] [<ffff000008c31ca8>] kernel_init+0x18/0x110
[    0.020578] [<ffff000008083710>] ret_from_fork+0x10/0x40
[    0.020606] xen:events: Using FIFO-based ABI
[    0.020658] Xen: initializing cpu0
[    0.027727] Hierarchical SRCU implementation.
[    0.036235] EFI services will not be available.
[    0.043810] smp: Bringing up secondary CPUs ...

This is because get_cpu() in xen_evtchn_fifo_init() will disable
preemption, but __get_free_page() might sleep (GFP_ATOMIC is not set).

xen_evtchn_fifo_init() will always be called before SMP is initialized,
so {get,put}_cpu() could be replaced by a simple smp_processor_id().

This also avoid to modify evtchn_fifo_alloc_control_block that will be
called in other context.

Signed-off-by: Julien Grall <julien.grall@arm.com>
Reported-by: Andre Przywara <andre.przywara@arm.com>
Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Fixes: 1fe565517b57 ("xen/events: use the FIFO-based ABI if available")
Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
[bwh: Backported to 3.16: adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/xen/events/events_fifo.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

--- a/drivers/xen/events/events_fifo.c
+++ b/drivers/xen/events/events_fifo.c
@@ -445,19 +445,18 @@ static struct notifier_block evtchn_fifo
 
 int __init xen_evtchn_fifo_init(void)
 {
-	int cpu = get_cpu();
+	int cpu = smp_processor_id();
 	int ret;
 
 	ret = evtchn_fifo_alloc_control_block(cpu);
 	if (ret < 0)
-		goto out;
+		return ret;
 
 	pr_info("Using FIFO-based ABI\n");
 
 	evtchn_ops = &evtchn_ops_fifo;
 
 	register_cpu_notifier(&evtchn_fifo_cpu_notifier);
-out:
-	put_cpu();
+
 	return ret;
 }

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 088/133] MIPS: AR7: allow NULL clock for clk_get_rate
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (62 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 097/133] bcache: Fix leak of bdev reference Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 064/133] net/mlx4_core: Make explicit conversion to 64bit value Ben Hutchings
                   ` (69 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Paul Gortmaker, Mathias Kresin, James Hogan, Ralf Baechle,
	linux-mips, Jonas Gorski

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Jonas Gorski <jonas.gorski@gmail.com>

commit 585e0e9d02a690c29932b2fc0789835c7b91d448 upstream.

Make the behaviour of clk_get_rate consistent with common clk's
clk_get_rate by accepting NULL clocks as parameter. Some device
drivers rely on this, and will cause an OOPS otherwise.

Fixes: 780019ddf02f ("MIPS: AR7: Implement clock API")
Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
Reported-by: Mathias Kresin <dev@kresin.me>
Cc: Paul Gortmaker <paul.gortmaker@windriver.com>
Cc: James Hogan <james.hogan@imgtec.com>
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/16775/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 arch/mips/ar7/clock.c | 3 +++
 1 file changed, 3 insertions(+)

--- a/arch/mips/ar7/clock.c
+++ b/arch/mips/ar7/clock.c
@@ -430,6 +430,9 @@ EXPORT_SYMBOL(clk_disable);
 
 unsigned long clk_get_rate(struct clk *clk)
 {
+	if (!clk)
+		return 0;
+
 	return clk->rate;
 }
 EXPORT_SYMBOL(clk_get_rate);

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 107/133] genirq: Make sparse_irq_lock protect what it should protect
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (54 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 112/133] Input: xpad - add support for Xbox One controllers Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 056/133] USB: core: Avoid race of async_completed() w/ usbdev_release() Ben Hutchings
                   ` (77 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Thomas Gleixner

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Thomas Gleixner <tglx@linutronix.de>

commit 12ac1d0f6c3e95732d144ffa65c8b20fbd9aa462 upstream.

for_each_active_irq() iterates the sparse irq allocation bitmap. The caller
must hold sparse_irq_lock. Several code pathes expect that an active bit in
the sparse bitmap also has a valid interrupt descriptor.

Unfortunately that's not true. The (de)allocation is a two step process,
which holds the sparse_irq_lock only across the queue/remove from the radix
tree and the set/clear in the allocation bitmap.

If a iteration locks sparse_irq_lock between the two steps, then it might
see an active bit but the corresponding irq descriptor is NULL. If that is
dereferenced unconditionally, then the kernel oopses. Of course, all
iterator sites could be audited and fixed, but....

There is no reason why the sparse_irq_lock needs to be dropped between the
two steps, in fact the code becomes simpler when the mutex is held across
both and the semantics become more straight forward, so future problems of
missing NULL pointer checks in the iteration are avoided and all existing
sites are fixed in one go.

Expand the lock held sections so both operations are covered and the bitmap
and the radixtree are in sync.

Fixes: a05a900a51c7 ("genirq: Make sparse_lock a mutex")
Reported-and-tested-by: Huang Ying <ying.huang@intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
[bwh: Backported to 3.16: adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 kernel/irq/irqdesc.c | 24 +++++++-----------------
 1 file changed, 7 insertions(+), 17 deletions(-)

--- a/kernel/irq/irqdesc.c
+++ b/kernel/irq/irqdesc.c
@@ -183,9 +183,7 @@ static void free_desc(unsigned int irq)
 	 * sparse tree we can free it. Access in proc will fail to
 	 * lookup the descriptor.
 	 */
-	mutex_lock(&sparse_irq_lock);
 	delete_irq_desc(irq);
-	mutex_unlock(&sparse_irq_lock);
 
 	free_masks(desc);
 	free_percpu(desc->kstat_irqs);
@@ -202,19 +200,14 @@ static int alloc_descs(unsigned int star
 		desc = alloc_desc(start + i, node, owner);
 		if (!desc)
 			goto err;
-		mutex_lock(&sparse_irq_lock);
 		irq_insert_desc(start + i, desc);
-		mutex_unlock(&sparse_irq_lock);
 	}
+	bitmap_set(allocated_irqs, start, cnt);
 	return start;
 
 err:
 	for (i--; i >= 0; i--)
 		free_desc(start + i);
-
-	mutex_lock(&sparse_irq_lock);
-	bitmap_clear(allocated_irqs, start, cnt);
-	mutex_unlock(&sparse_irq_lock);
 	return -ENOMEM;
 }
 
@@ -312,6 +305,7 @@ static inline int alloc_descs(unsigned i
 
 		desc->owner = owner;
 	}
+	bitmap_set(allocated_irqs, start, cnt);
 	return start;
 }
 
@@ -366,10 +360,10 @@ void irq_free_descs(unsigned int from, u
 	if (from >= nr_irqs || (from + cnt) > nr_irqs)
 		return;
 
+	mutex_lock(&sparse_irq_lock);
 	for (i = 0; i < cnt; i++)
 		free_desc(from + i);
 
-	mutex_lock(&sparse_irq_lock);
 	bitmap_clear(allocated_irqs, from, cnt);
 	mutex_unlock(&sparse_irq_lock);
 }
@@ -413,19 +407,15 @@ __irq_alloc_descs(int irq, unsigned int
 					   from, cnt, 0);
 	ret = -EEXIST;
 	if (irq >=0 && start != irq)
-		goto err;
+		goto unlock;
 
 	if (start + cnt > nr_irqs) {
 		ret = irq_expand_nr_irqs(start + cnt);
 		if (ret)
-			goto err;
+			goto unlock;
 	}
-
-	bitmap_set(allocated_irqs, start, cnt);
-	mutex_unlock(&sparse_irq_lock);
-	return alloc_descs(start, cnt, node, owner);
-
-err:
+	ret = alloc_descs(start, cnt, node, owner);
+unlock:
 	mutex_unlock(&sparse_irq_lock);
 	return ret;
 }

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 095/133] MIPS: microMIPS: Fix decoding of swsp16 instruction
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (68 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 109/133] ipv6: fix memory leak with multiple tables during netns destruction Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 052/133] IB/mlx5: Fix integer overflow when page_shift == 31 Ben Hutchings
                   ` (63 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, linux-mips, Matt Redfearn, Ralf Baechle, Marcin Nowakowski,
	James Hogan, Miodrag Dinic, Paul Burton, David Daney, Ingo Molnar

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Matt Redfearn <matt.redfearn@imgtec.com>

commit cea8cd498f4f1c30ea27e3664b3c671e495c4fce upstream.

When the immediate encoded in the instruction is accessed, it is sign
extended due to being a signed value being assigned to a signed integer.
The ISA specifies that this operation is an unsigned operation.
The sign extension leads us to incorrectly decode:

801e9c8e:       cbf1            sw      ra,68(sp)

As having an immediate of 1073741809.

Since the instruction format does not specify signed/unsigned, and this
is currently the only location to use this instuction format, change it
to an unsigned immediate.

Fixes: bb9bc4689b9c ("MIPS: Calculate microMIPS ra properly when unwinding the stack")
Suggested-by: Paul Burton <paul.burton@imgtec.com>
Signed-off-by: Matt Redfearn <matt.redfearn@imgtec.com>
Reviewed-by: James Hogan <james.hogan@imgtec.com>
Cc: Marcin Nowakowski <marcin.nowakowski@imgtec.com>
Cc: Miodrag Dinic <miodrag.dinic@imgtec.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: David Daney <david.daney@cavium.com>
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/16957/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 arch/mips/include/uapi/asm/inst.h | 2 +-
 arch/mips/kernel/process.c        | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

--- a/arch/mips/include/uapi/asm/inst.h
+++ b/arch/mips/include/uapi/asm/inst.h
@@ -808,7 +808,7 @@ struct mm16_r3_format {		/* Load from gl
 struct mm16_r5_format {		/* Load/store from stack pointer format */
 	__BITFIELD_FIELD(unsigned int opcode : 6,
 	__BITFIELD_FIELD(unsigned int rt : 5,
-	__BITFIELD_FIELD(signed int simmediate : 5,
+	__BITFIELD_FIELD(unsigned int imm : 5,
 	__BITFIELD_FIELD(unsigned int : 16, /* Ignored */
 	;))))
 };
--- a/arch/mips/kernel/process.c
+++ b/arch/mips/kernel/process.c
@@ -241,7 +241,7 @@ static inline int is_ra_save_ins(union m
 			if (ip->mm16_r5_format.rt != 31)
 				return 0;
 
-			*poff = ip->mm16_r5_format.simmediate;
+			*poff = ip->mm16_r5_format.imm;
 			*poff = (*poff << 2) / sizeof(ulong);
 			return 1;
 

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 063/133] ARM: 8692/1: mm: abort uaccess retries upon fatal signal
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (118 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 098/133] bcache: fix sequential large write IO bypass Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 061/133] IB/{qib, hfi1}: Avoid flow control testing for RDMA write operation Ben Hutchings
                   ` (13 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Mark Rutland, Russell King, Steve Capper

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Mark Rutland <mark.rutland@arm.com>

commit 746a272e44141af24a02f6c9b0f65f4c4598ed42 upstream.

When there's a fatal signal pending, arm's do_page_fault()
implementation returns 0. The intent is that we'll return to the
faulting userspace instruction, delivering the signal on the way.

However, if we take a fatal signal during fixing up a uaccess, this
results in a return to the faulting kernel instruction, which will be
instantly retried, resulting in the same fault being taken forever. As
the task never reaches userspace, the signal is not delivered, and the
task is left unkillable. While the task is stuck in this state, it can
inhibit the forward progress of the system.

To avoid this, we must ensure that when a fatal signal is pending, we
apply any necessary fixup for a faulting kernel instruction. Thus we
will return to an error path, and it is up to that code to make forward
progress towards delivering the fatal signal.

Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Reviewed-by: Steve Capper <steve.capper@arm.com>
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 arch/arm/mm/fault.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

--- a/arch/arm/mm/fault.c
+++ b/arch/arm/mm/fault.c
@@ -315,8 +315,11 @@ retry:
 	 * signal first. We do not need to release the mmap_sem because
 	 * it would already be released in __lock_page_or_retry in
 	 * mm/filemap.c. */
-	if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
+	if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current)) {
+		if (!user_mode(regs))
+			goto no_context;
 		return 0;
+	}
 
 	/*
 	 * Major/minor page fault accounting is only done on the

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 123/133] media: imon: Fix null-ptr-deref in imon_probe
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (122 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 121/133] USB: serial: console: fix use-after-free after failed setup Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 065/133] scsi: aacraid: Fix command send race condition Ben Hutchings
                   ` (9 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Mauro Carvalho Chehab, Arvind Yadav, Andrey Konovalov,
	Sean Young

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Arvind Yadav <arvind.yadav.cs@gmail.com>

commit 58fd55e838276a0c13d1dc7c387f90f25063cbf3 upstream.

It seems that the return value of usb_ifnum_to_if() can be NULL and
needs to be checked.

Signed-off-by: Arvind Yadav <arvind.yadav.cs@gmail.com>
Tested-by: Andrey Konovalov <andreyknvl@google.com>
Signed-off-by: Sean Young <sean@mess.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/media/rc/imon.c | 5 +++++
 1 file changed, 5 insertions(+)

--- a/drivers/media/rc/imon.c
+++ b/drivers/media/rc/imon.c
@@ -2312,6 +2312,11 @@ static int imon_probe(struct usb_interfa
 	mutex_lock(&driver_lock);
 
 	first_if = usb_ifnum_to_if(usbdev, 0);
+	if (!first_if) {
+		ret = -ENODEV;
+		goto fail;
+	}
+
 	first_if_ctx = usb_get_intfdata(first_if);
 
 	if (ifnum == 0) {

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 082/133] l2tp: pass tunnel pointer to ->session_create()
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (49 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 077/133] ftrace: Fix selftest goto location on error Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 100/133] bcache: correct cache_dirty_target in __update_writeback_rate() Ben Hutchings
                   ` (82 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, David S. Miller, Guillaume Nault

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Guillaume Nault <g.nault@alphalink.fr>

commit f026bc29a8e093edfbb2a77700454b285c97e8ad upstream.

Using l2tp_tunnel_find() in pppol2tp_session_create() and
l2tp_eth_create() is racy, because no reference is held on the
returned session. These functions are only used to implement the
->session_create callback which is run by l2tp_nl_cmd_session_create().
Therefore searching for the parent tunnel isn't necessary because
l2tp_nl_cmd_session_create() already has a pointer to it and holds a
reference.

This patch modifies ->session_create()'s prototype to directly pass the
the parent tunnel as parameter, thus avoiding searching for it in
pppol2tp_session_create() and l2tp_eth_create().

Since we have to touch the ->session_create() call in
l2tp_nl_cmd_session_create(), let's also remove the useless conditional:
we know that ->session_create isn't NULL at this point because it's
already been checked earlier in this same function.

Finally, one might be tempted to think that the removed
l2tp_tunnel_find() calls were harmless because they would return the
same tunnel as the one held by l2tp_nl_cmd_session_create() anyway.
But that tunnel might be removed and a new one created with same tunnel
Id before the l2tp_tunnel_find() call. In this case l2tp_tunnel_find()
would return the new tunnel which wouldn't be protected by the
reference held by l2tp_nl_cmd_session_create().

Fixes: 309795f4bec2 ("l2tp: Add netlink control API for L2TP")
Fixes: d9e31d17ceba ("l2tp: Add L2TP ethernet pseudowire support")
Signed-off-by: Guillaume Nault <g.nault@alphalink.fr>
Signed-off-by: David S. Miller <davem@davemloft.net>
[bwh: Backported to 3.16: adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 net/l2tp/l2tp_core.h    |  4 +++-
 net/l2tp/l2tp_eth.c     | 11 +++--------
 net/l2tp/l2tp_netlink.c |  8 ++++----
 net/l2tp/l2tp_ppp.c     | 19 +++++++------------
 4 files changed, 17 insertions(+), 25 deletions(-)

--- a/net/l2tp/l2tp_core.h
+++ b/net/l2tp/l2tp_core.h
@@ -210,7 +210,9 @@ struct l2tp_tunnel {
 };
 
 struct l2tp_nl_cmd_ops {
-	int (*session_create)(struct net *net, u32 tunnel_id, u32 session_id, u32 peer_session_id, struct l2tp_session_cfg *cfg);
+	int (*session_create)(struct net *net, struct l2tp_tunnel *tunnel,
+			      u32 session_id, u32 peer_session_id,
+			      struct l2tp_session_cfg *cfg);
 	int (*session_delete)(struct l2tp_session *session);
 };
 
--- a/net/l2tp/l2tp_eth.c
+++ b/net/l2tp/l2tp_eth.c
@@ -206,23 +206,18 @@ static void l2tp_eth_show(struct seq_fil
 }
 #endif
 
-static int l2tp_eth_create(struct net *net, u32 tunnel_id, u32 session_id, u32 peer_session_id, struct l2tp_session_cfg *cfg)
+static int l2tp_eth_create(struct net *net, struct l2tp_tunnel *tunnel,
+			   u32 session_id, u32 peer_session_id,
+			   struct l2tp_session_cfg *cfg)
 {
 	struct net_device *dev;
 	char name[IFNAMSIZ];
-	struct l2tp_tunnel *tunnel;
 	struct l2tp_session *session;
 	struct l2tp_eth *priv;
 	struct l2tp_eth_sess *spriv;
 	int rc;
 	struct l2tp_eth_net *pn;
 
-	tunnel = l2tp_tunnel_find(net, tunnel_id);
-	if (!tunnel) {
-		rc = -ENODEV;
-		goto out;
-	}
-
 	if (cfg->ifname) {
 		dev = dev_get_by_name(net, cfg->ifname);
 		if (dev) {
--- a/net/l2tp/l2tp_netlink.c
+++ b/net/l2tp/l2tp_netlink.c
@@ -540,10 +540,10 @@ static int l2tp_nl_cmd_session_create(st
 		break;
 	}
 
-	ret = -EPROTONOSUPPORT;
-	if (l2tp_nl_cmd_ops[cfg.pw_type]->session_create)
-		ret = (*l2tp_nl_cmd_ops[cfg.pw_type]->session_create)(net, tunnel_id,
-			session_id, peer_session_id, &cfg);
+	ret = l2tp_nl_cmd_ops[cfg.pw_type]->session_create(net, tunnel,
+							   session_id,
+							   peer_session_id,
+							   &cfg);
 
 out_tunnel:
 	l2tp_tunnel_dec_refcount(tunnel);
--- a/net/l2tp/l2tp_ppp.c
+++ b/net/l2tp/l2tp_ppp.c
@@ -807,25 +807,20 @@ end:
 
 #ifdef CONFIG_L2TP_V3
 
-/* Called when creating sessions via the netlink interface.
- */
-static int pppol2tp_session_create(struct net *net, u32 tunnel_id, u32 session_id, u32 peer_session_id, struct l2tp_session_cfg *cfg)
+/* Called when creating sessions via the netlink interface. */
+static int pppol2tp_session_create(struct net *net, struct l2tp_tunnel *tunnel,
+				   u32 session_id, u32 peer_session_id,
+				   struct l2tp_session_cfg *cfg)
 {
 	int error;
-	struct l2tp_tunnel *tunnel;
 	struct l2tp_session *session;
 	struct pppol2tp_session *ps;
 
-	tunnel = l2tp_tunnel_find(net, tunnel_id);
-
-	/* Error if we can't find the tunnel */
-	error = -ENOENT;
-	if (tunnel == NULL)
-		goto out;
-
 	/* Error if tunnel socket is not prepped */
-	if (tunnel->sock == NULL)
+	if (!tunnel->sock) {
+		error = -ENOENT;
 		goto out;
+	}
 
 	/* Default MTU values. */
 	if (cfg->mtu == 0)

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 062/133] IB/usnic: check for allocation failure
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (120 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 061/133] IB/{qib, hfi1}: Avoid flow control testing for RDMA write operation Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 121/133] USB: serial: console: fix use-after-free after failed setup Ben Hutchings
                   ` (11 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Doug Ledford, Dan Carpenter, Yuval Shaia

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Dan Carpenter <dan.carpenter@oracle.com>

commit d518a44d317d92f4c297ea26a308b1ac1a980d33 upstream.

usnic_uiom_get_dev_list() can return ERR_PTR(-ENOMEM) so we should check
for that.

Fixes: e3cf00d0a87f ("IB/usnic: Add Cisco VIC low-level hardware driver")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Reviewed-by: Yuval Shaia <yuval.shaia@oracle.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/infiniband/hw/usnic/usnic_ib_verbs.c | 2 ++
 1 file changed, 2 insertions(+)

--- a/drivers/infiniband/hw/usnic/usnic_ib_verbs.c
+++ b/drivers/infiniband/hw/usnic/usnic_ib_verbs.c
@@ -148,6 +148,8 @@ find_free_vf_and_create_qp_grp(struct us
 	if (usnic_ib_share_vf) {
 		/* Try to find resouces on a used vf which is in pd */
 		dev_list = usnic_uiom_get_dev_list(pd->umem_pd);
+		if (IS_ERR(dev_list))
+			return ERR_CAST(dev_list);
 		for (i = 0; dev_list[i]; i++) {
 			dev = dev_list[i];
 			vf = pci_get_drvdata(to_pci_dev(dev));

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 130/133] VSOCK: Fix lockdep issue.
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (110 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 119/133] Input: i8042 - add Gigabyte P57 to the keyboard reset table Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 089/133] MIPS: BCM63XX: allow NULL clock for clk_get_rate Ben Hutchings
                   ` (21 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Jorgen Hansen, Thomas Hellstrom, Michal Hocko,
	David S. Miller

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Jorgen Hansen <jhansen@vmware.com>

commit 8566b86ab9f0f45bc6f7dd422b21de9d0cf5415a upstream.

The recent fix for the vsock sock_put issue used the wrong
initializer for the transport spin_lock causing an issue when
running with lockdep checking.

Testing: Verified fix on kernel with lockdep enabled.

Reviewed-by: Thomas Hellstrom <thellstrom@vmware.com>
Signed-off-by: Jorgen Hansen <jhansen@vmware.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Michal Hocko <mhocko@suse.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 net/vmw_vsock/vmci_transport.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/net/vmw_vsock/vmci_transport.c
+++ b/net/vmw_vsock/vmci_transport.c
@@ -1570,7 +1570,7 @@ static int vmci_transport_socket_init(st
 	vmci_trans(vsk)->notify_ops = NULL;
 	INIT_LIST_HEAD(&vmci_trans(vsk)->elem);
 	vmci_trans(vsk)->sk = &vsk->sk;
-	vmci_trans(vsk)->lock = __SPIN_LOCK_UNLOCKED(vmci_trans(vsk)->lock);
+	spin_lock_init(&vmci_trans(vsk)->lock);
 	if (psk) {
 		vmci_trans(vsk)->queue_pair_size =
 			vmci_trans(psk)->queue_pair_size;

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 108/133] bcache: initialize dirty stripes in flash_dev_run()
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (114 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 128/133] mac80211: don't compare TKIP TX MIC key in reinstall prevention Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 114/133] Input: xpad - validate USB endpoint type during probe Ben Hutchings
                   ` (17 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Jens Axboe, Tang Junhui, Coly Li

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Tang Junhui <tang.junhui@zte.com.cn>

commit 175206cf9ab63161dec74d9cd7f9992e062491f5 upstream.

bcache uses a Proportion-Differentiation Controller algorithm to control
writeback rate to cached devices. In the PD controller algorithm, dirty
stripes of thin flash device should not be counted in, because flash only
volumes never write back dirty data.

Currently dirty stripe counter for thin flash device is not initialized
when the thin flash device starts. Which means the following calculation
in PD controller will reference an undefined dirty stripes number, and
all cached devices attached to the same cache set where the thin flash
device lies on may have an inaccurate writeback rate.

This patch calles bch_sectors_dirty_init() in flash_dev_run(), to
correctly initialize dirty stripe counter when the thin flash device
starts to run. This patch also does following parameter data type change,
 -void bch_sectors_dirty_init(struct cached_dev *dc);
 +void bch_sectors_dirty_init(struct bcache_device *);
to call this function conveniently in flash_dev_run().

(Commit log is composed by Coly Li)

Signed-off-by: Tang Junhui <tang.junhui@zte.com.cn>
Reviewed-by: Coly Li <colyli@suse.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
[bwh: Backported to 3.16: adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/md/bcache/super.c     | 3 ++-
 drivers/md/bcache/writeback.c | 8 ++++----
 drivers/md/bcache/writeback.h | 2 +-
 3 files changed, 7 insertions(+), 6 deletions(-)

--- a/drivers/md/bcache/super.c
+++ b/drivers/md/bcache/super.c
@@ -1045,7 +1045,7 @@ int bch_cached_dev_attach(struct cached_
 	atomic_set(&dc->count, 1);
 
 	if (BDEV_STATE(&dc->sb) == BDEV_STATE_DIRTY) {
-		bch_sectors_dirty_init(dc);
+		bch_sectors_dirty_init(&dc->disk);
 		atomic_set(&dc->has_dirty, 1);
 		atomic_inc(&dc->count);
 		bch_writeback_queue(dc);
@@ -1248,6 +1248,7 @@ static int flash_dev_run(struct cache_se
 		goto err;
 
 	bcache_device_attach(d, c, u - c->uuids);
+	bch_sectors_dirty_init(d);
 	bch_flash_dev_request_init(d);
 	add_disk(d->disk);
 
--- a/drivers/md/bcache/writeback.c
+++ b/drivers/md/bcache/writeback.c
@@ -489,17 +489,17 @@ static int sectors_dirty_init_fn(struct
 	return MAP_CONTINUE;
 }
 
-void bch_sectors_dirty_init(struct cached_dev *dc)
+void bch_sectors_dirty_init(struct bcache_device *d)
 {
 	struct sectors_dirty_init op;
 
 	bch_btree_op_init(&op.op, -1);
-	op.inode = dc->disk.id;
+	op.inode = d->id;
 
-	bch_btree_map_keys(&op.op, dc->disk.c, &KEY(op.inode, 0, 0),
+	bch_btree_map_keys(&op.op, d->c, &KEY(op.inode, 0, 0),
 			   sectors_dirty_init_fn, 0);
 
-	dc->disk.sectors_dirty_last = bcache_dev_sectors_dirty(&dc->disk);
+	d->sectors_dirty_last = bcache_dev_sectors_dirty(d);
 }
 
 int bch_cached_dev_writeback_init(struct cached_dev *dc)
--- a/drivers/md/bcache/writeback.h
+++ b/drivers/md/bcache/writeback.h
@@ -104,7 +104,7 @@ static inline void bch_writeback_add(str
 
 void bcache_dev_sectors_dirty_add(struct cache_set *, unsigned, uint64_t, int);
 
-void bch_sectors_dirty_init(struct cached_dev *dc);
+void bch_sectors_dirty_init(struct bcache_device *);
 int bch_cached_dev_writeback_init(struct cached_dev *);
 
 #endif

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 076/133] md/bitmap: disable bitmap_resize for file-backed bitmaps.
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (99 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 111/133] Input: ucb1400_ts - fix suspend and resume handling Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 090/133] MIPS: Loongson 2F: allow NULL clock for clk_get_rate Ben Hutchings
                   ` (32 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Shaohua Li, Zhilong Liu, NeilBrown

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: NeilBrown <neilb@suse.com>

commit e8a27f836f165c26f867ece7f31eb5c811692319 upstream.

bitmap_resize() does not work for file-backed bitmaps.
The buffer_heads are allocated and initialized when
the bitmap is read from the file, but resize doesn't
read from the file, it loads from the internal bitmap.
When it comes time to write the new bitmap, the bh is
non-existent and we crash.

The common case when growing an array involves making the array larger,
and that normally means making the bitmap larger.  Doing
that inside the kernel is possible, but would need more code.
It is probably easier to require people who use file-backed
bitmaps to remove them and re-add after a reshape.

So this patch disables the resizing of arrays which have
file-backed bitmaps.  This is better than crashing.

Reported-by: Zhilong Liu <zlliu@suse.com>
Fixes: d60b479d177a ("md/bitmap: add bitmap_resize function to allow bitmap resizing.")
Signed-off-by: NeilBrown <neilb@suse.com>
Signed-off-by: Shaohua Li <shli@fb.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/md/bitmap.c | 5 +++++
 1 file changed, 5 insertions(+)

--- a/drivers/md/bitmap.c
+++ b/drivers/md/bitmap.c
@@ -1802,6 +1802,11 @@ int bitmap_resize(struct bitmap *bitmap,
 	long pages;
 	struct bitmap_page *new_bp;
 
+	if (bitmap->storage.file && !init) {
+		pr_info("md: cannot resize file-based bitmap\n");
+		return -EINVAL;
+	}
+
 	if (chunksize == 0) {
 		/* If there is enough space, leave the chunk size unchanged,
 		 * else increase by factor of two until there is enough space.

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 069/133] regulator: da9063: Return an error code on probe failure
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (108 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 079/133] xfs: fix incorrect log_flushed on fsync Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 119/133] Input: i8042 - add Gigabyte P57 to the keyboard reset table Ben Hutchings
                   ` (23 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Dan Carpenter, Mark Brown

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Dan Carpenter <dan.carpenter@oracle.com>

commit b6615659827839f3031c6bd4c1599c3c705778ac upstream.

If "regl_pdata->n_regulators == 0" is true then we accidentally return
PTR_ERR(<some_valid_pointer>) instead of an error code.  I've changed it
to return -ENODEV instead.

Fixes: 69ca3e58d178 ("regulator: da9063: Add Dialog DA9063 voltage regulators support.")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/regulator/da9063-regulator.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/regulator/da9063-regulator.c
+++ b/drivers/regulator/da9063-regulator.c
@@ -739,7 +739,7 @@ static int da9063_regulator_probe(struct
 	if (IS_ERR(regl_pdata) || regl_pdata->n_regulators == 0) {
 		dev_err(&pdev->dev,
 			"No regulators defined for the platform\n");
-		return PTR_ERR(regl_pdata);
+		return -ENODEV;
 	}
 
 	/* Find regulators set for particular device model */

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 078/133] ARC: Re-enable MMU upon Machine Check exception
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (77 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 083/133] mfd: max8998: Fix potential NULL pointer dereference Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 081/133] l2tp: prevent creation of sessions on terminated tunnels Ben Hutchings
                   ` (54 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Jose Abreu, Vineet Gupta, Alexey Brodkin, Jose Abreu

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Jose Abreu <Jose.Abreu@synopsys.com>

commit 1ee55a8f7f6b7ca4c0c59e0b4b4e3584a085c2d3 upstream.

I recently came upon a scenario where I would get a double fault
machine check exception tiriggered by a kernel module.
However the ensuing crash stacktrace (ksym lookup) was not working
correctly.

Turns out that machine check auto-disables MMU while modules are allocated
in kernel vaddr spapce.

This patch re-enables the MMU before start printing the stacktrace
making stacktracing of modules work upon a fatal exception.

Signed-off-by: Jose Abreu <joabreu@synopsys.com>
Reviewed-by: Alexey Brodkin <abrodkin@synopsys.com>
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
[vgupta: moved code into low level handler to avoid in 2 places]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 arch/arc/kernel/entry.S | 6 ++++++
 arch/arc/mm/tlb.c       | 3 ---
 2 files changed, 6 insertions(+), 3 deletions(-)

--- a/arch/arc/kernel/entry.S
+++ b/arch/arc/kernel/entry.S
@@ -315,6 +315,12 @@ ENTRY(EV_MachineCheck)
 	lr  r0, [efa]
 	mov r1, sp
 
+	; hardware auto-disables MMU, re-enable it to allow kernel vaddr
+	; access for say stack unwinding of modules for crash dumps
+	lr	r3, [ARC_REG_PID]
+	or	r3, r3, MMU_ENABLE
+	sr	r3, [ARC_REG_PID]
+
 	lsr  	r3, r2, 8
 	bmsk 	r3, r3, 7
 	brne    r3, ECR_C_MCHK_DUP_TLB, 1f
--- a/arch/arc/mm/tlb.c
+++ b/arch/arc/mm/tlb.c
@@ -691,9 +691,6 @@ void do_tlb_overlap_fault(unsigned long
 
 	local_irq_save(flags);
 
-	/* re-enable the MMU */
-	write_aux_reg(ARC_REG_PID, MMU_ENABLE | read_aux_reg(ARC_REG_PID));
-
 	/* loop thru all sets of TLB */
 	for (set = 0; set < mmu->sets; set++) {
 

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 126/133] net: qmi_wwan: fix divide by 0 on bad descriptors
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (79 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 081/133] l2tp: prevent creation of sessions on terminated tunnels Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 066/133] USB: serial: option: add support for D-Link DWM-157 C1 Ben Hutchings
                   ` (52 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: akpm, Andrey Konovalov, Bjørn Mork, David S. Miller

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Bjørn Mork <bjorn@mork.no>

commit 7fd078337201cf7468f53c3d9ef81ff78cb6df3b upstream.

A CDC Ethernet functional descriptor with wMaxSegmentSize = 0 will
cause a divide error in usbnet_probe:

divide error: 0000 [#1] PREEMPT SMP KASAN
Modules linked in:
CPU: 0 PID: 24 Comm: kworker/0:1 Not tainted 4.14.0-rc8-44453-g1fdc1a82c34f #56
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Bochs 01/01/2011
Workqueue: usb_hub_wq hub_event
task: ffff88006bef5c00 task.stack: ffff88006bf60000
RIP: 0010:usbnet_update_max_qlen+0x24d/0x390 drivers/net/usb/usbnet.c:355
RSP: 0018:ffff88006bf67508 EFLAGS: 00010246
RAX: 00000000000163c8 RBX: ffff8800621fce40 RCX: ffff8800621fcf34
RDX: 0000000000000000 RSI: ffffffff837ecb7a RDI: ffff8800621fcf34
RBP: ffff88006bf67520 R08: ffff88006bef5c00 R09: ffffed000c43f881
R10: ffffed000c43f880 R11: ffff8800621fc406 R12: 0000000000000003
R13: ffffffff85c71de0 R14: 0000000000000000 R15: 0000000000000000
FS:  0000000000000000(0000) GS:ffff88006ca00000(0000) knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007ffe9c0d6dac CR3: 00000000614f4000 CR4: 00000000000006f0
Call Trace:
 usbnet_probe+0x18b5/0x2790 drivers/net/usb/usbnet.c:1783
 qmi_wwan_probe+0x133/0x220 drivers/net/usb/qmi_wwan.c:1338
 usb_probe_interface+0x324/0x940 drivers/usb/core/driver.c:361
 really_probe drivers/base/dd.c:413
 driver_probe_device+0x522/0x740 drivers/base/dd.c:557

Fix by simply ignoring the bogus descriptor, as it is optional
for QMI devices anyway.

Fixes: 423ce8caab7e ("net: usb: qmi_wwan: New driver for Huawei QMI based WWAN devices")
Reported-by: Andrey Konovalov <andreyknvl@google.com>
Signed-off-by: Bjørn Mork <bjorn@mork.no>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/net/usb/qmi_wwan.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/net/usb/qmi_wwan.c
+++ b/drivers/net/usb/qmi_wwan.c
@@ -314,7 +314,7 @@ next_desc:
 	}
 
 	/* errors aren't fatal - we can live with the dynamic address */
-	if (cdc_ether) {
+	if (cdc_ether && cdc_ether->wMaxSegmentSize) {
 		dev->hard_mtu = le16_to_cpu(cdc_ether->wMaxSegmentSize);
 		usbnet_get_ethernet_addr(dev, cdc_ether->iMACAddress);
 	}

^ permalink raw reply	[flat|nested] 142+ messages in thread

* [PATCH 3.16 051/133] RDMA/usnic: Fix remove address space warning
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (60 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 106/133] tracing: Apply trace_clock changes to instance max buffer Ben Hutchings
@ 2017-11-22  1:58 ` Ben Hutchings
  2017-11-22  1:58 ` [PATCH 3.16 097/133] bcache: Fix leak of bdev reference Ben Hutchings
                   ` (71 subsequent siblings)
  133 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22  1:58 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: akpm, Doug Ledford, Leon Romanovsky

3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

------------------

From: Leon Romanovsky <leonro@mellanox.com>

commit 5d50f400e56fbc7a14ef3f8d42ba47710e455881 upstream.

Sparse tool complains with the following error:
drivers/infiniband/hw/usnic/usnic_ib_main.c:445:16: warning: cast removes
	address space of expression

Fix it by doing casting on correct field and convert function helper which
sets ifaddr to be void, because there are no users who are interested in
returned value.

Fixes: c7845bcafe4d ("IB/usnic: Add UDP support in u*verbs.c, u*main.c and u*util.h")
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
---
 drivers/infiniband/hw/usnic/usnic_fwd.c     | 12 ++----------
 drivers/infiniband/hw/usnic/usnic_fwd.h     |  2 +-
 drivers/infiniband/hw/usnic/usnic_ib_main.c | 10 ++++++----
 3 files changed, 9 insertions(+), 15 deletions(-)

--- a/drivers/infiniband/hw/usnic/usnic_fwd.c
+++ b/drivers/infiniband/hw/usnic/usnic_fwd.c
@@ -95,20 +95,12 @@ void usnic_fwd_set_mac(struct usnic_fwd_
 	spin_unlock(&ufdev->lock);
 }
 
-int usnic_fwd_add_ipaddr(struct usnic_fwd_dev *ufdev, __be32 inaddr)
+void usnic_fwd_add_ipaddr(struct usnic_fwd_dev *ufdev, __be32 inaddr)
 {
-	int status;
-
 	spin_lock(&ufdev->lock);
-	if (ufdev->inaddr == 0) {
+	if (!ufdev->inaddr)
 		ufdev->inaddr = inaddr;
-		status = 0;
-	} else {
-		status = -EFAULT;
-	}
 	spin_unlock(&ufdev->lock);
-
-	return status;
 }
 
 void usnic_fwd_del_ipaddr(struct usnic_fwd_dev *ufdev)
--- a/drivers/infiniband/hw/usnic/usnic_fwd.h
+++ b/drivers/infiniband/hw/usnic/usnic_fwd.h
@@ -59,7 +59,7 @@ struct usnic_fwd_dev *usnic_fwd_dev_allo
 void usnic_fwd_dev_free(struct usnic_fwd_dev *ufdev);
 
 void usnic_fwd_set_mac(struct usnic_fwd_dev *ufdev, char mac[ETH_ALEN]);
-int usnic_fwd_add_ipaddr(struct usnic_fwd_dev *ufdev, __be32 inaddr);
+void usnic_fwd_add_ipaddr(struct usnic_fwd_dev *ufdev, __be32 inaddr);
 void usnic_fwd_del_ipaddr(struct usnic_fwd_dev *ufdev);
 void usnic_fwd_carrier_up(struct usnic_fwd_dev *ufdev);
 void usnic_fwd_carrier_down(struct usnic_fwd_dev *ufdev);
--- a/drivers/infiniband/hw/usnic/usnic_ib_main.c
+++ b/drivers/infiniband/hw/usnic/usnic_ib_main.c
@@ -305,7 +305,7 @@ static void *usnic_ib_device_add(struct
 {
 	struct usnic_ib_dev *us_ibdev;
 	union ib_gid gid;
-	struct in_ifaddr *in;
+	struct in_device *ind;
 	struct net_device *netdev;
 
 	usnic_dbg("\n");
@@ -393,9 +393,11 @@ static void *usnic_ib_device_add(struct
 	if (netif_carrier_ok(us_ibdev->netdev))
 		usnic_fwd_carrier_up(us_ibdev->ufdev);
 
-	in = ((struct in_device *)(netdev->ip_ptr))->ifa_list;
-	if (in != NULL)
-		usnic_fwd_add_ipaddr(us_ibdev->ufdev, in->ifa_address);
+	ind = in_dev_get(netdev);
+	if (ind->ifa_list)
+		usnic_fwd_add_ipaddr(us_ibdev->ufdev,
+				     ind->ifa_list->ifa_address);
+	in_dev_put(ind);
 
 	usnic_mac_ip_to_gid(us_ibdev->netdev->perm_addr,
 				us_ibdev->ufdev->inaddr, &gid.raw[0]);

^ permalink raw reply	[flat|nested] 142+ messages in thread

* Re: [PATCH 3.16 100/133] bcache: correct cache_dirty_target in __update_writeback_rate()
  2017-11-22  1:58 ` [PATCH 3.16 100/133] bcache: correct cache_dirty_target in __update_writeback_rate() Ben Hutchings
@ 2017-11-22  3:41   ` Joe Perches
  2017-11-23 13:08     ` Ben Hutchings
  0 siblings, 1 reply; 142+ messages in thread
From: Joe Perches @ 2017-11-22  3:41 UTC (permalink / raw)
  To: Ben Hutchings, linux-kernel, stable
  Cc: akpm, Coly Li, Tang Junhui, Jens Axboe

On Wed, 2017-11-22 at 01:58 +0000, Ben Hutchings wrote:
> 3.16.51-rc1 review patch.  If anyone has any objections, please let me know.
[]
> --- a/drivers/md/bcache/writeback.h
> +++ b/drivers/md/bcache/writeback.h
> @@ -14,6 +14,25 @@ static inline uint64_t bcache_dev_sector
>  	return ret;
>  }
>  
> +static inline uint64_t  bcache_flash_devs_sectors_dirty(struct cache_set *c)
> +{
> +	uint64_t i, ret = 0;

There's no reason i should be uint64_t
as nr_uuids is unsigned int.

> +
> +	mutex_lock(&bch_register_lock);
> +
> +	for (i = 0; i < c->nr_uuids; i++) {
> +		struct bcache_device *d = c->devices[i];
> +
> +		if (!d || !UUID_FLASH_ONLY(&c->uuids[i]))
> +			continue;
> +	   ret += bcache_dev_sectors_dirty(d);
> +	}
> +
> +	mutex_unlock(&bch_register_lock);
> +
> +	return ret;
> +}
> +
>  static inline unsigned offset_to_stripe(struct bcache_device *d,
>  					uint64_t offset)
>  {
> 

^ permalink raw reply	[flat|nested] 142+ messages in thread

* Re: [PATCH 3.16 105/133] mm/vmstat.c: fix wrong comment
  2017-11-22  1:58 ` [PATCH 3.16 105/133] mm/vmstat.c: fix wrong comment Ben Hutchings
@ 2017-11-22  7:41   ` Vlastimil Babka
  2017-11-23 13:05     ` Ben Hutchings
  0 siblings, 1 reply; 142+ messages in thread
From: Vlastimil Babka @ 2017-11-22  7:41 UTC (permalink / raw)
  To: Ben Hutchings, linux-kernel, stable
  Cc: akpm, SeongJae Park, Linus Torvalds, Michal Hocko

On 11/22/2017 02:58 AM, Ben Hutchings wrote:
> 3.16.51-rc1 review patch.  If anyone has any objections, please let me know.

I don't really care much in the end, but is "fix wrong comment" really a
stable patch material these days? :)

> ------------------
> 
> From: SeongJae Park <sj38.park@gmail.com>
> 
> commit f113e64121ba9f4791332248b315d9f57ee33a6b upstream.
> 
> Comment for pagetypeinfo_showblockcount() is mistakenly duplicated from
> pagetypeinfo_show_free()'s comment.  This commit fixes it.
> 
> Link: http://lkml.kernel.org/r/20170809185816.11244-1-sj38.park@gmail.com
> Fixes: 467c996c1e19 ("Print out statistics in relation to fragmentation avoidance to /proc/pagetypeinfo")
> Signed-off-by: SeongJae Park <sj38.park@gmail.com>
> Cc: Michal Hocko <mhocko@kernel.org>
> Cc: Vlastimil Babka <vbabka@suse.cz>
> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
> Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
> ---
>  mm/vmstat.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> --- a/mm/vmstat.c
> +++ b/mm/vmstat.c
> @@ -975,7 +975,7 @@ static void pagetypeinfo_showblockcount_
>  	seq_putc(m, '\n');
>  }
>  
> -/* Print out the free pages at each order for each migratetype */
> +/* Print out the number of pageblocks for each migratetype */
>  static int pagetypeinfo_showblockcount(struct seq_file *m, void *arg)
>  {
>  	int mtype;
> 

^ permalink raw reply	[flat|nested] 142+ messages in thread

* Re: [PATCH 3.16 000/133] 3.16.51-rc1 review
  2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
                   ` (132 preceding siblings ...)
  2017-11-22  1:58 ` [PATCH 3.16 105/133] mm/vmstat.c: fix wrong comment Ben Hutchings
@ 2017-11-22 15:00 ` Guenter Roeck
  2017-11-22 20:51   ` Ben Hutchings
  133 siblings, 1 reply; 142+ messages in thread
From: Guenter Roeck @ 2017-11-22 15:00 UTC (permalink / raw)
  To: Ben Hutchings, linux-kernel, stable; +Cc: torvalds, akpm

On 11/21/2017 05:58 PM, Ben Hutchings wrote:
> This is the start of the stable review cycle for the 3.16.51 release.
> There are 133 patches in this series, which will be posted as responses
> to this one.  If anyone has any issues with these being applied, please
> let me know.
> 
> Responses should be made by Fri Nov 24 20:00:00 UTC 2017.
> Anything received after that time might be too late.
> 
Build results:
	total: 136 pass: 136 fail: 0
Qemu test results:
	total: 108 pass: 108 fail: 0

Details are available at http://kerneltests.org/builders.

Guenter

^ permalink raw reply	[flat|nested] 142+ messages in thread

* Re: [PATCH 3.16 000/133] 3.16.51-rc1 review
  2017-11-22 15:00 ` [PATCH 3.16 000/133] 3.16.51-rc1 review Guenter Roeck
@ 2017-11-22 20:51   ` Ben Hutchings
  0 siblings, 0 replies; 142+ messages in thread
From: Ben Hutchings @ 2017-11-22 20:51 UTC (permalink / raw)
  To: Guenter Roeck, linux-kernel, stable; +Cc: torvalds, akpm

[-- Attachment #1: Type: text/plain, Size: 804 bytes --]

On Wed, 2017-11-22 at 07:00 -0800, Guenter Roeck wrote:
> On 11/21/2017 05:58 PM, Ben Hutchings wrote:
> > This is the start of the stable review cycle for the 3.16.51
> > release.
> > There are 133 patches in this series, which will be posted as
> > responses
> > to this one.  If anyone has any issues with these being applied,
> > please
> > let me know.
> > 
> > Responses should be made by Fri Nov 24 20:00:00 UTC 2017.
> > Anything received after that time might be too late.
> > 
> 
> Build results:
> 	total: 136 pass: 136 fail: 0
> Qemu test results:
> 	total: 108 pass: 108 fail: 0
> 
> Details are available at http://kerneltests.org/builders.

Thanks for checking these.

Ben.

-- 
Ben Hutchings
Beware of programmers who carry screwdrivers. - Leonard Brandwein


[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 142+ messages in thread

* Re: [PATCH 3.16 105/133] mm/vmstat.c: fix wrong comment
  2017-11-22  7:41   ` Vlastimil Babka
@ 2017-11-23 13:05     ` Ben Hutchings
  2017-11-23 13:42       ` Michal Hocko
  0 siblings, 1 reply; 142+ messages in thread
From: Ben Hutchings @ 2017-11-23 13:05 UTC (permalink / raw)
  To: Vlastimil Babka, linux-kernel, stable
  Cc: akpm, SeongJae Park, Linus Torvalds, Michal Hocko

[-- Attachment #1: Type: text/plain, Size: 1831 bytes --]

On Wed, 2017-11-22 at 08:41 +0100, Vlastimil Babka wrote:
> On 11/22/2017 02:58 AM, Ben Hutchings wrote:
> > 3.16.51-rc1 review patch.  If anyone has any objections, please let me know.
> 
> I don't really care much in the end, but is "fix wrong comment" really a
> stable patch material these days? :)

It had a Fixes: field and it clearly won't do any harm.

Still, none of the other stable branches has it so I'll drop it.

Ben.

> > ------------------
> > 
> > From: SeongJae Park <sj38.park@gmail.com>
> > 
> > commit f113e64121ba9f4791332248b315d9f57ee33a6b upstream.
> > 
> > Comment for pagetypeinfo_showblockcount() is mistakenly duplicated from
> > pagetypeinfo_show_free()'s comment.  This commit fixes it.
> > 
> > Link: http://lkml.kernel.org/r/20170809185816.11244-1-sj38.park@gmail.com
> > Fixes: 467c996c1e19 ("Print out statistics in relation to fragmentation avoidance to /proc/pagetypeinfo")
> > Signed-off-by: SeongJae Park <sj38.park@gmail.com>
> > Cc: Michal Hocko <mhocko@kernel.org>
> > Cc: Vlastimil Babka <vbabka@suse.cz>
> > Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
> > Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
> > Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
> > ---
> >  mm/vmstat.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > --- a/mm/vmstat.c
> > +++ b/mm/vmstat.c
> > @@ -975,7 +975,7 @@ static void pagetypeinfo_showblockcount_
> >  	seq_putc(m, '\n');
> >  }
> >  
> > -/* Print out the free pages at each order for each migratetype */
> > +/* Print out the number of pageblocks for each migratetype */
> >  static int pagetypeinfo_showblockcount(struct seq_file *m, void *arg)
> >  {
> >  	int mtype;
> > 
> 
> 
-- 
Ben Hutchings
When in doubt, use brute force. - Ken Thompson


[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 142+ messages in thread

* Re: [PATCH 3.16 100/133] bcache: correct cache_dirty_target in __update_writeback_rate()
  2017-11-22  3:41   ` Joe Perches
@ 2017-11-23 13:08     ` Ben Hutchings
  2017-11-23 14:21       ` Joe Perches
  0 siblings, 1 reply; 142+ messages in thread
From: Ben Hutchings @ 2017-11-23 13:08 UTC (permalink / raw)
  To: Joe Perches, linux-kernel, stable; +Cc: akpm, Coly Li, Tang Junhui, Jens Axboe

[-- Attachment #1: Type: text/plain, Size: 1241 bytes --]

On Tue, 2017-11-21 at 19:41 -0800, Joe Perches wrote:
> On Wed, 2017-11-22 at 01:58 +0000, Ben Hutchings wrote:
> > 3.16.51-rc1 review patch.  If anyone has any objections, please let me know.
> 
> []
> > --- a/drivers/md/bcache/writeback.h
> > +++ b/drivers/md/bcache/writeback.h
> > @@ -14,6 +14,25 @@ static inline uint64_t bcache_dev_sector
> >  	return ret;
> >  }
> >  
> > +static inline uint64_t  bcache_flash_devs_sectors_dirty(struct cache_set *c)
> > +{
> > +	uint64_t i, ret = 0;
> 
> There's no reason i should be uint64_t
> as nr_uuids is unsigned int.

But this still works, right?  That's a minor issue to deal with
upstream, not in the backport.

Ben.

> > +
> > +	mutex_lock(&bch_register_lock);
> > +
> > +	for (i = 0; i < c->nr_uuids; i++) {
> > +		struct bcache_device *d = c->devices[i];
> > +
> > +		if (!d || !UUID_FLASH_ONLY(&c->uuids[i]))
> > +			continue;
> > +	   ret += bcache_dev_sectors_dirty(d);
> > +	}
> > +
> > +	mutex_unlock(&bch_register_lock);
> > +
> > +	return ret;
> > +}
> > +
> >  static inline unsigned offset_to_stripe(struct bcache_device *d,
> >  					uint64_t offset)
> >  {
> > 
-- 
Ben Hutchings
When in doubt, use brute force. - Ken Thompson


[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 142+ messages in thread

* Re: [PATCH 3.16 105/133] mm/vmstat.c: fix wrong comment
  2017-11-23 13:05     ` Ben Hutchings
@ 2017-11-23 13:42       ` Michal Hocko
  0 siblings, 0 replies; 142+ messages in thread
From: Michal Hocko @ 2017-11-23 13:42 UTC (permalink / raw)
  To: Ben Hutchings
  Cc: Vlastimil Babka, linux-kernel, stable, akpm, SeongJae Park,
	Linus Torvalds

On Thu 23-11-17 13:05:10, Ben Hutchings wrote:
> On Wed, 2017-11-22 at 08:41 +0100, Vlastimil Babka wrote:
> > On 11/22/2017 02:58 AM, Ben Hutchings wrote:
> > > 3.16.51-rc1 review patch.  If anyone has any objections, please let me know.
> > 
> > I don't really care much in the end, but is "fix wrong comment" really a
> > stable patch material these days? :)
> 
> It had a Fixes: field and it clearly won't do any harm.

Fixes tag is sometimes abused this way. It will not do any harm but the
fewer patch to backport the better IMHO

> Still, none of the other stable branches has it so I'll drop it.

Makes sense.
-- 
Michal Hocko
SUSE Labs

^ permalink raw reply	[flat|nested] 142+ messages in thread

* Re: [PATCH 3.16 100/133] bcache: correct cache_dirty_target in __update_writeback_rate()
  2017-11-23 13:08     ` Ben Hutchings
@ 2017-11-23 14:21       ` Joe Perches
  0 siblings, 0 replies; 142+ messages in thread
From: Joe Perches @ 2017-11-23 14:21 UTC (permalink / raw)
  To: Ben Hutchings, linux-kernel, stable
  Cc: akpm, Coly Li, Tang Junhui, Jens Axboe

On Thu, 2017-11-23 at 13:08 +0000, Ben Hutchings wrote:
> On Tue, 2017-11-21 at 19:41 -0800, Joe Perches wrote:
> > On Wed, 2017-11-22 at 01:58 +0000, Ben Hutchings wrote:
> > > 3.16.51-rc1 review patch.  If anyone has any objections, please let me know.
> > []
> > > --- a/drivers/md/bcache/writeback.h
> > > +++ b/drivers/md/bcache/writeback.h
> > > @@ -14,6 +14,25 @@ static inline uint64_t bcache_dev_sector
> > >  	return ret;
> > >  }
> > >  
> > > +static inline uint64_t  bcache_flash_devs_sectors_dirty(struct cache_set *c)
> > > +{
> > > +	uint64_t i, ret = 0;
> > 
> > There's no reason i should be uint64_t
> > as nr_uuids is unsigned int.
> 
> But this still works, right?  That's a minor issue to deal with
> upstream, not in the backport.

correct

^ permalink raw reply	[flat|nested] 142+ messages in thread

end of thread, other threads:[~2017-11-23 14:21 UTC | newest]

Thread overview: 142+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-11-22  1:58 [PATCH 3.16 000/133] 3.16.51-rc1 review Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 033/133] iio: accel: st_accel: fix data-ready line configuration Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 019/133] wcn36xx: Remove unnecessary rcu_read_unlock in wcn36xx_bss_info_changed Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 004/133] backlight: lm3630a: Bump REG_MAX value to 0x50 instead of 0x1F Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 029/133] scsi: zfcp: trace HBA FSF response by default on dismiss or timedout late response Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 018/133] wcn36xx: Introduce mutual exclusion of fw configuration Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 023/133] scsi: zfcp: fix queuecommand for scsi_eh commands when DIX enabled Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 022/133] x86/fsgsbase/64: Report FSBASE and GSBASE correctly in core dumps Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 008/133] IB/core: Fix the validations of a multicast LID in attach or detach operations Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 021/133] ARM: OMAP2+: omap_device: drop broken RPM status update from suspend_noirq Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 030/133] scsi: mac_esp: Fix PIO transfers for MESSAGE IN phase Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 031/133] cs5536: add support for IDE controller variant Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 039/133] block: Relax a check in blk_start_queue() Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 009/133] signal: move the "sig < SIGRTMIN" check into siginmask(sig) Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 013/133] printk/console: Always disable boot consoles that use init memory before it is freed Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 028/133] scsi: zfcp: fix payload with full FCP_RSP IU in SCSI trace records Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 011/133] asm/sections: add helpers to check for section data Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 047/133] pwm: tiehrpwm: fix clock imbalance in probe error path Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 043/133] media: uvcvideo: Prevent heap overflow when accessing mapped controls Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 032/133] iio: pressure: st_pressure: fix drdy configuration for LPS22HB and LPS25H Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 007/133] powerpc/mm: Build fix for non SPARSEMEM_VMEMAP config Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 012/133] printk: only unregister boot consoles when necessary Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 003/133] iio: magnetometer: st_magn_core: enable multiread by default for LIS3MDL Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 040/133] skd: Avoid that module unloading triggers a use-after-free Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 042/133] net: don't decrement kobj reference count on init failure Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 014/133] rtlwifi: rtl8821ae: Fix HW_VAR_NAV_UPPER operation Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 017/133] dlm: avoid double-free on error path in dlm_device_{register,unregister} Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 001/133] ARM: dts: dra7-evm: Rename mmc2_3v3 supply to evm_3v3_sw Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 015/133] powerpc/mm: Fix check of multiple 16G pages from device tree Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 026/133] scsi: zfcp: fix passing fsf_req to SCSI trace on TMF to correlate with HBA Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 006/133] media: docs-rst: v4l: Fix sink compose selection target documentation Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 034/133] btrfs: resume qgroup rescan on rw remount Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 036/133] perf events parse: Use just one parse events state struct Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 027/133] scsi: zfcp: fix missing trace records for early returns in TMF eh handlers Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 038/133] iwlwifi: pci: add new PCI ID for 7265D Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 025/133] scsi: zfcp: fix capping of unsuccessful GPN_FT SAN response trace records Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 037/133] drm/ttm: Fix accounting error when fail to get pages for pool Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 045/133] staging/rts5208: fix incorrect shift to extract upper nybble Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 016/133] PCI: shpchp: Enable bridge bus mastering if MSI is enabled Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 002/133] ARM: dts: dra7-evm: Correct the vmmc-supply for mmc2 Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 046/133] pwm: tiehrpwm: Fix runtime PM imbalance at unbind Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 044/133] media: lirc_zilog: driver only sends LIRCCODE Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 010/133] fcntl: Don't use ambiguous SIG_POLL si_codes Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 035/133] perf events parse: Rename parsing state struct to clearer name Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 024/133] scsi: zfcp: add handling for FCP_RESID_OVER to the fcp ingress path Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 020/133] media: v4l2-compat-ioctl32: Fix timespec conversion Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 041/133] skd: Submit requests to firmware before triggering the doorbell Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 005/133] perf tests attr: Fix no-delay test Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 103/133] bcache: fix for gc and write-back race Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 059/133] usb:xhci:Fix regression when ATI chipsets detected Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 077/133] ftrace: Fix selftest goto location on error Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 082/133] l2tp: pass tunnel pointer to ->session_create() Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 100/133] bcache: correct cache_dirty_target in __update_writeback_rate() Ben Hutchings
2017-11-22  3:41   ` Joe Perches
2017-11-23 13:08     ` Ben Hutchings
2017-11-23 14:21       ` Joe Perches
2017-11-22  1:58 ` [PATCH 3.16 071/133] powerpc/44x: Fix mask and shift to zero bug Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 060/133] ACPI, APEI, EINJ: Subtract any matching Register Region from Trigger resources Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 112/133] Input: xpad - add support for Xbox One controllers Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 107/133] genirq: Make sparse_irq_lock protect what it should protect Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 056/133] USB: core: Avoid race of async_completed() w/ usbdev_release() Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 120/133] sctp: do not peel off an assoc from one netns to another one Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 050/133] rtc: sa1100: fix unbalanced clk_prepare_enable/clk_disable_unprepare Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 072/133] powerpc: Fix DAR reporting when alignment handler faults Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 106/133] tracing: Apply trace_clock changes to instance max buffer Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 051/133] RDMA/usnic: Fix remove address space warning Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 097/133] bcache: Fix leak of bdev reference Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 088/133] MIPS: AR7: allow NULL clock for clk_get_rate Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 064/133] net/mlx4_core: Make explicit conversion to 64bit value Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 080/133] Revert "net: use lib/percpu_counter API for fragmentation mem accounting" Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 085/133] mac80211_hwsim: Use proper TX power Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 058/133] usb: Add device quirk for Logitech HD Pro Webcam C920-C Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 109/133] ipv6: fix memory leak with multiple tables during netns destruction Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 095/133] MIPS: microMIPS: Fix decoding of swsp16 instruction Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 052/133] IB/mlx5: Fix integer overflow when page_shift == 31 Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 113/133] Input: xpad - don't depend on endpoint order Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 127/133] mac80211: use constant time comparison with keys Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 070/133] scsi: qla2xxx: Fix an integer overflow in sysfs code Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 075/133] driver core: bus: Fix a potential double free Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 124/133] Input: gtco - fix potential out-of-bound access Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 049/133] perf tools: Really install manpages via 'make install-man' Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 083/133] mfd: max8998: Fix potential NULL pointer dereference Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 078/133] ARC: Re-enable MMU upon Machine Check exception Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 081/133] l2tp: prevent creation of sessions on terminated tunnels Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 126/133] net: qmi_wwan: fix divide by 0 on bad descriptors Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 066/133] USB: serial: option: add support for D-Link DWM-157 C1 Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 086/133] mac80211: flush hw_roc_start work before cancelling the ROC Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 048/133] f2fs: check hot_data for roll-forward recovery Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 073/133] powerpc: Correct instruction code for xxlor instruction Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 099/133] bcache: do not subtract sectors_to_gc for bypassed IO Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 133/133] kvm/x86: Avoid async PF preempting the kernel incorrectly Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 055/133] staging: lustre: obdclass: return -EFAULT if copy_from_user() fails Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 094/133] MIPS: microMIPS: Fix decoding of addiusp instruction Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 053/133] media: em28xx: calculate left volume level correctly Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 068/133] iwlwifi: mvm: Avoid deferring non bufferable frames Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 116/133] KVM: SVM: Add a missing 'break' statement Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 074/133] xen/events: events_fifo: Don't use {get,put}_cpu() in xen_evtchn_fifo_init() Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 096/133] MIPS: Stacktrace: Fix microMIPS stack unwinding on big endian systems Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 087/133] s390/mm: fix race on mm->context.flush_mm Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 104/133] bcache: fix bch_hprint crash and improve output Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 110/133] ipv6: fix typo in fib6_net_exit() Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 132/133] kvm/x86: Handle async PF in RCU read-side critical sections Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 131/133] VSOCK: Detach QP check should filter out non matching QPs Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 111/133] Input: ucb1400_ts - fix suspend and resume handling Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 076/133] md/bitmap: disable bitmap_resize for file-backed bitmaps Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 090/133] MIPS: Loongson 2F: allow NULL clock for clk_get_rate Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 125/133] net: cdc_ether: fix divide by 0 on bad descriptors Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 118/133] KVM: async_pf: Fix #DF due to inject "Page not Present" and "Page Ready" exceptions simultaneously Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 122/133] [media] cx231xx-cards: fix NULL-deref on missing association descriptor Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 101/133] bcache: Correct return value for sysfs attach errors Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 067/133] iwlwifi: mvm: simplify bufferable MMPDU check Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 115/133] smsc95xx: Configure pause time to 0xffff when tx flow control enabled Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 079/133] xfs: fix incorrect log_flushed on fsync Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 069/133] regulator: da9063: Return an error code on probe failure Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 119/133] Input: i8042 - add Gigabyte P57 to the keyboard reset table Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 130/133] VSOCK: Fix lockdep issue Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 089/133] MIPS: BCM63XX: allow NULL clock for clk_get_rate Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 117/133] IB/mlx4: fix sprintf format warning Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 128/133] mac80211: don't compare TKIP TX MIC key in reinstall prevention Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 108/133] bcache: initialize dirty stripes in flash_dev_run() Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 114/133] Input: xpad - validate USB endpoint type during probe Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 093/133] MIPS: microMIPS: Fix detection of addiusp instruction Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 098/133] bcache: fix sequential large write IO bypass Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 063/133] ARM: 8692/1: mm: abort uaccess retries upon fatal signal Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 061/133] IB/{qib, hfi1}: Avoid flow control testing for RDMA write operation Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 062/133] IB/usnic: check for allocation failure Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 121/133] USB: serial: console: fix use-after-free after failed setup Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 123/133] media: imon: Fix null-ptr-deref in imon_probe Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 065/133] scsi: aacraid: Fix command send race condition Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 129/133] VSOCK: sock_put wasn't safe to call in interrupt context Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 054/133] m68k: allow NULL clock for clk_get_rate Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 084/133] mfd: omap-usb-tll: Fix register offsets Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 091/133] MIPS: ralink: allow NULL clock for clk_get_rate Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 057/133] usb: quirks: add delay init quirk for Corsair Strafe RGB keyboard Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 102/133] bcache: fix crash on shutdown in passthrough mode Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 092/133] MIPS: Handle non word sized instructions when examining frame Ben Hutchings
2017-11-22  1:58 ` [PATCH 3.16 105/133] mm/vmstat.c: fix wrong comment Ben Hutchings
2017-11-22  7:41   ` Vlastimil Babka
2017-11-23 13:05     ` Ben Hutchings
2017-11-23 13:42       ` Michal Hocko
2017-11-22 15:00 ` [PATCH 3.16 000/133] 3.16.51-rc1 review Guenter Roeck
2017-11-22 20:51   ` Ben Hutchings

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).