From e19c7b549a6bfcb1f434d2812ad10ca43ba49801 Mon Sep 17 00:00:00 2001 From: Jonas Karlman Date: Fri, 18 Aug 2017 19:14:35 +0200 Subject: [PATCH] fixup! Rockchip: add linux rockchip-4.4 --- .../linux/rockchip-4.4/linux.aarch64.conf | 2 +- .../linux/rockchip-4.4/linux.arm.conf | 2 +- .../linux/rockchip-4.4/linux-1000-lsk.patch | 478 +++++++++++++++++- 3 files changed, 465 insertions(+), 17 deletions(-) diff --git a/projects/Rockchip/linux/rockchip-4.4/linux.aarch64.conf b/projects/Rockchip/linux/rockchip-4.4/linux.aarch64.conf index e9e1bc3fd99..c6fbdd3b38a 100644 --- a/projects/Rockchip/linux/rockchip-4.4/linux.aarch64.conf +++ b/projects/Rockchip/linux/rockchip-4.4/linux.aarch64.conf @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/arm64 4.4.82 Kernel Configuration +# Linux/arm64 4.4.83 Kernel Configuration # CONFIG_ARM64=y CONFIG_64BIT=y diff --git a/projects/Rockchip/linux/rockchip-4.4/linux.arm.conf b/projects/Rockchip/linux/rockchip-4.4/linux.arm.conf index 598c40aee99..508a9ff55b2 100644 --- a/projects/Rockchip/linux/rockchip-4.4/linux.arm.conf +++ b/projects/Rockchip/linux/rockchip-4.4/linux.arm.conf @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/arm 4.4.82 Kernel Configuration +# Linux/arm 4.4.83 Kernel Configuration # CONFIG_ARM=y CONFIG_ARM_HAS_SG_CHAIN=y diff --git a/projects/Rockchip/patches/linux/rockchip-4.4/linux-1000-lsk.patch b/projects/Rockchip/patches/linux/rockchip-4.4/linux-1000-lsk.patch index 32ba2e40f0e..0748cb30529 100644 --- a/projects/Rockchip/patches/linux/rockchip-4.4/linux-1000-lsk.patch +++ b/projects/Rockchip/patches/linux/rockchip-4.4/linux-1000-lsk.patch @@ -1,12 +1,12 @@ diff --git a/Makefile b/Makefile -index bc99cfe86851..1efe6ddce7cc 100644 +index bc99cfe86851..b3681de415da 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ VERSION = 4 PATCHLEVEL = 4 -SUBLEVEL = 77 -+SUBLEVEL = 82 ++SUBLEVEL = 83 EXTRAVERSION = NAME = Blurry Fish Butt @@ -4214,6 +4214,66 @@ index ff9a518121ff..796a425fbba1 100644 #define USB_VENDOR_ID_PHILIPS 0x0471 #define USB_DEVICE_ID_PHILIPS_IEEE802154_DONGLE 0x0617 +diff --git a/drivers/iio/accel/bmc150-accel-core.c b/drivers/iio/accel/bmc150-accel-core.c +index fa24d5196615..c7122919a8c0 100644 +--- a/drivers/iio/accel/bmc150-accel-core.c ++++ b/drivers/iio/accel/bmc150-accel-core.c +@@ -194,7 +194,6 @@ struct bmc150_accel_data { + struct device *dev; + int irq; + struct bmc150_accel_interrupt interrupts[BMC150_ACCEL_INTERRUPTS]; +- atomic_t active_intr; + struct bmc150_accel_trigger triggers[BMC150_ACCEL_TRIGGERS]; + struct mutex mutex; + u8 fifo_mode, watermark; +@@ -489,11 +488,6 @@ static int bmc150_accel_set_interrupt(struct bmc150_accel_data *data, int i, + goto out_fix_power_state; + } + +- if (state) +- atomic_inc(&data->active_intr); +- else +- atomic_dec(&data->active_intr); +- + return 0; + + out_fix_power_state: +@@ -1704,8 +1698,7 @@ static int bmc150_accel_resume(struct device *dev) + struct bmc150_accel_data *data = iio_priv(indio_dev); + + mutex_lock(&data->mutex); +- if (atomic_read(&data->active_intr)) +- bmc150_accel_set_mode(data, BMC150_ACCEL_SLEEP_MODE_NORMAL, 0); ++ bmc150_accel_set_mode(data, BMC150_ACCEL_SLEEP_MODE_NORMAL, 0); + bmc150_accel_fifo_set_mode(data); + mutex_unlock(&data->mutex); + +diff --git a/drivers/iio/adc/vf610_adc.c b/drivers/iio/adc/vf610_adc.c +index b10f629cc44b..1dbc2143cdfc 100644 +--- a/drivers/iio/adc/vf610_adc.c ++++ b/drivers/iio/adc/vf610_adc.c +@@ -77,7 +77,7 @@ + #define VF610_ADC_ADSTS_MASK 0x300 + #define VF610_ADC_ADLPC_EN 0x80 + #define VF610_ADC_ADHSC_EN 0x400 +-#define VF610_ADC_REFSEL_VALT 0x100 ++#define VF610_ADC_REFSEL_VALT 0x800 + #define VF610_ADC_REFSEL_VBG 0x1000 + #define VF610_ADC_ADTRG_HARD 0x2000 + #define VF610_ADC_AVGS_8 0x4000 +diff --git a/drivers/iio/light/tsl2563.c b/drivers/iio/light/tsl2563.c +index 12731d6b89ec..ec1b2e798cc1 100644 +--- a/drivers/iio/light/tsl2563.c ++++ b/drivers/iio/light/tsl2563.c +@@ -626,7 +626,7 @@ static irqreturn_t tsl2563_event_handler(int irq, void *private) + struct tsl2563_chip *chip = iio_priv(dev_info); + + iio_push_event(dev_info, +- IIO_UNMOD_EVENT_CODE(IIO_LIGHT, ++ IIO_UNMOD_EVENT_CODE(IIO_INTENSITY, + 0, + IIO_EV_TYPE_THRESH, + IIO_EV_DIR_EITHER), diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c index 3f5741a3e728..43d5166db4c6 100644 --- a/drivers/infiniband/core/cma.c @@ -5699,6 +5759,40 @@ index d7ffd66814bb..fca925543fae 100644 if (drv && drv->pm && drv->pm->thaw_noirq) error = drv->pm->thaw_noirq(dev); +diff --git a/drivers/pinctrl/samsung/pinctrl-exynos.c b/drivers/pinctrl/samsung/pinctrl-exynos.c +index 71ccf6a90b22..2551e4adb33f 100644 +--- a/drivers/pinctrl/samsung/pinctrl-exynos.c ++++ b/drivers/pinctrl/samsung/pinctrl-exynos.c +@@ -194,8 +194,6 @@ static int exynos_irq_request_resources(struct irq_data *irqd) + + spin_unlock_irqrestore(&bank->slock, flags); + +- exynos_irq_unmask(irqd); +- + return 0; + } + +@@ -216,8 +214,6 @@ static void exynos_irq_release_resources(struct irq_data *irqd) + shift = irqd->hwirq * bank_type->fld_width[PINCFG_TYPE_FUNC]; + mask = (1 << bank_type->fld_width[PINCFG_TYPE_FUNC]) - 1; + +- exynos_irq_mask(irqd); +- + spin_lock_irqsave(&bank->slock, flags); + + con = readl(d->virt_base + reg_con); +diff --git a/drivers/pinctrl/sunxi/pinctrl-sun4i-a10.c b/drivers/pinctrl/sunxi/pinctrl-sun4i-a10.c +index 862a096c5dba..be5c71df148d 100644 +--- a/drivers/pinctrl/sunxi/pinctrl-sun4i-a10.c ++++ b/drivers/pinctrl/sunxi/pinctrl-sun4i-a10.c +@@ -811,6 +811,7 @@ static const struct sunxi_desc_pin sun4i_a10_pins[] = { + SUNXI_FUNCTION(0x2, "lcd1"), /* D16 */ + SUNXI_FUNCTION(0x3, "pata"), /* ATAD12 */ + SUNXI_FUNCTION(0x4, "keypad"), /* IN6 */ ++ SUNXI_FUNCTION(0x5, "sim"), /* DET */ + SUNXI_FUNCTION_IRQ(0x6, 16), /* EINT16 */ + SUNXI_FUNCTION(0x7, "csi1")), /* D16 */ + SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 17), diff --git a/drivers/scsi/fnic/fnic.h b/drivers/scsi/fnic/fnic.h index ce129e595b55..5c935847599c 100644 --- a/drivers/scsi/fnic/fnic.h @@ -5950,6 +6044,19 @@ index 8fed55342b0f..b831f08e2769 100644 return 0; } module_init(comedi_init); +diff --git a/drivers/staging/iio/resolver/ad2s1210.c b/drivers/staging/iio/resolver/ad2s1210.c +index d97aa2827412..8eb7179da342 100644 +--- a/drivers/staging/iio/resolver/ad2s1210.c ++++ b/drivers/staging/iio/resolver/ad2s1210.c +@@ -468,7 +468,7 @@ static int ad2s1210_read_raw(struct iio_dev *indio_dev, + long m) + { + struct ad2s1210_state *st = iio_priv(indio_dev); +- bool negative; ++ u16 negative; + int ret = 0; + u16 pos; + s16 vel; diff --git a/drivers/staging/rtl8188eu/os_dep/usb_intf.c b/drivers/staging/rtl8188eu/os_dep/usb_intf.c index 82a7c27c517f..02c3feef4e36 100644 --- a/drivers/staging/rtl8188eu/os_dep/usb_intf.c @@ -5963,10 +6070,26 @@ index 82a7c27c517f..02c3feef4e36 100644 {} /* Terminating entry */ }; diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c -index a180c000e246..31d5d9c0e10b 100644 +index a180c000e246..1ff1c83e2df5 100644 --- a/drivers/target/iscsi/iscsi_target.c +++ b/drivers/target/iscsi/iscsi_target.c -@@ -3965,6 +3965,8 @@ int iscsi_target_tx_thread(void *arg) +@@ -418,6 +418,7 @@ int iscsit_reset_np_thread( + return 0; + } + np->np_thread_state = ISCSI_NP_THREAD_RESET; ++ atomic_inc(&np->np_reset_count); + + if (np->np_thread) { + spin_unlock_bh(&np->np_thread_lock); +@@ -1996,6 +1997,7 @@ iscsit_setup_text_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd, + cmd->cmd_sn = be32_to_cpu(hdr->cmdsn); + cmd->exp_stat_sn = be32_to_cpu(hdr->exp_statsn); + cmd->data_direction = DMA_NONE; ++ kfree(cmd->text_in_ptr); + cmd->text_in_ptr = NULL; + + return 0; +@@ -3965,6 +3967,8 @@ int iscsi_target_tx_thread(void *arg) { int ret = 0; struct iscsi_conn *conn = arg; @@ -5975,7 +6098,7 @@ index a180c000e246..31d5d9c0e10b 100644 /* * Allow ourselves to be interrupted by SIGINT so that a * connection recovery / failure event can be triggered externally. -@@ -3990,12 +3992,14 @@ get_immediate: +@@ -3990,12 +3994,14 @@ get_immediate: goto transport_err; ret = iscsit_handle_response_queue(conn); @@ -5993,7 +6116,7 @@ index a180c000e246..31d5d9c0e10b 100644 } transport_err: -@@ -4005,8 +4009,13 @@ transport_err: +@@ -4005,8 +4011,13 @@ transport_err: * responsible for cleaning up the early connection failure. */ if (conn->conn_state != TARG_CONN_STATE_IN_LOGIN) @@ -6008,7 +6131,7 @@ index a180c000e246..31d5d9c0e10b 100644 return 0; } -@@ -4105,6 +4114,7 @@ int iscsi_target_rx_thread(void *arg) +@@ -4105,6 +4116,7 @@ int iscsi_target_rx_thread(void *arg) u32 checksum = 0, digest = 0; struct iscsi_conn *conn = arg; struct kvec iov; @@ -6016,7 +6139,7 @@ index a180c000e246..31d5d9c0e10b 100644 /* * Allow ourselves to be interrupted by SIGINT so that a * connection recovery / failure event can be triggered externally. -@@ -4116,7 +4126,7 @@ int iscsi_target_rx_thread(void *arg) +@@ -4116,7 +4128,7 @@ int iscsi_target_rx_thread(void *arg) */ rc = wait_for_completion_interruptible(&conn->rx_login_comp); if (rc < 0 || iscsi_target_check_conn_state(conn)) @@ -6025,7 +6148,7 @@ index a180c000e246..31d5d9c0e10b 100644 if (conn->conn_transport->transport_type == ISCSI_INFINIBAND) { struct completion comp; -@@ -4201,7 +4211,13 @@ int iscsi_target_rx_thread(void *arg) +@@ -4201,7 +4213,13 @@ int iscsi_target_rx_thread(void *arg) transport_err: if (!signal_pending(current)) atomic_set(&conn->transport_failed, 1); @@ -6040,7 +6163,7 @@ index a180c000e246..31d5d9c0e10b 100644 return 0; } -@@ -4575,8 +4591,11 @@ static void iscsit_logout_post_handler_closesession( +@@ -4575,8 +4593,11 @@ static void iscsit_logout_post_handler_closesession( * always sleep waiting for RX/TX thread shutdown to complete * within iscsit_close_connection(). */ @@ -6053,7 +6176,7 @@ index a180c000e246..31d5d9c0e10b 100644 atomic_set(&conn->conn_logout_remove, 0); complete(&conn->conn_logout_comp); -@@ -4592,8 +4611,11 @@ static void iscsit_logout_post_handler_samecid( +@@ -4592,8 +4613,11 @@ static void iscsit_logout_post_handler_samecid( { int sleep = 1; @@ -6129,10 +6252,33 @@ index a9e2f9497fb2..fbc1d84a63c3 100644 #endif /*** ISCSI_TARGET_ERL0_H ***/ diff --git a/drivers/target/iscsi/iscsi_target_login.c b/drivers/target/iscsi/iscsi_target_login.c -index 4a137b0ae3dc..b19edffa7d98 100644 +index 4a137b0ae3dc..bc2cbffec27e 100644 --- a/drivers/target/iscsi/iscsi_target_login.c +++ b/drivers/target/iscsi/iscsi_target_login.c -@@ -1436,5 +1436,9 @@ int iscsi_target_login_thread(void *arg) +@@ -1219,9 +1219,11 @@ static int __iscsi_target_login_thread(struct iscsi_np *np) + flush_signals(current); + + spin_lock_bh(&np->np_thread_lock); +- if (np->np_thread_state == ISCSI_NP_THREAD_RESET) { ++ if (atomic_dec_if_positive(&np->np_reset_count) >= 0) { + np->np_thread_state = ISCSI_NP_THREAD_ACTIVE; ++ spin_unlock_bh(&np->np_thread_lock); + complete(&np->np_restart_comp); ++ return 1; + } else if (np->np_thread_state == ISCSI_NP_THREAD_SHUTDOWN) { + spin_unlock_bh(&np->np_thread_lock); + goto exit; +@@ -1254,7 +1256,8 @@ static int __iscsi_target_login_thread(struct iscsi_np *np) + goto exit; + } else if (rc < 0) { + spin_lock_bh(&np->np_thread_lock); +- if (np->np_thread_state == ISCSI_NP_THREAD_RESET) { ++ if (atomic_dec_if_positive(&np->np_reset_count) >= 0) { ++ np->np_thread_state = ISCSI_NP_THREAD_ACTIVE; + spin_unlock_bh(&np->np_thread_lock); + complete(&np->np_restart_comp); + iscsit_put_transport(conn->conn_transport); +@@ -1436,5 +1439,9 @@ int iscsi_target_login_thread(void *arg) break; } @@ -6718,6 +6864,78 @@ index 0b7194086c5a..df96f5f88c15 100644 { USB_DEVICE(0x2912, 0x0001), /* ATOL FPrint */ .driver_info = CLEAR_HALT_CONDITIONS, +diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c +index a43ade50b9fa..87a83d925eea 100644 +--- a/drivers/usb/core/hcd.c ++++ b/drivers/usb/core/hcd.c +@@ -1851,7 +1851,7 @@ void usb_hcd_flush_endpoint(struct usb_device *udev, + /* No more submits can occur */ + spin_lock_irq(&hcd_urb_list_lock); + rescan: +- list_for_each_entry (urb, &ep->urb_list, urb_list) { ++ list_for_each_entry_reverse(urb, &ep->urb_list, urb_list) { + int is_in; + + if (urb->unlinked) +@@ -2448,6 +2448,8 @@ void usb_hc_died (struct usb_hcd *hcd) + } + if (usb_hcd_is_primary_hcd(hcd) && hcd->shared_hcd) { + hcd = hcd->shared_hcd; ++ clear_bit(HCD_FLAG_RH_RUNNING, &hcd->flags); ++ set_bit(HCD_FLAG_DEAD, &hcd->flags); + if (hcd->rh_registered) { + clear_bit(HCD_FLAG_POLL_RH, &hcd->flags); + +diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c +index 34817fa65e19..fb9223c8cbae 100644 +--- a/drivers/usb/core/hub.c ++++ b/drivers/usb/core/hub.c +@@ -4662,7 +4662,8 @@ hub_power_remaining(struct usb_hub *hub) + static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus, + u16 portchange) + { +- int status, i; ++ int status = -ENODEV; ++ int i; + unsigned unit_load; + struct usb_device *hdev = hub->hdev; + struct usb_hcd *hcd = bus_to_hcd(hdev->bus); +@@ -4866,9 +4867,10 @@ loop: + + done: + hub_port_disable(hub, port1, 1); +- if (hcd->driver->relinquish_port && !hub->hdev->parent) +- hcd->driver->relinquish_port(hcd, port1); +- ++ if (hcd->driver->relinquish_port && !hub->hdev->parent) { ++ if (status != -ENOTCONN && status != -ENODEV) ++ hcd->driver->relinquish_port(hcd, port1); ++ } + } + + /* Handle physical or logical connection change events. +diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c +index 3116edfcdc18..574da2b4529c 100644 +--- a/drivers/usb/core/quirks.c ++++ b/drivers/usb/core/quirks.c +@@ -150,6 +150,9 @@ static const struct usb_device_id usb_quirk_list[] = { + /* appletouch */ + { USB_DEVICE(0x05ac, 0x021a), .driver_info = USB_QUIRK_RESET_RESUME }, + ++ /* Genesys Logic hub, internally used by Moshi USB to Ethernet Adapter */ ++ { USB_DEVICE(0x05e3, 0x0616), .driver_info = USB_QUIRK_NO_LPM }, ++ + /* Avision AV600U */ + { USB_DEVICE(0x0638, 0x0a13), .driver_info = + USB_QUIRK_STRING_FETCH_255 }, +@@ -249,6 +252,7 @@ static const struct usb_device_id usb_amd_resume_quirk_list[] = { + { USB_DEVICE(0x093a, 0x2500), .driver_info = USB_QUIRK_RESET_RESUME }, + { USB_DEVICE(0x093a, 0x2510), .driver_info = USB_QUIRK_RESET_RESUME }, + { USB_DEVICE(0x093a, 0x2521), .driver_info = USB_QUIRK_RESET_RESUME }, ++ { USB_DEVICE(0x03f0, 0x2b4a), .driver_info = USB_QUIRK_RESET_RESUME }, + + /* Logitech Optical Mouse M90/M100 */ + { USB_DEVICE(0x046d, 0xc05a), .driver_info = USB_QUIRK_RESET_RESUME }, diff --git a/drivers/usb/gadget/function/f_hid.c b/drivers/usb/gadget/function/f_hid.c index 99285b416308..ee579ba2b59e 100644 --- a/drivers/usb/gadget/function/f_hid.c @@ -6731,6 +6949,48 @@ index 99285b416308..ee579ba2b59e 100644 goto fail; } hidg->out_ep->driver_data = hidg; +diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c +index f9400564cb72..03b9a372636f 100644 +--- a/drivers/usb/host/pci-quirks.c ++++ b/drivers/usb/host/pci-quirks.c +@@ -89,6 +89,7 @@ enum amd_chipset_gen { + AMD_CHIPSET_HUDSON2, + AMD_CHIPSET_BOLTON, + AMD_CHIPSET_YANGTZE, ++ AMD_CHIPSET_TAISHAN, + AMD_CHIPSET_UNKNOWN, + }; + +@@ -132,6 +133,11 @@ static int amd_chipset_sb_type_init(struct amd_chipset_info *pinfo) + 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); +@@ -251,11 +257,12 @@ int usb_hcd_amd_remote_wakeup_quirk(struct pci_dev *pdev) + { + /* Make sure amd chipset type has already been initialized */ + usb_amd_find_chipset_info(); +- if (amd_chipset.sb_type.gen != AMD_CHIPSET_YANGTZE) +- return 0; +- +- dev_dbg(&pdev->dev, "QUIRK: Enable AMD remote wakeup fix\n"); +- return 1; ++ if (amd_chipset.sb_type.gen == AMD_CHIPSET_YANGTZE || ++ amd_chipset.sb_type.gen == AMD_CHIPSET_TAISHAN) { ++ dev_dbg(&pdev->dev, "QUIRK: Enable AMD remote wakeup fix\n"); ++ return 1; ++ } ++ return 0; + } + EXPORT_SYMBOL_GPL(usb_hcd_amd_remote_wakeup_quirk); + diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c index 52997fbfc07c..1721a128999a 100644 --- a/drivers/usb/host/xhci-hub.c @@ -6770,6 +7030,18 @@ index 408eccdd2ca9..abf58fe1d4f5 100644 } } else { ring = ep->ring; +diff --git a/drivers/usb/musb/musb_host.c b/drivers/usb/musb/musb_host.c +index 13d5614f37f1..0d843e0f8055 100644 +--- a/drivers/usb/musb/musb_host.c ++++ b/drivers/usb/musb/musb_host.c +@@ -138,6 +138,7 @@ static void musb_h_tx_flush_fifo(struct musb_hw_ep *ep) + "Could not flush host TX%d fifo: csr: %04x\n", + ep->epnum, csr)) + return; ++ mdelay(1); + } + } + diff --git a/drivers/usb/renesas_usbhs/common.c b/drivers/usb/renesas_usbhs/common.c index d82fa36c3465..005da0866836 100644 --- a/drivers/usb/renesas_usbhs/common.c @@ -6881,6 +7153,55 @@ index efc4fae123a4..8647d2c2a8c4 100644 gpriv->transceiver = usb_get_phy(USB_PHY_TYPE_UNDEFINED); dev_info(dev, "%stransceiver found\n", +diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c +index b0dc6da3d970..41a6513646de 100644 +--- a/drivers/usb/serial/cp210x.c ++++ b/drivers/usb/serial/cp210x.c +@@ -135,6 +135,7 @@ static const struct usb_device_id id_table[] = { + { USB_DEVICE(0x10C4, 0x8998) }, /* KCF Technologies PRN */ + { USB_DEVICE(0x10C4, 0x8A2A) }, /* HubZ dual ZigBee and Z-Wave dongle */ + { USB_DEVICE(0x10C4, 0x8A5E) }, /* CEL EM3588 ZigBee USB Stick Long Range */ ++ { USB_DEVICE(0x10C4, 0x8B34) }, /* Qivicon ZigBee USB Radio Stick */ + { USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */ + { USB_DEVICE(0x10C4, 0xEA61) }, /* Silicon Labs factory default */ + { USB_DEVICE(0x10C4, 0xEA70) }, /* Silicon Labs factory default */ +diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c +index ebe51f11105d..fe123153b1a5 100644 +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -2025,6 +2025,8 @@ static const struct usb_device_id option_ids[] = { + { USB_DEVICE_INTERFACE_CLASS(0x2001, 0x7d04, 0xff) }, /* D-Link DWM-158 */ + { 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 */ ++ .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, + { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e01, 0xff, 0xff, 0xff) }, /* D-Link DWM-152/C1 */ + { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x3e02, 0xff, 0xff, 0xff) }, /* D-Link DWM-156/C1 */ + { USB_DEVICE_AND_INTERFACE_INFO(0x07d1, 0x7e11, 0xff, 0xff, 0xff) }, /* D-Link DWM-156/A3 */ +diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c +index 1db4b61bdf7b..a51b28379850 100644 +--- a/drivers/usb/serial/pl2303.c ++++ b/drivers/usb/serial/pl2303.c +@@ -49,6 +49,7 @@ static const struct usb_device_id id_table[] = { + { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID) }, + { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID_RSAQ5) }, + { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_ID) }, ++ { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_UC485) }, + { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_ID2) }, + { USB_DEVICE(ATEN_VENDOR_ID2, ATEN_PRODUCT_ID) }, + { USB_DEVICE(ELCOM_VENDOR_ID, ELCOM_PRODUCT_ID) }, +diff --git a/drivers/usb/serial/pl2303.h b/drivers/usb/serial/pl2303.h +index 09d9be88209e..3b5a15d1dc0d 100644 +--- a/drivers/usb/serial/pl2303.h ++++ b/drivers/usb/serial/pl2303.h +@@ -27,6 +27,7 @@ + #define ATEN_VENDOR_ID 0x0557 + #define ATEN_VENDOR_ID2 0x0547 + #define ATEN_PRODUCT_ID 0x2008 ++#define ATEN_PRODUCT_UC485 0x2021 + #define ATEN_PRODUCT_ID2 0x2118 + + #define IODATA_VENDOR_ID 0x04bb diff --git a/drivers/usb/storage/isd200.c b/drivers/usb/storage/isd200.c index 39afd7045c43..7bb5f8da5357 100644 --- a/drivers/usb/storage/isd200.c @@ -6898,6 +7219,22 @@ index 39afd7045c43..7bb5f8da5357 100644 scsi_set_resid(srb, 0); /* scsi_bufflen might change in protocol translation to ata */ +diff --git a/drivers/usb/storage/unusual_uas.h b/drivers/usb/storage/unusual_uas.h +index 53341a77d89f..a37ed1e59e99 100644 +--- a/drivers/usb/storage/unusual_uas.h ++++ b/drivers/usb/storage/unusual_uas.h +@@ -123,9 +123,9 @@ UNUSUAL_DEV(0x0bc2, 0xab2a, 0x0000, 0x9999, + /* Reported-by: Benjamin Tissoires */ + UNUSUAL_DEV(0x13fd, 0x3940, 0x0000, 0x9999, + "Initio Corporation", +- "", ++ "INIC-3069", + USB_SC_DEVICE, USB_PR_DEVICE, NULL, +- US_FL_NO_ATA_1X), ++ US_FL_NO_ATA_1X | US_FL_IGNORE_RESIDUE), + + /* Reported-by: Tom Arild Naess */ + UNUSUAL_DEV(0x152d, 0x0539, 0x0000, 0x9999, diff --git a/drivers/vfio/pci/vfio_pci.c b/drivers/vfio/pci/vfio_pci.c index 830e2fd47642..b31b84f56e8f 100644 --- a/drivers/vfio/pci/vfio_pci.c @@ -7330,6 +7667,19 @@ index 2ac3417d9412..4f666368aa85 100644 } if (unlikely(f2fs_cp_error(sbi))) { +diff --git a/fs/fuse/file.c b/fs/fuse/file.c +index 11538a8be9f0..1a063cbfe503 100644 +--- a/fs/fuse/file.c ++++ b/fs/fuse/file.c +@@ -46,7 +46,7 @@ struct fuse_file *fuse_file_alloc(struct fuse_conn *fc) + { + struct fuse_file *ff; + +- ff = kmalloc(sizeof(struct fuse_file), GFP_KERNEL); ++ ff = kzalloc(sizeof(struct fuse_file), GFP_KERNEL); + if (unlikely(!ff)) + return NULL; + diff --git a/fs/mount.h b/fs/mount.h index 13a4ebbbaa74..37c64bbe840c 100644 --- a/fs/mount.h @@ -7397,6 +7747,18 @@ index a22959c97384..15b91b36ecab 100644 #ifdef CONFIG_FSNOTIFY INIT_HLIST_HEAD(&mnt->mnt_fsnotify_marks); #endif +diff --git a/fs/nfs/Kconfig b/fs/nfs/Kconfig +index f31fd0dd92c6..b1daeafbea92 100644 +--- a/fs/nfs/Kconfig ++++ b/fs/nfs/Kconfig +@@ -121,6 +121,7 @@ config PNFS_FILE_LAYOUT + config PNFS_BLOCK + tristate + depends on NFS_V4_1 && BLK_DEV_DM ++ depends on 64BIT || LBDAF + default NFS_V4 + + config PNFS_OBJLAYOUT diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c index 5b21b1ca2341..348e0a05bd18 100644 --- a/fs/nfs/dir.c @@ -7430,6 +7792,18 @@ index 5b21b1ca2341..348e0a05bd18 100644 if (nfs_compare_fh(NFS_FH(inode), fhandle)) goto out_bad; if ((error = nfs_refresh_inode(inode, fattr)) != 0) +diff --git a/fs/nfs/flexfilelayout/flexfilelayoutdev.c b/fs/nfs/flexfilelayout/flexfilelayoutdev.c +index e125e55de86d..2603d7589946 100644 +--- a/fs/nfs/flexfilelayout/flexfilelayoutdev.c ++++ b/fs/nfs/flexfilelayout/flexfilelayoutdev.c +@@ -30,6 +30,7 @@ void nfs4_ff_layout_free_deviceid(struct nfs4_ff_layout_ds *mirror_ds) + { + nfs4_print_deviceid(&mirror_ds->id_node.deviceid); + nfs4_pnfs_ds_put(mirror_ds->ds); ++ kfree(mirror_ds->ds_versions); + kfree_rcu(mirror_ds, id_node.rcu); + } + diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c index f714b98cfd74..668ac19af58f 100644 --- a/fs/nfs/inode.c @@ -7923,6 +8297,51 @@ index 187b80267ff9..a9063ac50c4e 100644 if (create) { set_buffer_uptodate(bh_result); set_buffer_mapped(bh_result); +diff --git a/include/linux/cpuset.h b/include/linux/cpuset.h +index 85a868ccb493..8397dc235e84 100644 +--- a/include/linux/cpuset.h ++++ b/include/linux/cpuset.h +@@ -16,6 +16,7 @@ + + #ifdef CONFIG_CPUSETS + ++extern struct static_key cpusets_pre_enable_key; + extern struct static_key cpusets_enabled_key; + static inline bool cpusets_enabled(void) + { +@@ -30,12 +31,14 @@ static inline int nr_cpusets(void) + + static inline void cpuset_inc(void) + { ++ static_key_slow_inc(&cpusets_pre_enable_key); + static_key_slow_inc(&cpusets_enabled_key); + } + + static inline void cpuset_dec(void) + { + static_key_slow_dec(&cpusets_enabled_key); ++ static_key_slow_dec(&cpusets_pre_enable_key); + } + + extern int cpuset_init(void); +@@ -104,7 +107,7 @@ extern void cpuset_print_current_mems_allowed(void); + */ + static inline unsigned int read_mems_allowed_begin(void) + { +- if (!cpusets_enabled()) ++ if (!static_key_false(&cpusets_pre_enable_key)) + return 0; + + return read_seqcount_begin(¤t->mems_allowed_seq); +@@ -118,7 +121,7 @@ static inline unsigned int read_mems_allowed_begin(void) + */ + static inline bool read_mems_allowed_retry(unsigned int seq) + { +- if (!cpusets_enabled()) ++ if (!static_key_false(&cpusets_enabled_key)) + return false; + + return read_seqcount_retry(¤t->mems_allowed_seq, seq); diff --git a/include/linux/dcache.h b/include/linux/dcache.h index 702b6c53c12f..0acbb85ff9ff 100644 --- a/include/linux/dcache.h @@ -8256,7 +8675,7 @@ index ce13cf20f625..d33b17ba51d2 100644 ntohs(err->length) >= sizeof(sctp_errhdr_t); \ err = (sctp_errhdr_t *)((void *)err + WORD_ROUND(ntohs(err->length)))) diff --git a/include/target/iscsi/iscsi_target_core.h b/include/target/iscsi/iscsi_target_core.h -index 373d3342002b..fdda45f26f75 100644 +index 373d3342002b..22f442ab85f9 100644 --- a/include/target/iscsi/iscsi_target_core.h +++ b/include/target/iscsi/iscsi_target_core.h @@ -64,6 +64,14 @@ @@ -8290,6 +8709,14 @@ index 373d3342002b..fdda45f26f75 100644 struct iscsi_portal_group *tpg; }; +@@ -774,6 +784,7 @@ struct iscsi_np { + int np_sock_type; + enum np_thread_state_table np_thread_state; + bool enabled; ++ atomic_t np_reset_count; + enum iscsi_timer_flags_table np_login_timer_flags; + u32 np_exports; + enum np_flags_table np_flags; diff --git a/include/target/target_core_base.h b/include/target/target_core_base.h index ed66414b91f0..1adf8739980c 100644 --- a/include/target/target_core_base.h @@ -8318,6 +8745,18 @@ index 85de5094b936..c97bce6a0e0e 100644 /* check whether atomic_add can read the memory */ err = check_mem_access(env, insn->dst_reg, insn->off, BPF_SIZE(insn->code), BPF_READ, -1); +diff --git a/kernel/cpuset.c b/kernel/cpuset.c +index 146292b32673..f93a9f9b4b97 100644 +--- a/kernel/cpuset.c ++++ b/kernel/cpuset.c +@@ -60,6 +60,7 @@ + #include + #include + ++struct static_key cpusets_pre_enable_key __read_mostly = STATIC_KEY_INIT_FALSE; + struct static_key cpusets_enabled_key __read_mostly = STATIC_KEY_INIT_FALSE; + + /* See "Frequency meter" comments, below. */ diff --git a/kernel/events/core.c b/kernel/events/core.c index 062564729284..3421b1271970 100644 --- a/kernel/events/core.c @@ -8791,7 +9230,7 @@ index c25bc6268e46..fe7b7f65f4f4 100644 for (; old_addr < old_end; old_pte++, old_addr += PAGE_SIZE, diff --git a/mm/page_alloc.c b/mm/page_alloc.c -index 9f143d9b0f20..a7680c2219d2 100644 +index 9f143d9b0f20..4ae77db917f2 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -1532,14 +1532,14 @@ int move_freepages(struct zone *zone, @@ -8823,6 +9262,15 @@ index 9f143d9b0f20..a7680c2219d2 100644 return pages; } +@@ -6807,7 +6807,7 @@ int alloc_contig_range(unsigned long start, unsigned long end, + + /* Make sure the range is really isolated. */ + if (test_pages_isolated(outer_start, end, false)) { +- pr_info("%s: [%lx, %lx) PFNs busy\n", ++ pr_info_ratelimited("%s: [%lx, %lx) PFNs busy\n", + __func__, outer_start, end); + ret = -EBUSY; + goto done; diff --git a/mm/rmap.c b/mm/rmap.c index b577fbb98d4b..ede183c32f45 100644 --- a/mm/rmap.c