From: Greg Kroah-Hartman Date: Thu, 9 Nov 2017 17:24:23 +0000 (+0100) Subject: 4.4-stable patches X-Git-Tag: v3.18.81~30 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5ebb6a1af633765cb05ae12656ed5f7e9870e9c8;p=thirdparty%2Fkernel%2Fstable-queue.git 4.4-stable patches added patches: adv7604-initialize-drive-strength-to-default-when-using-dt.patch arm-dts-imx53-qsb-common-fix-fec-pinmux-config.patch arm-omap2plus_defconfig-fix-probe-errors-on-uarts-5-and-6.patch crypto-vmx-disable-preemption-to-enable-vsx-in-aes_ctr.c.patch drm-drm_minor_register-clean-up-debugfs-on-failure.patch dt-bindings-add-lego-mindstorms-ev3-compatible-specification.patch dt-bindings-add-vendor-prefix-for-lego.patch dt-bindings-clockgen-add-compatible-string-for-ls1012a.patch ib-ipoib-change-list_del-to-list_del_init-in-the-tx-object.patch iio-trigger-free-trigger-resource-correctly.patch input-mpr121-handle-multiple-bits-change-of-status-register.patch input-mpr121-set-missing-event-capability.patch iommu-arm-smmu-v3-clear-prior-settings-when-updating-stes.patch ipsec-do-not-ignore-crypto-err-in-ah4-input.patch kvm-ppc-book-3s-xics-correct-the-real-mode-icp-rejecting-counter.patch net-dsa-select-net_switchdev.patch netfilter-nft_meta-deal-with-packet_loopback-in-netdev-family.patch pci-mvebu-handle-changes-to-the-bridge-windows-while-enabled.patch phy-increase-size-of-mii_bus_id_size-and-bus_id.patch powerpc-corenet-explicitly-disable-the-sdhc-controller-on-kmcoge4.patch s390-qeth-issue-startlan-as-first-ipa-command.patch serial-sh-sci-fix-register-offsets-for-the-irda-serial-port.patch usb-hcd-initialize-hcd-flags-to-0-when-rm-hcd.patch video-fbdev-pmag-ba-fb-remove-bad-__init-annotation.patch xen-netback-set-default-upper-limit-of-tx-rx-queues-to-8.patch --- diff --git a/queue-4.4/adv7604-initialize-drive-strength-to-default-when-using-dt.patch b/queue-4.4/adv7604-initialize-drive-strength-to-default-when-using-dt.patch new file mode 100644 index 00000000000..1348c780ef7 --- /dev/null +++ b/queue-4.4/adv7604-initialize-drive-strength-to-default-when-using-dt.patch @@ -0,0 +1,49 @@ +From foo@baz Thu Nov 9 18:22:51 CET 2017 +From: Lars-Peter Clausen +Date: Tue, 29 Nov 2016 09:23:48 -0200 +Subject: [media] adv7604: Initialize drive strength to default when using DT + +From: Lars-Peter Clausen + + +[ Upstream commit da8892d410db224d9a24104529794e6e37e0c100 ] + +The adv7604 driver platform data contains fields for configuring the drive +strength of the output pins. When probing the driver through DT these +fields are not explicitly initialized, which means they are left at 0. This +is a reserved setting for the drive strength configuration though and can +cause signal integrity issues. + +Whether these signal integrity issues are visible depends on the PCB +specifics (e.g. the higher the load capacitance for the output the more +visible the issue). But it has been observed on existing solutions at high +pixel clock rates. + +Initialize the drive strength settings to the power-on-reset value of the +device when probing through devicetree to avoid this issue. + +Fixes: 0e158be0162b ("adv7604: Add DT support") + +Signed-off-by: Lars-Peter Clausen +Reviewed-by: Laurent Pinchart +Tested-by: Niklas Söderlund +Signed-off-by: Hans Verkuil +Signed-off-by: Mauro Carvalho Chehab +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + drivers/media/i2c/adv7604.c | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/drivers/media/i2c/adv7604.c ++++ b/drivers/media/i2c/adv7604.c +@@ -2856,6 +2856,9 @@ static int adv76xx_parse_dt(struct adv76 + state->pdata.alt_data_sat = 1; + state->pdata.op_format_mode_sel = ADV7604_OP_FORMAT_MODE0; + state->pdata.bus_order = ADV7604_BUS_ORDER_RGB; ++ state->pdata.dr_str_data = ADV76XX_DR_STR_MEDIUM_HIGH; ++ state->pdata.dr_str_clk = ADV76XX_DR_STR_MEDIUM_HIGH; ++ state->pdata.dr_str_sync = ADV76XX_DR_STR_MEDIUM_HIGH; + + return 0; + } diff --git a/queue-4.4/arm-dts-imx53-qsb-common-fix-fec-pinmux-config.patch b/queue-4.4/arm-dts-imx53-qsb-common-fix-fec-pinmux-config.patch new file mode 100644 index 00000000000..514b2864358 --- /dev/null +++ b/queue-4.4/arm-dts-imx53-qsb-common-fix-fec-pinmux-config.patch @@ -0,0 +1,55 @@ +From foo@baz Thu Nov 9 18:22:51 CET 2017 +From: Patrick Bruenn +Date: Wed, 25 Jan 2017 06:25:48 +0100 +Subject: ARM: dts: imx53-qsb-common: fix FEC pinmux config + +From: Patrick Bruenn + + +[ Upstream commit 8b649e426336d7d4800ff9c82858328f4215ba01 ] + +The pinmux configuration in device tree was different from manual +muxing in /board/freescale/mx53loco/mx53loco.c +All pins were configured as NO_PAD_CTL(1 << 31), which was fine as the +bootloader already did the correct pinmuxing for us. +But recently u-boot is migrating to reuse device tree files from the +kernel tree, so it seems to be better to have the correct pinmuxing in +our files, too. + +Signed-off-by: Patrick Bruenn +Signed-off-by: Shawn Guo +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + arch/arm/boot/dts/imx53-qsb-common.dtsi | 20 ++++++++++---------- + 1 file changed, 10 insertions(+), 10 deletions(-) + +--- a/arch/arm/boot/dts/imx53-qsb-common.dtsi ++++ b/arch/arm/boot/dts/imx53-qsb-common.dtsi +@@ -215,16 +215,16 @@ + + pinctrl_fec: fecgrp { + fsl,pins = < +- MX53_PAD_FEC_MDC__FEC_MDC 0x80000000 +- MX53_PAD_FEC_MDIO__FEC_MDIO 0x80000000 +- MX53_PAD_FEC_REF_CLK__FEC_TX_CLK 0x80000000 +- MX53_PAD_FEC_RX_ER__FEC_RX_ER 0x80000000 +- MX53_PAD_FEC_CRS_DV__FEC_RX_DV 0x80000000 +- MX53_PAD_FEC_RXD1__FEC_RDATA_1 0x80000000 +- MX53_PAD_FEC_RXD0__FEC_RDATA_0 0x80000000 +- MX53_PAD_FEC_TX_EN__FEC_TX_EN 0x80000000 +- MX53_PAD_FEC_TXD1__FEC_TDATA_1 0x80000000 +- MX53_PAD_FEC_TXD0__FEC_TDATA_0 0x80000000 ++ MX53_PAD_FEC_MDC__FEC_MDC 0x4 ++ MX53_PAD_FEC_MDIO__FEC_MDIO 0x1fc ++ MX53_PAD_FEC_REF_CLK__FEC_TX_CLK 0x180 ++ MX53_PAD_FEC_RX_ER__FEC_RX_ER 0x180 ++ MX53_PAD_FEC_CRS_DV__FEC_RX_DV 0x180 ++ MX53_PAD_FEC_RXD1__FEC_RDATA_1 0x180 ++ MX53_PAD_FEC_RXD0__FEC_RDATA_0 0x180 ++ MX53_PAD_FEC_TX_EN__FEC_TX_EN 0x4 ++ MX53_PAD_FEC_TXD1__FEC_TDATA_1 0x4 ++ MX53_PAD_FEC_TXD0__FEC_TDATA_0 0x4 + >; + }; + diff --git a/queue-4.4/arm-omap2plus_defconfig-fix-probe-errors-on-uarts-5-and-6.patch b/queue-4.4/arm-omap2plus_defconfig-fix-probe-errors-on-uarts-5-and-6.patch new file mode 100644 index 00000000000..87b087b26a0 --- /dev/null +++ b/queue-4.4/arm-omap2plus_defconfig-fix-probe-errors-on-uarts-5-and-6.patch @@ -0,0 +1,30 @@ +From foo@baz Thu Nov 9 18:22:51 CET 2017 +From: Tony Lindgren +Date: Fri, 20 Jan 2017 12:13:19 -0800 +Subject: ARM: omap2plus_defconfig: Fix probe errors on UARTs 5 and 6 + +From: Tony Lindgren + + +[ Upstream commit 4cd6a59f5c1a9b0cca0da09fbba42b9450ffc899 ] + +We have more than four uarts on some SoCs and that can cause +noise with errors while booting. + +Signed-off-by: Tony Lindgren +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + arch/arm/configs/omap2plus_defconfig | 1 + + 1 file changed, 1 insertion(+) + +--- a/arch/arm/configs/omap2plus_defconfig ++++ b/arch/arm/configs/omap2plus_defconfig +@@ -221,6 +221,7 @@ CONFIG_SERIO=m + CONFIG_SERIAL_8250=y + CONFIG_SERIAL_8250_CONSOLE=y + CONFIG_SERIAL_8250_NR_UARTS=32 ++CONFIG_SERIAL_8250_RUNTIME_UARTS=6 + CONFIG_SERIAL_8250_EXTENDED=y + CONFIG_SERIAL_8250_MANY_PORTS=y + CONFIG_SERIAL_8250_SHARE_IRQ=y diff --git a/queue-4.4/crypto-vmx-disable-preemption-to-enable-vsx-in-aes_ctr.c.patch b/queue-4.4/crypto-vmx-disable-preemption-to-enable-vsx-in-aes_ctr.c.patch new file mode 100644 index 00000000000..74e05da7cc6 --- /dev/null +++ b/queue-4.4/crypto-vmx-disable-preemption-to-enable-vsx-in-aes_ctr.c.patch @@ -0,0 +1,68 @@ +From foo@baz Thu Nov 9 18:22:51 CET 2017 +From: Li Zhong +Date: Fri, 20 Jan 2017 16:35:33 +0800 +Subject: crypto: vmx - disable preemption to enable vsx in aes_ctr.c + +From: Li Zhong + + +[ Upstream commit 7dede913fc2ab9c0d3bff3a49e26fa9e858b0c13 ] + +Some preemptible check warnings were reported from enable_kernel_vsx(). This +patch disables preemption in aes_ctr.c before enabling vsx, and they are now +consistent with other files in the same directory. + +Signed-off-by: Li Zhong +Signed-off-by: Herbert Xu +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + drivers/crypto/vmx/aes_ctr.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +--- a/drivers/crypto/vmx/aes_ctr.c ++++ b/drivers/crypto/vmx/aes_ctr.c +@@ -80,11 +80,13 @@ static int p8_aes_ctr_setkey(struct cryp + int ret; + struct p8_aes_ctr_ctx *ctx = crypto_tfm_ctx(tfm); + ++ preempt_disable(); + pagefault_disable(); + enable_kernel_altivec(); + enable_kernel_vsx(); + ret = aes_p8_set_encrypt_key(key, keylen * 8, &ctx->enc_key); + pagefault_enable(); ++ preempt_enable(); + + ret += crypto_blkcipher_setkey(ctx->fallback, key, keylen); + return ret; +@@ -99,11 +101,13 @@ static void p8_aes_ctr_final(struct p8_a + u8 *dst = walk->dst.virt.addr; + unsigned int nbytes = walk->nbytes; + ++ preempt_disable(); + pagefault_disable(); + enable_kernel_altivec(); + enable_kernel_vsx(); + aes_p8_encrypt(ctrblk, keystream, &ctx->enc_key); + pagefault_enable(); ++ preempt_enable(); + + crypto_xor(keystream, src, nbytes); + memcpy(dst, keystream, nbytes); +@@ -132,6 +136,7 @@ static int p8_aes_ctr_crypt(struct blkci + blkcipher_walk_init(&walk, dst, src, nbytes); + ret = blkcipher_walk_virt_block(desc, &walk, AES_BLOCK_SIZE); + while ((nbytes = walk.nbytes) >= AES_BLOCK_SIZE) { ++ preempt_disable(); + pagefault_disable(); + enable_kernel_altivec(); + enable_kernel_vsx(); +@@ -143,6 +148,7 @@ static int p8_aes_ctr_crypt(struct blkci + &ctx->enc_key, + walk.iv); + pagefault_enable(); ++ preempt_enable(); + + /* We need to update IV mostly for last bytes/round */ + inc = (nbytes & AES_BLOCK_MASK) / AES_BLOCK_SIZE; diff --git a/queue-4.4/drm-drm_minor_register-clean-up-debugfs-on-failure.patch b/queue-4.4/drm-drm_minor_register-clean-up-debugfs-on-failure.patch new file mode 100644 index 00000000000..7762afdd9a4 --- /dev/null +++ b/queue-4.4/drm-drm_minor_register-clean-up-debugfs-on-failure.patch @@ -0,0 +1,33 @@ +From foo@baz Thu Nov 9 18:22:51 CET 2017 +From: Noralf Trønnes +Date: Thu, 26 Jan 2017 23:56:04 +0100 +Subject: drm: drm_minor_register(): Clean up debugfs on failure + +From: Noralf Trønnes + + +[ Upstream commit a67834f8bfa1e2f48bb27d07b9a552ba7c3af82a ] + +Call drm_debugfs_cleanup() in case drm_debugfs_init() fails to +cover for failure in the drm_driver.debugfs_init callback. + +Signed-off-by: Noralf Trønnes +Signed-off-by: Daniel Vetter +Link: http://patchwork.freedesktop.org/patch/msgid/20170126225621.12314-3-noralf@tronnes.org +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + drivers/gpu/drm/drm_drv.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/gpu/drm/drm_drv.c ++++ b/drivers/gpu/drm/drm_drv.c +@@ -312,7 +312,7 @@ static int drm_minor_register(struct drm + ret = drm_debugfs_init(minor, minor->index, drm_debugfs_root); + if (ret) { + DRM_ERROR("DRM: Failed to initialize /sys/kernel/debug/dri.\n"); +- return ret; ++ goto err_debugfs; + } + + ret = device_add(minor->kdev); diff --git a/queue-4.4/dt-bindings-add-lego-mindstorms-ev3-compatible-specification.patch b/queue-4.4/dt-bindings-add-lego-mindstorms-ev3-compatible-specification.patch new file mode 100644 index 00000000000..ca0763d14bc --- /dev/null +++ b/queue-4.4/dt-bindings-add-lego-mindstorms-ev3-compatible-specification.patch @@ -0,0 +1,34 @@ +From foo@baz Thu Nov 9 18:22:51 CET 2017 +From: David Lechner +Date: Fri, 13 Jan 2017 13:03:40 -0600 +Subject: dt-bindings: Add LEGO MINDSTORMS EV3 compatible specification + +From: David Lechner + + +[ Upstream commit 21078ab174c99885ca83a5c32db0d33b1617745e ] + +This adds the board level device tree specification for LEGO MINDSTORMS EV3 + +Acked-by: Rob Herring +Signed-off-by: David Lechner +Signed-off-by: Sekhar Nori +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + Documentation/devicetree/bindings/arm/davinci.txt | 4 ++++ + 1 file changed, 4 insertions(+) + +--- a/Documentation/devicetree/bindings/arm/davinci.txt ++++ b/Documentation/devicetree/bindings/arm/davinci.txt +@@ -9,6 +9,10 @@ EnBW AM1808 based CMC board + Required root node properties: + - compatible = "enbw,cmc", "ti,da850; + ++LEGO MINDSTORMS EV3 (AM1808 based) ++Required root node properties: ++ - compatible = "lego,ev3", "ti,da850"; ++ + Generic DaVinci Boards + ---------------------- + diff --git a/queue-4.4/dt-bindings-add-vendor-prefix-for-lego.patch b/queue-4.4/dt-bindings-add-vendor-prefix-for-lego.patch new file mode 100644 index 00000000000..5d25de85cf2 --- /dev/null +++ b/queue-4.4/dt-bindings-add-vendor-prefix-for-lego.patch @@ -0,0 +1,31 @@ +From foo@baz Thu Nov 9 18:22:51 CET 2017 +From: David Lechner +Date: Fri, 13 Jan 2017 13:03:39 -0600 +Subject: dt-bindings: Add vendor prefix for LEGO + +From: David Lechner + + +[ Upstream commit 7dcc31e2e68a386a29070384b51683ece80982bf ] + +Add a vendor prefix for LEGO Systems A/S + +Acked-by: Rob Herring +Signed-off-by: David Lechner +Signed-off-by: Sekhar Nori +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + Documentation/devicetree/bindings/vendor-prefixes.txt | 1 + + 1 file changed, 1 insertion(+) + +--- a/Documentation/devicetree/bindings/vendor-prefixes.txt ++++ b/Documentation/devicetree/bindings/vendor-prefixes.txt +@@ -126,6 +126,7 @@ keymile Keymile GmbH + kinetic Kinetic Technologies + lacie LaCie + lantiq Lantiq Semiconductor ++lego LEGO Systems A/S + lenovo Lenovo Group Ltd. + lg LG Corporation + linux Linux-specific binding diff --git a/queue-4.4/dt-bindings-clockgen-add-compatible-string-for-ls1012a.patch b/queue-4.4/dt-bindings-clockgen-add-compatible-string-for-ls1012a.patch new file mode 100644 index 00000000000..795872a9f3d --- /dev/null +++ b/queue-4.4/dt-bindings-clockgen-add-compatible-string-for-ls1012a.patch @@ -0,0 +1,30 @@ +From foo@baz Thu Nov 9 18:22:51 CET 2017 +From: Harninder Rai +Date: Wed, 9 Nov 2016 23:40:53 +0530 +Subject: dt-bindings: clockgen: Add compatible string for LS1012A + +From: Harninder Rai + + +[ Upstream commit 73447f68d7b2bc1df870da88b0e21d2bc1afc025 ] + +Signed-off-by: Harninder Rai +Signed-off-by: Bhaskar Upadhaya +Acked-by: Rob Herring +Signed-off-by: Shawn Guo +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + Documentation/devicetree/bindings/clock/qoriq-clock.txt | 1 + + 1 file changed, 1 insertion(+) + +--- a/Documentation/devicetree/bindings/clock/qoriq-clock.txt ++++ b/Documentation/devicetree/bindings/clock/qoriq-clock.txt +@@ -31,6 +31,7 @@ Required properties: + * "fsl,t4240-clockgen" + * "fsl,b4420-clockgen" + * "fsl,b4860-clockgen" ++ * "fsl,ls1012a-clockgen" + * "fsl,ls1021a-clockgen" + Chassis-version clock strings include: + * "fsl,qoriq-clockgen-1.0": for chassis 1.0 clocks diff --git a/queue-4.4/ib-ipoib-change-list_del-to-list_del_init-in-the-tx-object.patch b/queue-4.4/ib-ipoib-change-list_del-to-list_del_init-in-the-tx-object.patch new file mode 100644 index 00000000000..eda7b3ac1aa --- /dev/null +++ b/queue-4.4/ib-ipoib-change-list_del-to-list_del_init-in-the-tx-object.patch @@ -0,0 +1,41 @@ +From foo@baz Thu Nov 9 18:22:51 CET 2017 +From: Feras Daoud +Date: Wed, 28 Dec 2016 14:47:28 +0200 +Subject: IB/ipoib: Change list_del to list_del_init in the tx object + +From: Feras Daoud + + +[ Upstream commit 27d41d29c7f093f6f77843624fbb080c1b4a8b9c ] + +Since ipoib_cm_tx_start function and ipoib_cm_tx_reap function +belong to different work queues, they can run in parallel. +In this case if ipoib_cm_tx_reap calls list_del and release the +lock, ipoib_cm_tx_start may acquire it and call list_del_init +on the already deleted object. +Changing list_del to list_del_init in ipoib_cm_tx_reap fixes the problem. + +Fixes: 839fcaba355a ("IPoIB: Connected mode experimental support") +Signed-off-by: Feras Daoud +Signed-off-by: Erez Shitrit +Reviewed-by: Alex Vesker +Signed-off-by: Leon Romanovsky +Reviewed-by: Yuval Shaia +Signed-off-by: Doug Ledford +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + drivers/infiniband/ulp/ipoib/ipoib_cm.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/infiniband/ulp/ipoib/ipoib_cm.c ++++ b/drivers/infiniband/ulp/ipoib/ipoib_cm.c +@@ -1373,7 +1373,7 @@ static void ipoib_cm_tx_reap(struct work + + while (!list_empty(&priv->cm.reap_list)) { + p = list_entry(priv->cm.reap_list.next, typeof(*p), list); +- list_del(&p->list); ++ list_del_init(&p->list); + spin_unlock_irqrestore(&priv->lock, flags); + netif_tx_unlock_bh(dev); + ipoib_cm_tx_destroy(p); diff --git a/queue-4.4/iio-trigger-free-trigger-resource-correctly.patch b/queue-4.4/iio-trigger-free-trigger-resource-correctly.patch new file mode 100644 index 00000000000..866db6c3629 --- /dev/null +++ b/queue-4.4/iio-trigger-free-trigger-resource-correctly.patch @@ -0,0 +1,99 @@ +From foo@baz Thu Nov 9 18:22:51 CET 2017 +From: Alison Schofield +Date: Thu, 19 Jan 2017 19:47:38 -0800 +Subject: iio: trigger: free trigger resource correctly + +From: Alison Schofield + + +[ Upstream commit 10e840dfb0b7fc345082dd9e5fff3c1c02e7690e ] + +These stand-alone trigger drivers were using iio_trigger_put() +where they should have been using iio_trigger_free(). The +iio_trigger_put() adds a module_put which is bad since they +never did a module_get. + +In the sysfs driver, module_get/put's are used as triggers are +added & removed. This extra module_put() occurs on an error path +in the probe routine (probably rare). + +In the bfin-timer & interrupt trigger drivers, the module resources +are not explicitly managed, so it's doing a put on something that +was never get'd. It occurs on the probe error path and on the +remove path (not so rare). + +Tested with the sysfs trigger driver. +The bfin & interrupt drivers were build tested & inspected only. + +Signed-off-by: Alison Schofield +Signed-off-by: Jonathan Cameron +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + drivers/iio/trigger/iio-trig-interrupt.c | 8 ++++---- + drivers/iio/trigger/iio-trig-sysfs.c | 2 +- + drivers/staging/iio/trigger/iio-trig-bfin-timer.c | 4 ++-- + 3 files changed, 7 insertions(+), 7 deletions(-) + +--- a/drivers/iio/trigger/iio-trig-interrupt.c ++++ b/drivers/iio/trigger/iio-trig-interrupt.c +@@ -58,7 +58,7 @@ static int iio_interrupt_trigger_probe(s + trig_info = kzalloc(sizeof(*trig_info), GFP_KERNEL); + if (!trig_info) { + ret = -ENOMEM; +- goto error_put_trigger; ++ goto error_free_trigger; + } + iio_trigger_set_drvdata(trig, trig_info); + trig_info->irq = irq; +@@ -83,8 +83,8 @@ error_release_irq: + free_irq(irq, trig); + error_free_trig_info: + kfree(trig_info); +-error_put_trigger: +- iio_trigger_put(trig); ++error_free_trigger: ++ iio_trigger_free(trig); + error_ret: + return ret; + } +@@ -99,7 +99,7 @@ static int iio_interrupt_trigger_remove( + iio_trigger_unregister(trig); + free_irq(trig_info->irq, trig); + kfree(trig_info); +- iio_trigger_put(trig); ++ iio_trigger_free(trig); + + return 0; + } +--- a/drivers/iio/trigger/iio-trig-sysfs.c ++++ b/drivers/iio/trigger/iio-trig-sysfs.c +@@ -174,7 +174,7 @@ static int iio_sysfs_trigger_probe(int i + return 0; + + out2: +- iio_trigger_put(t->trig); ++ iio_trigger_free(t->trig); + free_t: + kfree(t); + out1: +--- a/drivers/staging/iio/trigger/iio-trig-bfin-timer.c ++++ b/drivers/staging/iio/trigger/iio-trig-bfin-timer.c +@@ -259,7 +259,7 @@ out_free_irq: + out1: + iio_trigger_unregister(st->trig); + out: +- iio_trigger_put(st->trig); ++ iio_trigger_free(st->trig); + return ret; + } + +@@ -272,7 +272,7 @@ static int iio_bfin_tmr_trigger_remove(s + peripheral_free(st->t->pin); + free_irq(st->irq, st); + iio_trigger_unregister(st->trig); +- iio_trigger_put(st->trig); ++ iio_trigger_free(st->trig); + + return 0; + } diff --git a/queue-4.4/input-mpr121-handle-multiple-bits-change-of-status-register.patch b/queue-4.4/input-mpr121-handle-multiple-bits-change-of-status-register.patch new file mode 100644 index 00000000000..4299d02316f --- /dev/null +++ b/queue-4.4/input-mpr121-handle-multiple-bits-change-of-status-register.patch @@ -0,0 +1,68 @@ +From foo@baz Thu Nov 9 18:22:51 CET 2017 +From: Akinobu Mita +Date: Sun, 15 Jan 2017 14:44:30 -0800 +Subject: Input: mpr121 - handle multiple bits change of status register + +From: Akinobu Mita + + +[ Upstream commit 08fea55e37f58371bffc5336a59e55d1f155955a ] + +This driver reports input events on their interrupts which are triggered +by the sensor's status register changes. But only single bit change is +reported in the interrupt handler. So if there are multiple bits are +changed at almost the same time, other press or release events are ignored. + +This fixes it by detecting all changed bits in the status register. + +Signed-off-by: Akinobu Mita +Signed-off-by: Dmitry Torokhov +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + drivers/input/keyboard/mpr121_touchkey.c | 23 ++++++++++++++--------- + 1 file changed, 14 insertions(+), 9 deletions(-) + +--- a/drivers/input/keyboard/mpr121_touchkey.c ++++ b/drivers/input/keyboard/mpr121_touchkey.c +@@ -87,7 +87,8 @@ static irqreturn_t mpr_touchkey_interrup + struct mpr121_touchkey *mpr121 = dev_id; + struct i2c_client *client = mpr121->client; + struct input_dev *input = mpr121->input_dev; +- unsigned int key_num, key_val, pressed; ++ unsigned long bit_changed; ++ unsigned int key_num; + int reg; + + reg = i2c_smbus_read_byte_data(client, ELE_TOUCH_STATUS_1_ADDR); +@@ -105,18 +106,22 @@ static irqreturn_t mpr_touchkey_interrup + + reg &= TOUCH_STATUS_MASK; + /* use old press bit to figure out which bit changed */ +- key_num = ffs(reg ^ mpr121->statusbits) - 1; +- pressed = reg & (1 << key_num); ++ bit_changed = reg ^ mpr121->statusbits; + mpr121->statusbits = reg; ++ for_each_set_bit(key_num, &bit_changed, mpr121->keycount) { ++ unsigned int key_val, pressed; + +- key_val = mpr121->keycodes[key_num]; ++ pressed = reg & BIT(key_num); ++ key_val = mpr121->keycodes[key_num]; + +- input_event(input, EV_MSC, MSC_SCAN, key_num); +- input_report_key(input, key_val, pressed); +- input_sync(input); ++ input_event(input, EV_MSC, MSC_SCAN, key_num); ++ input_report_key(input, key_val, pressed); ++ ++ dev_dbg(&client->dev, "key %d %d %s\n", key_num, key_val, ++ pressed ? "pressed" : "released"); + +- dev_dbg(&client->dev, "key %d %d %s\n", key_num, key_val, +- pressed ? "pressed" : "released"); ++ } ++ input_sync(input); + + out: + return IRQ_HANDLED; diff --git a/queue-4.4/input-mpr121-set-missing-event-capability.patch b/queue-4.4/input-mpr121-set-missing-event-capability.patch new file mode 100644 index 00000000000..413c56ab058 --- /dev/null +++ b/queue-4.4/input-mpr121-set-missing-event-capability.patch @@ -0,0 +1,34 @@ +From foo@baz Thu Nov 9 18:22:51 CET 2017 +From: Akinobu Mita +Date: Sun, 15 Jan 2017 14:44:05 -0800 +Subject: Input: mpr121 - set missing event capability + +From: Akinobu Mita + + +[ Upstream commit 9723ddc8fe0d76ce41fe0dc16afb241ec7d0a29d ] + +This driver reports misc scan input events on the sensor's status +register changes. But the event capability for them was not set in the +device initialization, so these events were ignored. + +This change adds the missing event capability. + +Signed-off-by: Akinobu Mita +Signed-off-by: Dmitry Torokhov +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + drivers/input/keyboard/mpr121_touchkey.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/input/keyboard/mpr121_touchkey.c ++++ b/drivers/input/keyboard/mpr121_touchkey.c +@@ -236,6 +236,7 @@ static int mpr_touchkey_probe(struct i2c + input_dev->id.bustype = BUS_I2C; + input_dev->dev.parent = &client->dev; + input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP); ++ input_set_capability(input_dev, EV_MSC, MSC_SCAN); + + input_dev->keycode = mpr121->keycodes; + input_dev->keycodesize = sizeof(mpr121->keycodes[0]); diff --git a/queue-4.4/iommu-arm-smmu-v3-clear-prior-settings-when-updating-stes.patch b/queue-4.4/iommu-arm-smmu-v3-clear-prior-settings-when-updating-stes.patch new file mode 100644 index 00000000000..190b6b78ecd --- /dev/null +++ b/queue-4.4/iommu-arm-smmu-v3-clear-prior-settings-when-updating-stes.patch @@ -0,0 +1,48 @@ +From foo@baz Thu Nov 9 18:22:51 CET 2017 +From: Nate Watterson +Date: Tue, 20 Dec 2016 23:11:48 -0500 +Subject: iommu/arm-smmu-v3: Clear prior settings when updating STEs + +From: Nate Watterson + + +[ Upstream commit 810871c57011eb3e89e6768932757f169d666cd2 ] + +To prevent corruption of the stage-1 context pointer field when +updating STEs, rebuild the entire containing dword instead of +clearing individual fields. + +Signed-off-by: Nate Watterson +Signed-off-by: Will Deacon +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + drivers/iommu/arm-smmu-v3.c | 10 ++-------- + 1 file changed, 2 insertions(+), 8 deletions(-) + +--- a/drivers/iommu/arm-smmu-v3.c ++++ b/drivers/iommu/arm-smmu-v3.c +@@ -1033,13 +1033,8 @@ static void arm_smmu_write_strtab_ent(st + } + } + +- /* Nuke the existing Config, as we're going to rewrite it */ +- val &= ~(STRTAB_STE_0_CFG_MASK << STRTAB_STE_0_CFG_SHIFT); +- +- if (ste->valid) +- val |= STRTAB_STE_0_V; +- else +- val &= ~STRTAB_STE_0_V; ++ /* Nuke the existing STE_0 value, as we're going to rewrite it */ ++ val = ste->valid ? STRTAB_STE_0_V : 0; + + if (ste->bypass) { + val |= disable_bypass ? STRTAB_STE_0_CFG_ABORT +@@ -1068,7 +1063,6 @@ static void arm_smmu_write_strtab_ent(st + val |= (ste->s1_cfg->cdptr_dma & STRTAB_STE_0_S1CTXPTR_MASK + << STRTAB_STE_0_S1CTXPTR_SHIFT) | + STRTAB_STE_0_CFG_S1_TRANS; +- + } + + if (ste->s2_cfg) { diff --git a/queue-4.4/ipsec-do-not-ignore-crypto-err-in-ah4-input.patch b/queue-4.4/ipsec-do-not-ignore-crypto-err-in-ah4-input.patch new file mode 100644 index 00000000000..8bd81eb3c4a --- /dev/null +++ b/queue-4.4/ipsec-do-not-ignore-crypto-err-in-ah4-input.patch @@ -0,0 +1,41 @@ +From foo@baz Thu Nov 9 18:22:51 CET 2017 +From: Gilad Ben-Yossef +Date: Mon, 16 Jan 2017 13:17:55 +0200 +Subject: IPsec: do not ignore crypto err in ah4 input + +From: Gilad Ben-Yossef + + +[ Upstream commit ebd89a2d0675f1325c2be5b7576fd8cb7e8defd0 ] + +ah4 input processing uses the asynchronous hash crypto API which +supplies an error code as part of the operation completion but +the error code was being ignored. + +Treat a crypto API error indication as a verification failure. + +While a crypto API reported error would almost certainly result +in a memcpy of the digest failing anyway and thus the security +risk seems minor, performing a memory compare on what might be +uninitialized memory is wrong. + +Signed-off-by: Gilad Ben-Yossef +Signed-off-by: Steffen Klassert +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + net/ipv4/ah4.c | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/net/ipv4/ah4.c ++++ b/net/ipv4/ah4.c +@@ -270,6 +270,9 @@ static void ah_input_done(struct crypto_ + int ihl = ip_hdrlen(skb); + int ah_hlen = (ah->hdrlen + 2) << 2; + ++ if (err) ++ goto out; ++ + work_iph = AH_SKB_CB(skb)->tmp; + auth_data = ah_tmp_auth(work_iph, ihl); + icv = ah_tmp_icv(ahp->ahash, auth_data, ahp->icv_trunc_len); diff --git a/queue-4.4/kvm-ppc-book-3s-xics-correct-the-real-mode-icp-rejecting-counter.patch b/queue-4.4/kvm-ppc-book-3s-xics-correct-the-real-mode-icp-rejecting-counter.patch new file mode 100644 index 00000000000..4cbe9c4a62f --- /dev/null +++ b/queue-4.4/kvm-ppc-book-3s-xics-correct-the-real-mode-icp-rejecting-counter.patch @@ -0,0 +1,52 @@ +From foo@baz Thu Nov 9 18:22:51 CET 2017 +From: Li Zhong +Date: Fri, 11 Nov 2016 12:57:33 +0800 +Subject: KVM: PPC: Book 3S: XICS: correct the real mode ICP rejecting counter + +From: Li Zhong + + +[ Upstream commit 37451bc95dee0e666927d6ffdda302dbbaaae6fa ] + +Some counters are added in Commit 6e0365b78273 ("KVM: PPC: Book3S HV: +Add ICP real mode counters"), to provide some performance statistics to +determine whether further optimizing is needed for real mode functions. + +The n_reject counter counts how many times ICP rejects an irq because of +priority in real mode. The redelivery of an lsi that is still asserted +after eoi doesn't fall into this category, so the increasement there is +removed. + +Also, it needs to be increased in icp_rm_deliver_irq() if it rejects +another one. + +Signed-off-by: Li Zhong +Signed-off-by: Paul Mackerras +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + arch/powerpc/kvm/book3s_hv_rm_xics.c | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +--- a/arch/powerpc/kvm/book3s_hv_rm_xics.c ++++ b/arch/powerpc/kvm/book3s_hv_rm_xics.c +@@ -280,6 +280,7 @@ static void icp_rm_deliver_irq(struct kv + */ + if (reject && reject != XICS_IPI) { + arch_spin_unlock(&ics->lock); ++ icp->n_reject++; + new_irq = reject; + goto again; + } +@@ -611,10 +612,8 @@ int kvmppc_rm_h_eoi(struct kvm_vcpu *vcp + state = &ics->irq_state[src]; + + /* Still asserted, resend it */ +- if (state->asserted) { +- icp->n_reject++; ++ if (state->asserted) + icp_rm_deliver_irq(xics, icp, irq); +- } + + if (!hlist_empty(&vcpu->kvm->irq_ack_notifier_list)) { + icp->rm_action |= XICS_RM_NOTIFY_EOI; diff --git a/queue-4.4/net-dsa-select-net_switchdev.patch b/queue-4.4/net-dsa-select-net_switchdev.patch new file mode 100644 index 00000000000..1fd7c473ec8 --- /dev/null +++ b/queue-4.4/net-dsa-select-net_switchdev.patch @@ -0,0 +1,44 @@ +From foo@baz Thu Nov 9 18:22:51 CET 2017 +From: Vivien Didelot +Date: Mon, 9 Jan 2017 16:49:26 -0500 +Subject: net: dsa: select NET_SWITCHDEV + +From: Vivien Didelot + + +[ Upstream commit 3a89eaa65db68bf53bf92dedc60084f810e1779a ] + +The support for DSA Ethernet switch chips depends on TCP/IP networking, +thus explicit that HAVE_NET_DSA depends on INET. + +DSA uses SWITCHDEV, thus select it instead of depending on it. + +Signed-off-by: Vivien Didelot +Reviewed-by: Andrew Lunn +Reviewed-by: Florian Fainelli +Tested-by: Randy Dunlap +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + net/dsa/Kconfig | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +--- a/net/dsa/Kconfig ++++ b/net/dsa/Kconfig +@@ -1,12 +1,13 @@ + config HAVE_NET_DSA + def_bool y +- depends on NETDEVICES && !S390 ++ depends on INET && NETDEVICES && !S390 + + # Drivers must select NET_DSA and the appropriate tagging format + + config NET_DSA + tristate "Distributed Switch Architecture" +- depends on HAVE_NET_DSA && NET_SWITCHDEV ++ depends on HAVE_NET_DSA ++ select NET_SWITCHDEV + select PHYLIB + ---help--- + Say Y if you want to enable support for the hardware switches supported diff --git a/queue-4.4/netfilter-nft_meta-deal-with-packet_loopback-in-netdev-family.patch b/queue-4.4/netfilter-nft_meta-deal-with-packet_loopback-in-netdev-family.patch new file mode 100644 index 00000000000..895e16d08ea --- /dev/null +++ b/queue-4.4/netfilter-nft_meta-deal-with-packet_loopback-in-netdev-family.patch @@ -0,0 +1,75 @@ +From foo@baz Thu Nov 9 18:22:51 CET 2017 +From: Liping Zhang +Date: Sat, 7 Jan 2017 21:33:55 +0800 +Subject: netfilter: nft_meta: deal with PACKET_LOOPBACK in netdev family + +From: Liping Zhang + + +[ Upstream commit f169fd695b192dd7b23aff8e69d25a1bc881bbfa ] + +After adding the following nft rule, then ping 224.0.0.1: + # nft add rule netdev t c pkttype host counter + +The warning complain message will be printed out again and again: + WARNING: CPU: 0 PID: 10182 at net/netfilter/nft_meta.c:163 \ + nft_meta_get_eval+0x3fe/0x460 [nft_meta] + [...] + Call Trace: + + dump_stack+0x85/0xc2 + __warn+0xcb/0xf0 + warn_slowpath_null+0x1d/0x20 + nft_meta_get_eval+0x3fe/0x460 [nft_meta] + nft_do_chain+0xff/0x5e0 [nf_tables] + +So we should deal with PACKET_LOOPBACK in netdev family too. For ipv4, +convert it to PACKET_BROADCAST/MULTICAST according to the destination +address's type; For ipv6, convert it to PACKET_MULTICAST directly. + +Signed-off-by: Liping Zhang +Signed-off-by: Pablo Neira Ayuso +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + net/netfilter/nft_meta.c | 28 +++++++++++++++++++++++++++- + 1 file changed, 27 insertions(+), 1 deletion(-) + +--- a/net/netfilter/nft_meta.c ++++ b/net/netfilter/nft_meta.c +@@ -151,8 +151,34 @@ void nft_meta_get_eval(const struct nft_ + else + *dest = PACKET_BROADCAST; + break; ++ case NFPROTO_NETDEV: ++ switch (skb->protocol) { ++ case htons(ETH_P_IP): { ++ int noff = skb_network_offset(skb); ++ struct iphdr *iph, _iph; ++ ++ iph = skb_header_pointer(skb, noff, ++ sizeof(_iph), &_iph); ++ if (!iph) ++ goto err; ++ ++ if (ipv4_is_multicast(iph->daddr)) ++ *dest = PACKET_MULTICAST; ++ else ++ *dest = PACKET_BROADCAST; ++ ++ break; ++ } ++ case htons(ETH_P_IPV6): ++ *dest = PACKET_MULTICAST; ++ break; ++ default: ++ WARN_ON_ONCE(1); ++ goto err; ++ } ++ break; + default: +- WARN_ON(1); ++ WARN_ON_ONCE(1); + goto err; + } + break; diff --git a/queue-4.4/pci-mvebu-handle-changes-to-the-bridge-windows-while-enabled.patch b/queue-4.4/pci-mvebu-handle-changes-to-the-bridge-windows-while-enabled.patch new file mode 100644 index 00000000000..51d09f9f9f9 --- /dev/null +++ b/queue-4.4/pci-mvebu-handle-changes-to-the-bridge-windows-while-enabled.patch @@ -0,0 +1,184 @@ +From foo@baz Thu Nov 9 18:22:51 CET 2017 +From: Jason Gunthorpe +Date: Mon, 12 Dec 2016 11:30:20 -0700 +Subject: PCI: mvebu: Handle changes to the bridge windows while enabled + +From: Jason Gunthorpe + + +[ Upstream commit d9bf28e2650fe3eeefed7e34841aea07d10c6543 ] + +The PCI core will write to the bridge window config multiple times while +they are enabled. This can lead to mbus failures like this: + + mvebu_mbus: cannot add window '4:e8', conflicts with another window + mvebu-pcie mbus:pex@e0000000: Could not create MBus window at [mem 0xe0000000-0xe00fffff]: -22 + +For me this is happening during a hotplug cycle. The PCI core is not +changing the values, just writing them twice while active. + +The patch addresses the general case of any change to an active window, but +not atomically. The code is slightly refactored so io and mem can share +more of the window logic. + +Signed-off-by: Jason Gunthorpe +Signed-off-by: Bjorn Helgaas +Acked-by: Jason Cooper +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + drivers/pci/host/pci-mvebu.c | 101 +++++++++++++++++++++++++------------------ + 1 file changed, 60 insertions(+), 41 deletions(-) + +--- a/drivers/pci/host/pci-mvebu.c ++++ b/drivers/pci/host/pci-mvebu.c +@@ -131,6 +131,12 @@ struct mvebu_pcie { + int nports; + }; + ++struct mvebu_pcie_window { ++ phys_addr_t base; ++ phys_addr_t remap; ++ size_t size; ++}; ++ + /* Structure representing one PCIe interface */ + struct mvebu_pcie_port { + char *name; +@@ -148,10 +154,8 @@ struct mvebu_pcie_port { + struct mvebu_sw_pci_bridge bridge; + struct device_node *dn; + struct mvebu_pcie *pcie; +- phys_addr_t memwin_base; +- size_t memwin_size; +- phys_addr_t iowin_base; +- size_t iowin_size; ++ struct mvebu_pcie_window memwin; ++ struct mvebu_pcie_window iowin; + u32 saved_pcie_stat; + }; + +@@ -377,23 +381,45 @@ static void mvebu_pcie_add_windows(struc + } + } + ++static void mvebu_pcie_set_window(struct mvebu_pcie_port *port, ++ unsigned int target, unsigned int attribute, ++ const struct mvebu_pcie_window *desired, ++ struct mvebu_pcie_window *cur) ++{ ++ if (desired->base == cur->base && desired->remap == cur->remap && ++ desired->size == cur->size) ++ return; ++ ++ if (cur->size != 0) { ++ mvebu_pcie_del_windows(port, cur->base, cur->size); ++ cur->size = 0; ++ cur->base = 0; ++ ++ /* ++ * If something tries to change the window while it is enabled ++ * the change will not be done atomically. That would be ++ * difficult to do in the general case. ++ */ ++ } ++ ++ if (desired->size == 0) ++ return; ++ ++ mvebu_pcie_add_windows(port, target, attribute, desired->base, ++ desired->size, desired->remap); ++ *cur = *desired; ++} ++ + static void mvebu_pcie_handle_iobase_change(struct mvebu_pcie_port *port) + { +- phys_addr_t iobase; ++ struct mvebu_pcie_window desired = {}; + + /* Are the new iobase/iolimit values invalid? */ + if (port->bridge.iolimit < port->bridge.iobase || + port->bridge.iolimitupper < port->bridge.iobaseupper || + !(port->bridge.command & PCI_COMMAND_IO)) { +- +- /* If a window was configured, remove it */ +- if (port->iowin_base) { +- mvebu_pcie_del_windows(port, port->iowin_base, +- port->iowin_size); +- port->iowin_base = 0; +- port->iowin_size = 0; +- } +- ++ mvebu_pcie_set_window(port, port->io_target, port->io_attr, ++ &desired, &port->iowin); + return; + } + +@@ -410,32 +436,27 @@ static void mvebu_pcie_handle_iobase_cha + * specifications. iobase is the bus address, port->iowin_base + * is the CPU address. + */ +- iobase = ((port->bridge.iobase & 0xF0) << 8) | +- (port->bridge.iobaseupper << 16); +- port->iowin_base = port->pcie->io.start + iobase; +- port->iowin_size = ((0xFFF | ((port->bridge.iolimit & 0xF0) << 8) | +- (port->bridge.iolimitupper << 16)) - +- iobase) + 1; +- +- mvebu_pcie_add_windows(port, port->io_target, port->io_attr, +- port->iowin_base, port->iowin_size, +- iobase); ++ desired.remap = ((port->bridge.iobase & 0xF0) << 8) | ++ (port->bridge.iobaseupper << 16); ++ desired.base = port->pcie->io.start + desired.remap; ++ desired.size = ((0xFFF | ((port->bridge.iolimit & 0xF0) << 8) | ++ (port->bridge.iolimitupper << 16)) - ++ desired.remap) + ++ 1; ++ ++ mvebu_pcie_set_window(port, port->io_target, port->io_attr, &desired, ++ &port->iowin); + } + + static void mvebu_pcie_handle_membase_change(struct mvebu_pcie_port *port) + { ++ struct mvebu_pcie_window desired = {.remap = MVEBU_MBUS_NO_REMAP}; ++ + /* Are the new membase/memlimit values invalid? */ + if (port->bridge.memlimit < port->bridge.membase || + !(port->bridge.command & PCI_COMMAND_MEMORY)) { +- +- /* If a window was configured, remove it */ +- if (port->memwin_base) { +- mvebu_pcie_del_windows(port, port->memwin_base, +- port->memwin_size); +- port->memwin_base = 0; +- port->memwin_size = 0; +- } +- ++ mvebu_pcie_set_window(port, port->mem_target, port->mem_attr, ++ &desired, &port->memwin); + return; + } + +@@ -445,14 +466,12 @@ static void mvebu_pcie_handle_membase_ch + * window to setup, according to the PCI-to-PCI bridge + * specifications. + */ +- port->memwin_base = ((port->bridge.membase & 0xFFF0) << 16); +- port->memwin_size = +- (((port->bridge.memlimit & 0xFFF0) << 16) | 0xFFFFF) - +- port->memwin_base + 1; +- +- mvebu_pcie_add_windows(port, port->mem_target, port->mem_attr, +- port->memwin_base, port->memwin_size, +- MVEBU_MBUS_NO_REMAP); ++ desired.base = ((port->bridge.membase & 0xFFF0) << 16); ++ desired.size = (((port->bridge.memlimit & 0xFFF0) << 16) | 0xFFFFF) - ++ desired.base + 1; ++ ++ mvebu_pcie_set_window(port, port->mem_target, port->mem_attr, &desired, ++ &port->memwin); + } + + /* diff --git a/queue-4.4/phy-increase-size-of-mii_bus_id_size-and-bus_id.patch b/queue-4.4/phy-increase-size-of-mii_bus_id_size-and-bus_id.patch new file mode 100644 index 00000000000..e94e34e25c3 --- /dev/null +++ b/queue-4.4/phy-increase-size-of-mii_bus_id_size-and-bus_id.patch @@ -0,0 +1,49 @@ +From foo@baz Thu Nov 9 18:22:51 CET 2017 +From: Volodymyr Bendiuga +Date: Thu, 19 Jan 2017 17:05:04 +0100 +Subject: phy: increase size of MII_BUS_ID_SIZE and bus_id + +From: Volodymyr Bendiuga + + +[ Upstream commit 4567d686f5c6d955e57a3afa1741944c1e7f4033 ] + +Some bus names are pretty long and do not fit into +17 chars. Increase therefore MII_BUS_ID_SIZE and +phy_fixup.bus_id to larger number. Now mii_bus.id +can host larger name. + +Signed-off-by: Volodymyr Bendiuga +Signed-off-by: Magnus Öberg +Reviewed-by: Andrew Lunn +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + include/linux/phy.h | 8 ++------ + 1 file changed, 2 insertions(+), 6 deletions(-) + +--- a/include/linux/phy.h ++++ b/include/linux/phy.h +@@ -136,11 +136,7 @@ static inline const char *phy_modes(phy_ + /* Used when trying to connect to a specific phy (mii bus id:phy device id) */ + #define PHY_ID_FMT "%s:%02x" + +-/* +- * Need to be a little smaller than phydev->dev.bus_id to leave room +- * for the ":%02x" +- */ +-#define MII_BUS_ID_SIZE (20 - 3) ++#define MII_BUS_ID_SIZE 61 + + /* Or MII_ADDR_C45 into regnum for read/write on mii_bus to enable the 21 bit + IEEE 802.3ae clause 45 addressing mode used by 10GIGE phy chips. */ +@@ -599,7 +595,7 @@ struct phy_driver { + /* A Structure for boards to register fixups with the PHY Lib */ + struct phy_fixup { + struct list_head list; +- char bus_id[20]; ++ char bus_id[MII_BUS_ID_SIZE + 3]; + u32 phy_uid; + u32 phy_uid_mask; + int (*run)(struct phy_device *phydev); diff --git a/queue-4.4/powerpc-corenet-explicitly-disable-the-sdhc-controller-on-kmcoge4.patch b/queue-4.4/powerpc-corenet-explicitly-disable-the-sdhc-controller-on-kmcoge4.patch new file mode 100644 index 00000000000..fc434d503d8 --- /dev/null +++ b/queue-4.4/powerpc-corenet-explicitly-disable-the-sdhc-controller-on-kmcoge4.patch @@ -0,0 +1,34 @@ +From foo@baz Thu Nov 9 18:22:51 CET 2017 +From: Valentin Longchamp +Date: Thu, 15 Dec 2016 14:22:26 +0100 +Subject: powerpc/corenet: explicitly disable the SDHC controller on kmcoge4 + +From: Valentin Longchamp + + +[ Upstream commit a674c7d470bb47e82f4eb1fa944eadeac2f6bbaf ] + +It is not implemented on the kmcoge4 hardware and if not disabled it +leads to error messages with the corenet32_smp_defconfig. + +Signed-off-by: Valentin Longchamp +Signed-off-by: Scott Wood +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + arch/powerpc/boot/dts/fsl/kmcoge4.dts | 4 ++++ + 1 file changed, 4 insertions(+) + +--- a/arch/powerpc/boot/dts/fsl/kmcoge4.dts ++++ b/arch/powerpc/boot/dts/fsl/kmcoge4.dts +@@ -83,6 +83,10 @@ + }; + }; + ++ sdhc@114000 { ++ status = "disabled"; ++ }; ++ + i2c@119000 { + status = "disabled"; + }; diff --git a/queue-4.4/s390-qeth-issue-startlan-as-first-ipa-command.patch b/queue-4.4/s390-qeth-issue-startlan-as-first-ipa-command.patch new file mode 100644 index 00000000000..03849282863 --- /dev/null +++ b/queue-4.4/s390-qeth-issue-startlan-as-first-ipa-command.patch @@ -0,0 +1,145 @@ +From foo@baz Thu Nov 9 18:22:51 CET 2017 +From: Julian Wiedmann +Date: Thu, 12 Jan 2017 15:48:42 +0100 +Subject: s390/qeth: issue STARTLAN as first IPA command + +From: Julian Wiedmann + + +[ Upstream commit 1034051045d125579ab1e8fcd5a724eeb0e70149 ] + +STARTLAN needs to be the first IPA command after MPC initialization +completes. +So move the qeth_send_startlan() call from the layer disciplines +into the core path, right after the MPC handshake. +While at it, replace the magic LAN OFFLINE return code +with the existing enum. + +Signed-off-by: Julian Wiedmann +Reviewed-by: Thomas Richter +Reviewed-by: Ursula Braun +Signed-off-by: David S. Miller +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + drivers/s390/net/qeth_core.h | 1 - + drivers/s390/net/qeth_core_main.c | 21 +++++++++++++++++---- + drivers/s390/net/qeth_l2_main.c | 15 --------------- + drivers/s390/net/qeth_l3_main.c | 15 --------------- + 4 files changed, 17 insertions(+), 35 deletions(-) + +--- a/drivers/s390/net/qeth_core.h ++++ b/drivers/s390/net/qeth_core.h +@@ -909,7 +909,6 @@ void qeth_clear_thread_running_bit(struc + int qeth_core_hardsetup_card(struct qeth_card *); + void qeth_print_status_message(struct qeth_card *); + int qeth_init_qdio_queues(struct qeth_card *); +-int qeth_send_startlan(struct qeth_card *); + int qeth_send_ipa_cmd(struct qeth_card *, struct qeth_cmd_buffer *, + int (*reply_cb) + (struct qeth_card *, struct qeth_reply *, unsigned long), +--- a/drivers/s390/net/qeth_core_main.c ++++ b/drivers/s390/net/qeth_core_main.c +@@ -2955,7 +2955,7 @@ int qeth_send_ipa_cmd(struct qeth_card * + } + EXPORT_SYMBOL_GPL(qeth_send_ipa_cmd); + +-int qeth_send_startlan(struct qeth_card *card) ++static int qeth_send_startlan(struct qeth_card *card) + { + int rc; + struct qeth_cmd_buffer *iob; +@@ -2968,7 +2968,6 @@ int qeth_send_startlan(struct qeth_card + rc = qeth_send_ipa_cmd(card, iob, NULL, NULL); + return rc; + } +-EXPORT_SYMBOL_GPL(qeth_send_startlan); + + static int qeth_default_setadapterparms_cb(struct qeth_card *card, + struct qeth_reply *reply, unsigned long data) +@@ -5080,6 +5079,20 @@ retriable: + goto out; + } + ++ rc = qeth_send_startlan(card); ++ if (rc) { ++ QETH_DBF_TEXT_(SETUP, 2, "6err%d", rc); ++ if (rc == IPA_RC_LAN_OFFLINE) { ++ dev_warn(&card->gdev->dev, ++ "The LAN is offline\n"); ++ card->lan_online = 0; ++ } else { ++ rc = -ENODEV; ++ goto out; ++ } ++ } else ++ card->lan_online = 1; ++ + card->options.ipa4.supported_funcs = 0; + card->options.ipa6.supported_funcs = 0; + card->options.adp.supported_funcs = 0; +@@ -5091,14 +5104,14 @@ retriable: + if (qeth_is_supported(card, IPA_SETADAPTERPARMS)) { + rc = qeth_query_setadapterparms(card); + if (rc < 0) { +- QETH_DBF_TEXT_(SETUP, 2, "6err%d", rc); ++ QETH_DBF_TEXT_(SETUP, 2, "7err%d", rc); + goto out; + } + } + if (qeth_adp_supported(card, IPA_SETADP_SET_DIAG_ASSIST)) { + rc = qeth_query_setdiagass(card); + if (rc < 0) { +- QETH_DBF_TEXT_(SETUP, 2, "7err%d", rc); ++ QETH_DBF_TEXT_(SETUP, 2, "8err%d", rc); + goto out; + } + } +--- a/drivers/s390/net/qeth_l2_main.c ++++ b/drivers/s390/net/qeth_l2_main.c +@@ -1203,21 +1203,6 @@ static int __qeth_l2_set_online(struct c + /* softsetup */ + QETH_DBF_TEXT(SETUP, 2, "softsetp"); + +- rc = qeth_send_startlan(card); +- if (rc) { +- QETH_DBF_TEXT_(SETUP, 2, "1err%d", rc); +- if (rc == 0xe080) { +- dev_warn(&card->gdev->dev, +- "The LAN is offline\n"); +- card->lan_online = 0; +- goto contin; +- } +- rc = -ENODEV; +- goto out_remove; +- } else +- card->lan_online = 1; +- +-contin: + if ((card->info.type == QETH_CARD_TYPE_OSD) || + (card->info.type == QETH_CARD_TYPE_OSX)) { + if (qeth_l2_start_ipassists(card)) +--- a/drivers/s390/net/qeth_l3_main.c ++++ b/drivers/s390/net/qeth_l3_main.c +@@ -3298,21 +3298,6 @@ static int __qeth_l3_set_online(struct c + /* softsetup */ + QETH_DBF_TEXT(SETUP, 2, "softsetp"); + +- rc = qeth_send_startlan(card); +- if (rc) { +- QETH_DBF_TEXT_(SETUP, 2, "1err%d", rc); +- if (rc == 0xe080) { +- dev_warn(&card->gdev->dev, +- "The LAN is offline\n"); +- card->lan_online = 0; +- goto contin; +- } +- rc = -ENODEV; +- goto out_remove; +- } else +- card->lan_online = 1; +- +-contin: + rc = qeth_l3_setadapter_parms(card); + if (rc) + QETH_DBF_TEXT_(SETUP, 2, "2err%04x", rc); diff --git a/queue-4.4/serial-sh-sci-fix-register-offsets-for-the-irda-serial-port.patch b/queue-4.4/serial-sh-sci-fix-register-offsets-for-the-irda-serial-port.patch new file mode 100644 index 00000000000..f89673331a0 --- /dev/null +++ b/queue-4.4/serial-sh-sci-fix-register-offsets-for-the-irda-serial-port.patch @@ -0,0 +1,64 @@ +From foo@baz Thu Nov 9 18:22:51 CET 2017 +From: Laurent Pinchart +Date: Wed, 11 Jan 2017 16:43:32 +0200 +Subject: serial: sh-sci: Fix register offsets for the IRDA serial port + +From: Laurent Pinchart + + +[ Upstream commit a752ba18af8285e3eeda572f40dddaebff0c3621 ] + +Even though most of its registers are 8-bit wide, the IRDA has two +16-bit registers that make it a 16-bit peripheral and not a 8-bit +peripheral with addresses shifted by one. Fix the registers offset in +the driver and the platform data regshift value. + +Signed-off-by: Laurent Pinchart +Reviewed-by: Geert Uytterhoeven +Signed-off-by: Greg Kroah-Hartman +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + arch/sh/kernel/cpu/sh3/setup-sh770x.c | 1 - + drivers/tty/serial/sh-sci.c | 17 ++++++++--------- + 2 files changed, 8 insertions(+), 10 deletions(-) + +--- a/arch/sh/kernel/cpu/sh3/setup-sh770x.c ++++ b/arch/sh/kernel/cpu/sh3/setup-sh770x.c +@@ -165,7 +165,6 @@ static struct plat_sci_port scif2_platfo + .scscr = SCSCR_TE | SCSCR_RE, + .type = PORT_IRDA, + .ops = &sh770x_sci_port_ops, +- .regshift = 1, + }; + + static struct resource scif2_resources[] = { +--- a/drivers/tty/serial/sh-sci.c ++++ b/drivers/tty/serial/sh-sci.c +@@ -163,18 +163,17 @@ static const struct plat_sci_reg sci_reg + }, + + /* +- * Common definitions for legacy IrDA ports, dependent on +- * regshift value. ++ * Common definitions for legacy IrDA ports. + */ + [SCIx_IRDA_REGTYPE] = { + [SCSMR] = { 0x00, 8 }, +- [SCBRR] = { 0x01, 8 }, +- [SCSCR] = { 0x02, 8 }, +- [SCxTDR] = { 0x03, 8 }, +- [SCxSR] = { 0x04, 8 }, +- [SCxRDR] = { 0x05, 8 }, +- [SCFCR] = { 0x06, 8 }, +- [SCFDR] = { 0x07, 16 }, ++ [SCBRR] = { 0x02, 8 }, ++ [SCSCR] = { 0x04, 8 }, ++ [SCxTDR] = { 0x06, 8 }, ++ [SCxSR] = { 0x08, 16 }, ++ [SCxRDR] = { 0x0a, 8 }, ++ [SCFCR] = { 0x0c, 8 }, ++ [SCFDR] = { 0x0e, 16 }, + [SCTFDR] = sci_reg_invalid, + [SCRFDR] = sci_reg_invalid, + [SCSPTR] = sci_reg_invalid, diff --git a/queue-4.4/series b/queue-4.4/series new file mode 100644 index 00000000000..cc0fecdba42 --- /dev/null +++ b/queue-4.4/series @@ -0,0 +1,25 @@ +adv7604-initialize-drive-strength-to-default-when-using-dt.patch +video-fbdev-pmag-ba-fb-remove-bad-__init-annotation.patch +pci-mvebu-handle-changes-to-the-bridge-windows-while-enabled.patch +xen-netback-set-default-upper-limit-of-tx-rx-queues-to-8.patch +arm-dts-imx53-qsb-common-fix-fec-pinmux-config.patch +dt-bindings-clockgen-add-compatible-string-for-ls1012a.patch +drm-drm_minor_register-clean-up-debugfs-on-failure.patch +kvm-ppc-book-3s-xics-correct-the-real-mode-icp-rejecting-counter.patch +iommu-arm-smmu-v3-clear-prior-settings-when-updating-stes.patch +powerpc-corenet-explicitly-disable-the-sdhc-controller-on-kmcoge4.patch +arm-omap2plus_defconfig-fix-probe-errors-on-uarts-5-and-6.patch +crypto-vmx-disable-preemption-to-enable-vsx-in-aes_ctr.c.patch +iio-trigger-free-trigger-resource-correctly.patch +dt-bindings-add-lego-mindstorms-ev3-compatible-specification.patch +dt-bindings-add-vendor-prefix-for-lego.patch +phy-increase-size-of-mii_bus_id_size-and-bus_id.patch +serial-sh-sci-fix-register-offsets-for-the-irda-serial-port.patch +usb-hcd-initialize-hcd-flags-to-0-when-rm-hcd.patch +netfilter-nft_meta-deal-with-packet_loopback-in-netdev-family.patch +ipsec-do-not-ignore-crypto-err-in-ah4-input.patch +input-mpr121-handle-multiple-bits-change-of-status-register.patch +input-mpr121-set-missing-event-capability.patch +ib-ipoib-change-list_del-to-list_del_init-in-the-tx-object.patch +s390-qeth-issue-startlan-as-first-ipa-command.patch +net-dsa-select-net_switchdev.patch diff --git a/queue-4.4/usb-hcd-initialize-hcd-flags-to-0-when-rm-hcd.patch b/queue-4.4/usb-hcd-initialize-hcd-flags-to-0-when-rm-hcd.patch new file mode 100644 index 00000000000..f8c8b2499ae --- /dev/null +++ b/queue-4.4/usb-hcd-initialize-hcd-flags-to-0-when-rm-hcd.patch @@ -0,0 +1,74 @@ +From foo@baz Thu Nov 9 18:22:51 CET 2017 +From: William wu +Date: Fri, 13 Jan 2017 11:04:22 +0800 +Subject: usb: hcd: initialize hcd->flags to 0 when rm hcd + +From: William wu + + +[ Upstream commit 76b8db0d480e8045e1a1902fc9ab143b3b9ef115 ] + +On some platforms(e.g. rk3399 board), we can call hcd_add/remove +consecutively without calling usb_put_hcd/usb_create_hcd in between, +so hcd->flags can be stale. + +If the HC dies due to whatever reason then without this patch we get +the below error on next hcd_add. + +[173.296154] xhci-hcd xhci-hcd.2.auto: HC died; cleaning up +[173.296209] xhci-hcd xhci-hcd.2.auto: xHCI Host Controller +[173.296762] xhci-hcd xhci-hcd.2.auto: new USB bus registered, assigned bus number 6 +[173.296931] usb usb6: We don't know the algorithms for LPM for this host, disabling LPM. +[173.297179] usb usb6: New USB device found, idVendor=1d6b, idProduct=0003 +[173.297203] usb usb6: New USB device strings: Mfr=3, Product=2, SerialNumber=1 +[173.297222] usb usb6: Product: xHCI Host Controller +[173.297240] usb usb6: Manufacturer: Linux 4.4.21 xhci-hcd +[173.297257] usb usb6: SerialNumber: xhci-hcd.2.auto +[173.298680] hub 6-0:1.0: USB hub found +[173.298749] hub 6-0:1.0: 1 port detected +[173.299382] rockchip-dwc3 usb@fe800000: USB HOST connected +[173.395418] hub 5-0:1.0: activate --> -19 +[173.603447] irq 228: nobody cared (try booting with the "irqpoll" option) +[173.603493] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 4.4.21 #9 +[173.603513] Hardware name: Google Kevin (DT) +[173.603531] Call trace: +[173.603568] [] dump_backtrace+0x0/0x160 +[173.603596] [] show_stack+0x20/0x28 +[173.603623] [] dump_stack+0x90/0xb0 +[173.603650] [] __report_bad_irq+0x48/0xe8 +[173.603674] [] note_interrupt+0x1e8/0x28c +[173.603698] [] handle_irq_event_percpu+0x1d4/0x25c +[173.603722] [] handle_irq_event+0x4c/0x7c +[173.603748] [] handle_fasteoi_irq+0xb4/0x124 +[173.603777] [] generic_handle_irq+0x30/0x44 +[173.603804] [] __handle_domain_irq+0x90/0xbc +[173.603827] [] gic_handle_irq+0xcc/0x188 +... +[173.604500] [] el1_irq+0x80/0xf8 +[173.604530] [] cpu_startup_entry+0x38/0x3cc +[173.604558] [] rest_init+0x8c/0x94 +[173.604585] [] start_kernel+0x3d0/0x3fc +[173.604607] [<0000000000b16000>] 0xb16000 +[173.604622] handlers: +[173.604648] [] usb_hcd_irq +[173.604673] Disabling IRQ #228 + +Signed-off-by: William wu +Acked-by: Roger Quadros +Signed-off-by: Greg Kroah-Hartman +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + drivers/usb/core/hcd.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/usb/core/hcd.c ++++ b/drivers/usb/core/hcd.c +@@ -2997,6 +2997,7 @@ void usb_remove_hcd(struct usb_hcd *hcd) + } + + usb_put_invalidate_rhdev(hcd); ++ hcd->flags = 0; + } + EXPORT_SYMBOL_GPL(usb_remove_hcd); + diff --git a/queue-4.4/video-fbdev-pmag-ba-fb-remove-bad-__init-annotation.patch b/queue-4.4/video-fbdev-pmag-ba-fb-remove-bad-__init-annotation.patch new file mode 100644 index 00000000000..ecd0f1f489c --- /dev/null +++ b/queue-4.4/video-fbdev-pmag-ba-fb-remove-bad-__init-annotation.patch @@ -0,0 +1,41 @@ +From foo@baz Thu Nov 9 18:22:51 CET 2017 +From: "Maciej W. Rozycki" +Date: Mon, 30 Jan 2017 17:39:48 +0100 +Subject: video: fbdev: pmag-ba-fb: Remove bad `__init' annotation + +From: "Maciej W. Rozycki" + + +[ Upstream commit 879e5a0df626f39cbb3c61bb90373e56d67012c4 ] + +Fix: + +WARNING: drivers/video/fbdev/pmag-ba-fb.o(.text+0x308): Section mismatch in reference from the function pmagbafb_probe() to the function .init.text:pmagbafb_erase_cursor() +The function pmagbafb_probe() +references the function __init pmagbafb_erase_cursor(). +This is often because pmagbafb_probe lacks a __init +annotation or the annotation of pmagbafb_erase_cursor is wrong. + +-- a fallout from a missed update from commit 9625b51350cc ("VIDEO: +PMAG-BA: Fix section mismatch") and then commit 48c68c4f1b54 ("Drivers: +video: remove __dev* attributes.") + +Signed-off-by: Maciej W. Rozycki +Signed-off-by: Bartlomiej Zolnierkiewicz +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + drivers/video/fbdev/pmag-ba-fb.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/video/fbdev/pmag-ba-fb.c ++++ b/drivers/video/fbdev/pmag-ba-fb.c +@@ -129,7 +129,7 @@ static struct fb_ops pmagbafb_ops = { + /* + * Turn the hardware cursor off. + */ +-static void __init pmagbafb_erase_cursor(struct fb_info *info) ++static void pmagbafb_erase_cursor(struct fb_info *info) + { + struct pmagbafb_par *par = info->par; + diff --git a/queue-4.4/xen-netback-set-default-upper-limit-of-tx-rx-queues-to-8.patch b/queue-4.4/xen-netback-set-default-upper-limit-of-tx-rx-queues-to-8.patch new file mode 100644 index 00000000000..2c1118020a1 --- /dev/null +++ b/queue-4.4/xen-netback-set-default-upper-limit-of-tx-rx-queues-to-8.patch @@ -0,0 +1,52 @@ +From foo@baz Thu Nov 9 18:22:51 CET 2017 +From: Juergen Gross +Date: Tue, 10 Jan 2017 14:32:52 +0100 +Subject: xen/netback: set default upper limit of tx/rx queues to 8 + +From: Juergen Gross + + +[ Upstream commit 56dd5af9bc23d0d5d23bb207c477715b4c2216c5 ] + +The default for the maximum number of tx/rx queues of one interface is +the number of cpus of the system today. As each queue pair reserves 512 +grant pages this default consumes a ridiculous number of grants for +large guests. + +Limit the queue number to 8 as default. This value can be modified +via a module parameter if required. + +Signed-off-by: Juergen Gross +Reviewed-by: Boris Ostrovsky +Signed-off-by: Boris Ostrovsky +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + drivers/net/xen-netback/netback.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +--- a/drivers/net/xen-netback/netback.c ++++ b/drivers/net/xen-netback/netback.c +@@ -67,6 +67,7 @@ module_param(rx_drain_timeout_msecs, uin + unsigned int rx_stall_timeout_msecs = 60000; + module_param(rx_stall_timeout_msecs, uint, 0444); + ++#define MAX_QUEUES_DEFAULT 8 + unsigned int xenvif_max_queues; + module_param_named(max_queues, xenvif_max_queues, uint, 0644); + MODULE_PARM_DESC(max_queues, +@@ -2157,11 +2158,12 @@ static int __init netback_init(void) + if (!xen_domain()) + return -ENODEV; + +- /* Allow as many queues as there are CPUs if user has not ++ /* Allow as many queues as there are CPUs but max. 8 if user has not + * specified a value. + */ + if (xenvif_max_queues == 0) +- xenvif_max_queues = num_online_cpus(); ++ xenvif_max_queues = min_t(unsigned int, MAX_QUEUES_DEFAULT, ++ num_online_cpus()); + + if (fatal_skb_slots < XEN_NETBK_LEGACY_SLOTS_MAX) { + pr_info("fatal_skb_slots too small (%d), bump it to XEN_NETBK_LEGACY_SLOTS_MAX (%d)\n",