diff -druNp --no-dereference linux-libre-4.4.82-gnu/drivers/iio/accel/bmc150-accel-core.c linux-libre-4.4.83-gnu/drivers/iio/accel/bmc150-accel-core.c
--- linux-libre-4.4.82-gnu/drivers/iio/accel/bmc150-accel-core.c	2017-08-12 22:29:34.000000000 -0400
+++ linux-libre-4.4.83-gnu/drivers/iio/accel/bmc150-accel-core.c	2017-08-16 16:40:42.000000000 -0400
@@ -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(st
 		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 de
 	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 -druNp --no-dereference linux-libre-4.4.82-gnu/drivers/iio/adc/vf610_adc.c linux-libre-4.4.83-gnu/drivers/iio/adc/vf610_adc.c
--- linux-libre-4.4.82-gnu/drivers/iio/adc/vf610_adc.c	2017-08-12 22:29:34.000000000 -0400
+++ linux-libre-4.4.83-gnu/drivers/iio/adc/vf610_adc.c	2017-08-16 16:40:42.000000000 -0400
@@ -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 -druNp --no-dereference linux-libre-4.4.82-gnu/drivers/iio/light/tsl2563.c linux-libre-4.4.83-gnu/drivers/iio/light/tsl2563.c
--- linux-libre-4.4.82-gnu/drivers/iio/light/tsl2563.c	2017-08-12 22:29:34.000000000 -0400
+++ linux-libre-4.4.83-gnu/drivers/iio/light/tsl2563.c	2017-08-16 16:40:42.000000000 -0400
@@ -626,7 +626,7 @@ static irqreturn_t tsl2563_event_handler
 	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 -druNp --no-dereference linux-libre-4.4.82-gnu/drivers/pinctrl/samsung/pinctrl-exynos.c linux-libre-4.4.83-gnu/drivers/pinctrl/samsung/pinctrl-exynos.c
--- linux-libre-4.4.82-gnu/drivers/pinctrl/samsung/pinctrl-exynos.c	2017-08-12 22:29:34.000000000 -0400
+++ linux-libre-4.4.83-gnu/drivers/pinctrl/samsung/pinctrl-exynos.c	2017-08-16 16:40:42.000000000 -0400
@@ -194,8 +194,6 @@ static int exynos_irq_request_resources(
 
 	spin_unlock_irqrestore(&bank->slock, flags);
 
-	exynos_irq_unmask(irqd);
-
 	return 0;
 }
 
@@ -216,8 +214,6 @@ static void exynos_irq_release_resources
 	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 -druNp --no-dereference linux-libre-4.4.82-gnu/drivers/pinctrl/sunxi/pinctrl-sun4i-a10.c linux-libre-4.4.83-gnu/drivers/pinctrl/sunxi/pinctrl-sun4i-a10.c
--- linux-libre-4.4.82-gnu/drivers/pinctrl/sunxi/pinctrl-sun4i-a10.c	2017-08-12 22:29:34.000000000 -0400
+++ linux-libre-4.4.83-gnu/drivers/pinctrl/sunxi/pinctrl-sun4i-a10.c	2017-08-16 16:40:42.000000000 -0400
@@ -811,6 +811,7 @@ static const struct sunxi_desc_pin sun4i
 		  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 -druNp --no-dereference linux-libre-4.4.82-gnu/drivers/staging/iio/resolver/ad2s1210.c linux-libre-4.4.83-gnu/drivers/staging/iio/resolver/ad2s1210.c
--- linux-libre-4.4.82-gnu/drivers/staging/iio/resolver/ad2s1210.c	2017-08-12 22:29:34.000000000 -0400
+++ linux-libre-4.4.83-gnu/drivers/staging/iio/resolver/ad2s1210.c	2017-08-16 16:40:42.000000000 -0400
@@ -468,7 +468,7 @@ static int ad2s1210_read_raw(struct iio_
 			     long m)
 {
 	struct ad2s1210_state *st = iio_priv(indio_dev);
-	bool negative;
+	u16 negative;
 	int ret = 0;
 	u16 pos;
 	s16 vel;
diff -druNp --no-dereference linux-libre-4.4.82-gnu/drivers/target/iscsi/iscsi_target.c linux-libre-4.4.83-gnu/drivers/target/iscsi/iscsi_target.c
--- linux-libre-4.4.82-gnu/drivers/target/iscsi/iscsi_target.c	2017-08-12 22:29:34.000000000 -0400
+++ linux-libre-4.4.83-gnu/drivers/target/iscsi/iscsi_target.c	2017-08-16 16:40:42.000000000 -0400
@@ -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
 	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;
diff -druNp --no-dereference linux-libre-4.4.82-gnu/drivers/target/iscsi/iscsi_target_login.c linux-libre-4.4.83-gnu/drivers/target/iscsi/iscsi_target_login.c
--- linux-libre-4.4.82-gnu/drivers/target/iscsi/iscsi_target_login.c	2017-08-12 22:29:34.000000000 -0400
+++ linux-libre-4.4.83-gnu/drivers/target/iscsi/iscsi_target_login.c	2017-08-16 16:40:42.000000000 -0400
@@ -1219,9 +1219,11 @@ static int __iscsi_target_login_thread(s
 	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(s
 		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);
diff -druNp --no-dereference linux-libre-4.4.82-gnu/drivers/usb/core/hcd.c linux-libre-4.4.83-gnu/drivers/usb/core/hcd.c
--- linux-libre-4.4.82-gnu/drivers/usb/core/hcd.c	2017-08-12 22:29:34.000000000 -0400
+++ linux-libre-4.4.83-gnu/drivers/usb/core/hcd.c	2017-08-16 16:40:42.000000000 -0400
@@ -1851,7 +1851,7 @@ void usb_hcd_flush_endpoint(struct usb_d
 	/* 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 -druNp --no-dereference linux-libre-4.4.82-gnu/drivers/usb/core/hub.c linux-libre-4.4.83-gnu/drivers/usb/core/hub.c
--- linux-libre-4.4.82-gnu/drivers/usb/core/hub.c	2017-08-12 22:29:34.000000000 -0400
+++ linux-libre-4.4.83-gnu/drivers/usb/core/hub.c	2017-08-16 16:40:42.000000000 -0400
@@ -4661,7 +4661,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);
@@ -4865,9 +4866,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 -druNp --no-dereference linux-libre-4.4.82-gnu/drivers/usb/core/quirks.c linux-libre-4.4.83-gnu/drivers/usb/core/quirks.c
--- linux-libre-4.4.82-gnu/drivers/usb/core/quirks.c	2017-08-12 22:29:34.000000000 -0400
+++ linux-libre-4.4.83-gnu/drivers/usb/core/quirks.c	2017-08-16 16:40:42.000000000 -0400
@@ -150,6 +150,9 @@ static const struct usb_device_id usb_qu
 	/* 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_am
 	{ 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 -druNp --no-dereference linux-libre-4.4.82-gnu/drivers/usb/host/pci-quirks.c linux-libre-4.4.83-gnu/drivers/usb/host/pci-quirks.c
--- linux-libre-4.4.82-gnu/drivers/usb/host/pci-quirks.c	2017-08-12 22:29:34.000000000 -0400
+++ linux-libre-4.4.83-gnu/drivers/usb/host/pci-quirks.c	2017-08-16 16:40:42.000000000 -0400
@@ -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(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);
@@ -251,11 +257,12 @@ int usb_hcd_amd_remote_wakeup_quirk(stru
 {
 	/* 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 -druNp --no-dereference linux-libre-4.4.82-gnu/drivers/usb/musb/musb_host.c linux-libre-4.4.83-gnu/drivers/usb/musb/musb_host.c
--- linux-libre-4.4.82-gnu/drivers/usb/musb/musb_host.c	2017-08-12 22:29:34.000000000 -0400
+++ linux-libre-4.4.83-gnu/drivers/usb/musb/musb_host.c	2017-08-16 16:40:42.000000000 -0400
@@ -138,6 +138,7 @@ static void musb_h_tx_flush_fifo(struct
 				"Could not flush host TX%d fifo: csr: %04x\n",
 				ep->epnum, csr))
 			return;
+		mdelay(1);
 	}
 }
 
diff -druNp --no-dereference linux-libre-4.4.82-gnu/drivers/usb/serial/cp210x.c linux-libre-4.4.83-gnu/drivers/usb/serial/cp210x.c
--- linux-libre-4.4.82-gnu/drivers/usb/serial/cp210x.c	2017-08-12 22:29:34.000000000 -0400
+++ linux-libre-4.4.83-gnu/drivers/usb/serial/cp210x.c	2017-08-16 16:40:42.000000000 -0400
@@ -135,6 +135,7 @@ static const struct usb_device_id id_tab
 	{ 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 -druNp --no-dereference linux-libre-4.4.82-gnu/drivers/usb/serial/option.c linux-libre-4.4.83-gnu/drivers/usb/serial/option.c
--- linux-libre-4.4.82-gnu/drivers/usb/serial/option.c	2017-08-12 22:29:34.000000000 -0400
+++ linux-libre-4.4.83-gnu/drivers/usb/serial/option.c	2017-08-16 16:40:42.000000000 -0400
@@ -2025,6 +2025,8 @@ static const struct usb_device_id option
 	{ 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 -druNp --no-dereference linux-libre-4.4.82-gnu/drivers/usb/serial/pl2303.c linux-libre-4.4.83-gnu/drivers/usb/serial/pl2303.c
--- linux-libre-4.4.82-gnu/drivers/usb/serial/pl2303.c	2017-08-12 22:29:34.000000000 -0400
+++ linux-libre-4.4.83-gnu/drivers/usb/serial/pl2303.c	2017-08-16 16:40:42.000000000 -0400
@@ -49,6 +49,7 @@ static const struct usb_device_id id_tab
 	{ 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 -druNp --no-dereference linux-libre-4.4.82-gnu/drivers/usb/serial/pl2303.h linux-libre-4.4.83-gnu/drivers/usb/serial/pl2303.h
--- linux-libre-4.4.82-gnu/drivers/usb/serial/pl2303.h	2017-08-12 22:29:34.000000000 -0400
+++ linux-libre-4.4.83-gnu/drivers/usb/serial/pl2303.h	2017-08-16 16:40:42.000000000 -0400
@@ -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 -druNp --no-dereference linux-libre-4.4.82-gnu/drivers/usb/storage/unusual_uas.h linux-libre-4.4.83-gnu/drivers/usb/storage/unusual_uas.h
--- linux-libre-4.4.82-gnu/drivers/usb/storage/unusual_uas.h	2017-08-12 22:29:34.000000000 -0400
+++ linux-libre-4.4.83-gnu/drivers/usb/storage/unusual_uas.h	2017-08-16 16:40:42.000000000 -0400
@@ -123,9 +123,9 @@ UNUSUAL_DEV(0x0bc2, 0xab2a, 0x0000, 0x99
 /* Reported-by: Benjamin Tissoires <benjamin.tissoires@redhat.com> */
 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 <tanaess@gmail.com> */
 UNUSUAL_DEV(0x152d, 0x0539, 0x0000, 0x9999,
diff -druNp --no-dereference linux-libre-4.4.82-gnu/fs/fuse/file.c linux-libre-4.4.83-gnu/fs/fuse/file.c
--- linux-libre-4.4.82-gnu/fs/fuse/file.c	2017-08-12 22:29:34.000000000 -0400
+++ linux-libre-4.4.83-gnu/fs/fuse/file.c	2017-08-16 16:40:42.000000000 -0400
@@ -46,7 +46,7 @@ struct fuse_file *fuse_file_alloc(struct
 {
 	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 -druNp --no-dereference linux-libre-4.4.82-gnu/fs/nfs/flexfilelayout/flexfilelayoutdev.c linux-libre-4.4.83-gnu/fs/nfs/flexfilelayout/flexfilelayoutdev.c
--- linux-libre-4.4.82-gnu/fs/nfs/flexfilelayout/flexfilelayoutdev.c	2017-08-12 22:29:34.000000000 -0400
+++ linux-libre-4.4.83-gnu/fs/nfs/flexfilelayout/flexfilelayoutdev.c	2017-08-16 16:40:42.000000000 -0400
@@ -30,6 +30,7 @@ void nfs4_ff_layout_free_deviceid(struct
 {
 	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 -druNp --no-dereference linux-libre-4.4.82-gnu/fs/nfs/Kconfig linux-libre-4.4.83-gnu/fs/nfs/Kconfig
--- linux-libre-4.4.82-gnu/fs/nfs/Kconfig	2017-08-12 22:29:34.000000000 -0400
+++ linux-libre-4.4.83-gnu/fs/nfs/Kconfig	2017-08-16 16:40:42.000000000 -0400
@@ -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 -druNp --no-dereference linux-libre-4.4.82-gnu/include/linux/cpuset.h linux-libre-4.4.83-gnu/include/linux/cpuset.h
--- linux-libre-4.4.82-gnu/include/linux/cpuset.h	2017-08-12 22:29:34.000000000 -0400
+++ linux-libre-4.4.83-gnu/include/linux/cpuset.h	2017-08-16 16:40:42.000000000 -0400
@@ -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_al
  */
 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(&current->mems_allowed_seq);
@@ -118,7 +121,7 @@ static inline unsigned int read_mems_all
  */
 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(&current->mems_allowed_seq, seq);
diff -druNp --no-dereference linux-libre-4.4.82-gnu/include/target/iscsi/iscsi_target_core.h linux-libre-4.4.83-gnu/include/target/iscsi/iscsi_target_core.h
--- linux-libre-4.4.82-gnu/include/target/iscsi/iscsi_target_core.h	2017-08-12 22:29:34.000000000 -0400
+++ linux-libre-4.4.83-gnu/include/target/iscsi/iscsi_target_core.h	2017-08-16 16:40:42.000000000 -0400
@@ -784,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 -druNp --no-dereference linux-libre-4.4.82-gnu/kernel/cpuset.c linux-libre-4.4.83-gnu/kernel/cpuset.c
--- linux-libre-4.4.82-gnu/kernel/cpuset.c	2017-08-12 22:29:34.000000000 -0400
+++ linux-libre-4.4.83-gnu/kernel/cpuset.c	2017-08-16 16:40:42.000000000 -0400
@@ -60,6 +60,7 @@
 #include <linux/cgroup.h>
 #include <linux/wait.h>
 
+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 -druNp --no-dereference linux-libre-4.4.82-gnu/Makefile linux-libre-4.4.83-gnu/Makefile
--- linux-libre-4.4.82-gnu/Makefile	2017-08-13 12:37:05.000000000 -0400
+++ linux-libre-4.4.83-gnu/Makefile	2017-08-16 18:37:04.000000000 -0400
@@ -1,6 +1,6 @@
 VERSION = 4
 PATCHLEVEL = 4
-SUBLEVEL = 82
+SUBLEVEL = 83
 EXTRAVERSION = -gnu
 NAME = Blurry Fish Butt
 
diff -druNp --no-dereference linux-libre-4.4.82-gnu/mm/page_alloc.c linux-libre-4.4.83-gnu/mm/page_alloc.c
--- linux-libre-4.4.82-gnu/mm/page_alloc.c	2017-08-12 22:29:34.000000000 -0400
+++ linux-libre-4.4.83-gnu/mm/page_alloc.c	2017-08-16 16:40:42.000000000 -0400
@@ -6804,7 +6804,7 @@ int alloc_contig_range(unsigned long sta
 
 	/* 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;
