All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash
@ 2017-09-25  1:12 Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 02/50] locking/lockdep: Add nest_lock integrity test Levin, Alexander (Sasha Levin)
                   ` (48 more replies)
  0 siblings, 49 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Anoob Soman, David S . Miller, Levin, Alexander (Sasha Levin)

From: Anoob Soman <anoob.soman@citrix.com>

[ Upstream commit 9f674e48c13dcbc31ac903433727837795b81efe ]

Allocation of new_hash, inside xenvif_new_hash(), always happen
in softirq context, so use GFP_ATOMIC instead of GFP_KERNEL for new
hash allocation.

Signed-off-by: Anoob Soman <anoob.soman@citrix.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 drivers/net/xen-netback/hash.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/xen-netback/hash.c b/drivers/net/xen-netback/hash.c
index e8c5dddc54ba..3c4c58b9fe76 100644
--- a/drivers/net/xen-netback/hash.c
+++ b/drivers/net/xen-netback/hash.c
@@ -39,7 +39,7 @@ static void xenvif_add_hash(struct xenvif *vif, const u8 *tag,
 	unsigned long flags;
 	bool found;
 
-	new = kmalloc(sizeof(*entry), GFP_KERNEL);
+	new = kmalloc(sizeof(*entry), GFP_ATOMIC);
 	if (!new)
 		return;
 
-- 
2.11.0

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

* [PATCH review for 4.9 04/50] irqchip/crossbar: Fix incorrect type of local variables
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 02/50] locking/lockdep: Add nest_lock integrity test Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 03/50] watchdog: kempld: fix gcc-4.3 build Levin, Alexander (Sasha Levin)
                   ` (46 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Franck Demathieu, marc.zyngier, jason, Thomas Gleixner, Levin,
	Alexander (Sasha Levin)

From: Franck Demathieu <fdemathieu@gmail.com>

[ Upstream commit b28ace12661fbcfd90959c1e84ff5a85113a82a1 ]

The max and entry variables are unsigned according to the dt-bindings.
Fix following 3 sparse issues (-Wtypesign):

  drivers/irqchip/irq-crossbar.c:222:52: warning: incorrect type in argument 3 (different signedness)
  drivers/irqchip/irq-crossbar.c:222:52:    expected unsigned int [usertype] *out_value
  drivers/irqchip/irq-crossbar.c:222:52:    got int *<noident>

  drivers/irqchip/irq-crossbar.c:245:56: warning: incorrect type in argument 4 (different signedness)
  drivers/irqchip/irq-crossbar.c:245:56:    expected unsigned int [usertype] *out_value
  drivers/irqchip/irq-crossbar.c:245:56:    got int *<noident>

  drivers/irqchip/irq-crossbar.c:263:56: warning: incorrect type in argument 4 (different signedness)
  drivers/irqchip/irq-crossbar.c:263:56:    expected unsigned int [usertype] *out_value
  drivers/irqchip/irq-crossbar.c:263:56:    got int *<noident>

Signed-off-by: Franck Demathieu <fdemathieu@gmail.com>
Cc: marc.zyngier@arm.com
Cc: jason@lakedaemon.net
Link: http://lkml.kernel.org/r/20170223094855.6546-1-fdemathieu@gmail.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 drivers/irqchip/irq-crossbar.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/irqchip/irq-crossbar.c b/drivers/irqchip/irq-crossbar.c
index 1eef56a89b1f..05bbf171df37 100644
--- a/drivers/irqchip/irq-crossbar.c
+++ b/drivers/irqchip/irq-crossbar.c
@@ -198,7 +198,8 @@ static const struct irq_domain_ops crossbar_domain_ops = {
 
 static int __init crossbar_of_init(struct device_node *node)
 {
-	int i, size, max = 0, reserved = 0, entry;
+	int i, size, reserved = 0;
+	u32 max = 0, entry;
 	const __be32 *irqsr;
 	int ret = -ENOMEM;
 
-- 
2.11.0

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

* [PATCH review for 4.9 03/50] watchdog: kempld: fix gcc-4.3 build
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 02/50] locking/lockdep: Add nest_lock integrity test Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 04/50] irqchip/crossbar: Fix incorrect type of local variables Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 05/50] initramfs: finish fput() before accessing any binary from initramfs Levin, Alexander (Sasha Levin)
                   ` (45 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Arnd Bergmann, Guenter Roeck, Levin, Alexander (Sasha Levin)

From: Arnd Bergmann <arnd@arndb.de>

[ Upstream commit 3736d4eb6af37492aeded7fec0072dedd959c842 ]

gcc-4.3 can't decide whether the constant value in
kempld_prescaler[PRESCALER_21] is built-time constant or
not, and gets confused by the logic in do_div():

drivers/watchdog/kempld_wdt.o: In function `kempld_wdt_set_stage_timeout':
kempld_wdt.c:(.text.kempld_wdt_set_stage_timeout+0x130): undefined reference to `__aeabi_uldivmod'

This adds a call to ACCESS_ONCE() to force it to not consider
it to be constant, and leaves the more efficient normal case
in place for modern compilers, using an #ifdef to annotate
why we do this hack.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 drivers/watchdog/kempld_wdt.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/drivers/watchdog/kempld_wdt.c b/drivers/watchdog/kempld_wdt.c
index 8e302d0e346c..3efa295ac627 100644
--- a/drivers/watchdog/kempld_wdt.c
+++ b/drivers/watchdog/kempld_wdt.c
@@ -140,12 +140,19 @@ static int kempld_wdt_set_stage_timeout(struct kempld_wdt_data *wdt_data,
 					unsigned int timeout)
 {
 	struct kempld_device_data *pld = wdt_data->pld;
-	u32 prescaler = kempld_prescaler[PRESCALER_21];
+	u32 prescaler;
 	u64 stage_timeout64;
 	u32 stage_timeout;
 	u32 remainder;
 	u8 stage_cfg;
 
+#if GCC_VERSION < 40400
+	/* work around a bug compiling do_div() */
+	prescaler = READ_ONCE(kempld_prescaler[PRESCALER_21]);
+#else
+	prescaler = kempld_prescaler[PRESCALER_21];
+#endif
+
 	if (!stage)
 		return -EINVAL;
 
-- 
2.11.0

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

* [PATCH review for 4.9 02/50] locking/lockdep: Add nest_lock integrity test
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 04/50] irqchip/crossbar: Fix incorrect type of local variables Levin, Alexander (Sasha Levin)
                   ` (47 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Peter Zijlstra, Andrew Morton, Chris Wilson, Linus Torvalds,
	Nicolai Hähnle, Paul E . McKenney, Thomas Gleixner,
	Ingo Molnar, Levin, Alexander (Sasha Levin)

From: Peter Zijlstra <peterz@infradead.org>

[ Upstream commit 7fb4a2cea6b18dab56d609530d077f168169ed6b ]

Boqun reported that hlock->references can overflow. Add a debug test
for that to generate a clear error when this happens.

Without this, lockdep is likely to report a mysterious failure on
unlock.

Reported-by: Boqun Feng <boqun.feng@gmail.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Nicolai Hähnle <Nicolai.Haehnle@amd.com>
Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 kernel/locking/lockdep.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c
index 4d7ffc0a0d00..6599c7f3071d 100644
--- a/kernel/locking/lockdep.c
+++ b/kernel/locking/lockdep.c
@@ -3260,10 +3260,17 @@ static int __lock_acquire(struct lockdep_map *lock, unsigned int subclass,
 	if (depth) {
 		hlock = curr->held_locks + depth - 1;
 		if (hlock->class_idx == class_idx && nest_lock) {
-			if (hlock->references)
+			if (hlock->references) {
+				/*
+				 * Check: unsigned int references:12, overflow.
+				 */
+				if (DEBUG_LOCKS_WARN_ON(hlock->references == (1 << 12)-1))
+					return 0;
+
 				hlock->references++;
-			else
+			} else {
 				hlock->references = 2;
+			}
 
 			return 1;
 		}
-- 
2.11.0

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

* [PATCH review for 4.9 06/50] mac80211_hwsim: check HWSIM_ATTR_RADIO_NAME length
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (3 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 05/50] initramfs: finish fput() before accessing any binary from initramfs Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 08/50] qed: Don't use attention PTT for configuring BW Levin, Alexander (Sasha Levin)
                   ` (43 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: Johannes Berg, Levin, Alexander (Sasha Levin)

From: Johannes Berg <johannes.berg@intel.com>

[ Upstream commit ff4dd73dd2b4806419f8ff65cbce11d5019548d0 ]

Unfortunately, the nla policy was defined to have HWSIM_ATTR_RADIO_NAME
as an NLA_STRING, rather than NLA_NUL_STRING, so we can't use it as a
NUL-terminated string in the kernel.

Rather than break the API, kasprintf() the string to a new buffer to
guarantee NUL termination.

Reported-by: Andrew Zaborowski <andrew.zaborowski@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 drivers/net/wireless/mac80211_hwsim.c | 28 +++++++++++++++++++++-------
 1 file changed, 21 insertions(+), 7 deletions(-)

diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
index 0fd7d7ed07ce..77528d647b6e 100644
--- a/drivers/net/wireless/mac80211_hwsim.c
+++ b/drivers/net/wireless/mac80211_hwsim.c
@@ -3048,6 +3048,7 @@ static int hwsim_register_received_nl(struct sk_buff *skb_2,
 static int hwsim_new_radio_nl(struct sk_buff *msg, struct genl_info *info)
 {
 	struct hwsim_new_radio_params param = { 0 };
+	const char *hwname = NULL;
 
 	param.reg_strict = info->attrs[HWSIM_ATTR_REG_STRICT_REG];
 	param.p2p_device = info->attrs[HWSIM_ATTR_SUPPORT_P2P_DEVICE];
@@ -3061,8 +3062,14 @@ static int hwsim_new_radio_nl(struct sk_buff *msg, struct genl_info *info)
 	if (info->attrs[HWSIM_ATTR_NO_VIF])
 		param.no_vif = true;
 
-	if (info->attrs[HWSIM_ATTR_RADIO_NAME])
-		param.hwname = nla_data(info->attrs[HWSIM_ATTR_RADIO_NAME]);
+	if (info->attrs[HWSIM_ATTR_RADIO_NAME]) {
+		hwname = kasprintf(GFP_KERNEL, "%.*s",
+				   nla_len(info->attrs[HWSIM_ATTR_RADIO_NAME]),
+				   (char *)nla_data(info->attrs[HWSIM_ATTR_RADIO_NAME]));
+		if (!hwname)
+			return -ENOMEM;
+		param.hwname = hwname;
+	}
 
 	if (info->attrs[HWSIM_ATTR_USE_CHANCTX])
 		param.use_chanctx = true;
@@ -3090,11 +3097,15 @@ static int hwsim_del_radio_nl(struct sk_buff *msg, struct genl_info *info)
 	s64 idx = -1;
 	const char *hwname = NULL;
 
-	if (info->attrs[HWSIM_ATTR_RADIO_ID])
+	if (info->attrs[HWSIM_ATTR_RADIO_ID]) {
 		idx = nla_get_u32(info->attrs[HWSIM_ATTR_RADIO_ID]);
-	else if (info->attrs[HWSIM_ATTR_RADIO_NAME])
-		hwname = (void *)nla_data(info->attrs[HWSIM_ATTR_RADIO_NAME]);
-	else
+	} else if (info->attrs[HWSIM_ATTR_RADIO_NAME]) {
+		hwname = kasprintf(GFP_KERNEL, "%.*s",
+				   nla_len(info->attrs[HWSIM_ATTR_RADIO_NAME]),
+				   (char *)nla_data(info->attrs[HWSIM_ATTR_RADIO_NAME]));
+		if (!hwname)
+			return -ENOMEM;
+	} else
 		return -EINVAL;
 
 	spin_lock_bh(&hwsim_radio_lock);
@@ -3103,7 +3114,8 @@ static int hwsim_del_radio_nl(struct sk_buff *msg, struct genl_info *info)
 			if (data->idx != idx)
 				continue;
 		} else {
-			if (strcmp(hwname, wiphy_name(data->hw->wiphy)))
+			if (!hwname ||
+			    strcmp(hwname, wiphy_name(data->hw->wiphy)))
 				continue;
 		}
 
@@ -3114,10 +3126,12 @@ static int hwsim_del_radio_nl(struct sk_buff *msg, struct genl_info *info)
 		spin_unlock_bh(&hwsim_radio_lock);
 		mac80211_hwsim_del_radio(data, wiphy_name(data->hw->wiphy),
 					 info);
+		kfree(hwname);
 		return 0;
 	}
 	spin_unlock_bh(&hwsim_radio_lock);
 
+	kfree(hwname);
 	return -ENODEV;
 }
 
-- 
2.11.0

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

* [PATCH review for 4.9 05/50] initramfs: finish fput() before accessing any binary from initramfs
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (2 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 03/50] watchdog: kempld: fix gcc-4.3 build Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 06/50] mac80211_hwsim: check HWSIM_ATTR_RADIO_NAME length Levin, Alexander (Sasha Levin)
                   ` (44 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Lokesh Vutla, Al Viro, Tero Kristo, Sekhar Nori, Nishanth Menon,
	Andrew Morton, Linus Torvalds, Levin, Alexander (Sasha Levin)

From: Lokesh Vutla <lokeshvutla@ti.com>

[ Upstream commit 08865514805d2de8e7002fa8149c5de3e391f412 ]

Commit 4a9d4b024a31 ("switch fput to task_work_add") implements a
schedule_work() for completing fput(), but did not guarantee calling
__fput() after unpacking initramfs.  Because of this, there is a
possibility that during boot a driver can see ETXTBSY when it tries to
load a binary from initramfs as fput() is still pending on that binary.

This patch makes sure that fput() is completed after unpacking initramfs
and removes the call to flush_delayed_fput() in kernel_init() which
happens very late after unpacking initramfs.

Link: http://lkml.kernel.org/r/20170201140540.22051-1-lokeshvutla@ti.com
Signed-off-by: Lokesh Vutla <lokeshvutla@ti.com>
Reported-by: Murali Karicheri <m-karicheri2@ti.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: Tero Kristo <t-kristo@ti.com>
Cc: Sekhar Nori <nsekhar@ti.com>
Cc: Nishanth Menon <nm@ti.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 init/initramfs.c | 2 ++
 init/main.c      | 3 ---
 2 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/init/initramfs.c b/init/initramfs.c
index b32ad7d97ac9..981f286c1d16 100644
--- a/init/initramfs.c
+++ b/init/initramfs.c
@@ -18,6 +18,7 @@
 #include <linux/dirent.h>
 #include <linux/syscalls.h>
 #include <linux/utime.h>
+#include <linux/file.h>
 
 static ssize_t __init xwrite(int fd, const char *p, size_t count)
 {
@@ -647,6 +648,7 @@ static int __init populate_rootfs(void)
 			printk(KERN_EMERG "Initramfs unpacking failed: %s\n", err);
 		free_initrd();
 #endif
+		flush_delayed_fput();
 		/*
 		 * Try loading default modules from initramfs.  This gives
 		 * us a chance to load before device_initcalls.
diff --git a/init/main.c b/init/main.c
index ae3996ae9bac..25bac88bc66e 100644
--- a/init/main.c
+++ b/init/main.c
@@ -70,7 +70,6 @@
 #include <linux/shmem_fs.h>
 #include <linux/slab.h>
 #include <linux/perf_event.h>
-#include <linux/file.h>
 #include <linux/ptrace.h>
 #include <linux/blkdev.h>
 #include <linux/elevator.h>
@@ -947,8 +946,6 @@ static int __ref kernel_init(void *unused)
 	system_state = SYSTEM_RUNNING;
 	numa_default_policy();
 
-	flush_delayed_fput();
-
 	rcu_end_inkernel_boot();
 
 	if (ramdisk_execute_command) {
-- 
2.11.0

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

* [PATCH review for 4.9 09/50] mac80211: fix power saving clients handling in iwlwifi
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (5 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 08/50] qed: Don't use attention PTT for configuring BW Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 07/50] ALSA: hda: Add Geminilake HDMI codec ID Levin, Alexander (Sasha Levin)
                   ` (41 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Emmanuel Grumbach, Johannes Berg, Levin, Alexander (Sasha Levin)

From: Emmanuel Grumbach <emmanuel.grumbach@intel.com>

[ Upstream commit d98937f4ea713d21e0fcc345919f86c877dd8d6f ]

iwlwifi now supports RSS and can't let mac80211 track the
PS state based on the Rx frames since they can come out of
order. iwlwifi is now advertising AP_LINK_PS, and uses
explicit notifications to teach mac80211 about the PS state
of the stations and the PS poll / uAPSD trigger frames
coming our way from the peers.

Because of that, the TIM stopped being maintained in
mac80211. I tried to fix this in commit c68df2e7be0c
("mac80211: allow using AP_LINK_PS with mac80211-generated TIM IE")
but that was later reverted by Felix in commit 6c18a6b4e799
("Revert "mac80211: allow using AP_LINK_PS with mac80211-generated TIM IE")
since it broke drivers that do not implement set_tim.

Since none of the drivers that set AP_LINK_PS have the
set_tim() handler set besides iwlwifi, I can bail out in
__sta_info_recalc_tim if AP_LINK_PS AND .set_tim is not
implemented.

Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 net/mac80211/sta_info.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c
index b2c823ffad74..348700b424ea 100644
--- a/net/mac80211/sta_info.c
+++ b/net/mac80211/sta_info.c
@@ -688,7 +688,7 @@ static void __sta_info_recalc_tim(struct sta_info *sta, bool ignore_pending)
 	}
 
 	/* No need to do anything if the driver does all */
-	if (ieee80211_hw_check(&local->hw, AP_LINK_PS))
+	if (ieee80211_hw_check(&local->hw, AP_LINK_PS) && !local->ops->set_tim)
 		return;
 
 	if (sta->dead)
-- 
2.11.0

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

* [PATCH review for 4.9 08/50] qed: Don't use attention PTT for configuring BW
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (4 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 06/50] mac80211_hwsim: check HWSIM_ATTR_RADIO_NAME length Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 09/50] mac80211: fix power saving clients handling in iwlwifi Levin, Alexander (Sasha Levin)
                   ` (42 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Mintz, Yuval, David S . Miller, Levin, Alexander (Sasha Levin)

From: "Mintz, Yuval" <Yuval.Mintz@cavium.com>

[ Upstream commit 6f437d431930ff86e4a971d29321951faadb97c7 ]

Commit 653d2ffd6405 ("qed*: Fix link indication race") introduced another
race - one of the inner functions called from the link-change flow is
explicitly using the slowpath context dedicated PTT instead of gaining
that PTT from the caller. Since this flow can now be called from
a different context as well, we're in risk of the PTT breaking.

Fixes: 653d2ffd6405 ("qed*: Fix link indication race")
Signed-off-by: Yuval Mintz <Yuval.Mintz@cavium.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 drivers/net/ethernet/qlogic/qed/qed.h     | 4 +++-
 drivers/net/ethernet/qlogic/qed/qed_dev.c | 6 +++---
 drivers/net/ethernet/qlogic/qed/qed_mcp.c | 3 ++-
 3 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/drivers/net/ethernet/qlogic/qed/qed.h b/drivers/net/ethernet/qlogic/qed/qed.h
index 653bb5735f0c..433f8be57847 100644
--- a/drivers/net/ethernet/qlogic/qed/qed.h
+++ b/drivers/net/ethernet/qlogic/qed/qed.h
@@ -642,7 +642,9 @@ static inline u8 qed_concrete_to_sw_fid(struct qed_dev *cdev,
 #define OOO_LB_TC 9
 
 int qed_configure_vport_wfq(struct qed_dev *cdev, u16 vp_id, u32 rate);
-void qed_configure_vp_wfq_on_link_change(struct qed_dev *cdev, u32 min_pf_rate);
+void qed_configure_vp_wfq_on_link_change(struct qed_dev *cdev,
+					 struct qed_ptt *p_ptt,
+					 u32 min_pf_rate);
 
 void qed_clean_wfq_db(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt);
 #define QED_LEADING_HWFN(dev)   (&dev->hwfns[0])
diff --git a/drivers/net/ethernet/qlogic/qed/qed_dev.c b/drivers/net/ethernet/qlogic/qed/qed_dev.c
index edae5fc5fccd..41367c490a7f 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_dev.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_dev.c
@@ -2732,7 +2732,8 @@ int qed_configure_vport_wfq(struct qed_dev *cdev, u16 vp_id, u32 rate)
 }
 
 /* API to configure WFQ from mcp link change */
-void qed_configure_vp_wfq_on_link_change(struct qed_dev *cdev, u32 min_pf_rate)
+void qed_configure_vp_wfq_on_link_change(struct qed_dev *cdev,
+					 struct qed_ptt *p_ptt, u32 min_pf_rate)
 {
 	int i;
 
@@ -2746,8 +2747,7 @@ void qed_configure_vp_wfq_on_link_change(struct qed_dev *cdev, u32 min_pf_rate)
 	for_each_hwfn(cdev, i) {
 		struct qed_hwfn *p_hwfn = &cdev->hwfns[i];
 
-		__qed_configure_vp_wfq_on_link_change(p_hwfn,
-						      p_hwfn->p_dpc_ptt,
+		__qed_configure_vp_wfq_on_link_change(p_hwfn, p_ptt,
 						      min_pf_rate);
 	}
 }
diff --git a/drivers/net/ethernet/qlogic/qed/qed_mcp.c b/drivers/net/ethernet/qlogic/qed/qed_mcp.c
index bdc9ba92f6d4..8b7d2f963ee1 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_mcp.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_mcp.c
@@ -628,7 +628,8 @@ static void qed_mcp_handle_link_change(struct qed_hwfn *p_hwfn,
 
 	/* Min bandwidth configuration */
 	__qed_configure_pf_min_bandwidth(p_hwfn, p_ptt, p_link, min_bw);
-	qed_configure_vp_wfq_on_link_change(p_hwfn->cdev, p_link->min_pf_rate);
+	qed_configure_vp_wfq_on_link_change(p_hwfn->cdev, p_ptt,
+					    p_link->min_pf_rate);
 
 	p_link->an = !!(status & LINK_STATUS_AUTO_NEGOTIATE_ENABLED);
 	p_link->an_complete = !!(status &
-- 
2.11.0

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

* [PATCH review for 4.9 07/50] ALSA: hda: Add Geminilake HDMI codec ID
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (6 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 09/50] mac80211: fix power saving clients handling in iwlwifi Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 12/50] netfilter: nf_ct_expect: Change __nf_ct_expect_check() return value Levin, Alexander (Sasha Levin)
                   ` (40 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Vinod Koul, Senthilnathan Veppur, Takashi Iwai, Levin,
	Alexander (Sasha Levin)

From: Vinod Koul <vinod.koul@intel.com>

[ Upstream commit 126cfa2f5e15ae2ca7f70be71b07e6cd8d2b44d1 ]

Geminilake HDMI codec 0x280d is similar to previous platforms, so add it with
similar ops as previous.

Signed-off-by: Senthilnathan Veppur <senthilnathanx.veppur@intel.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 sound/pci/hda/patch_hdmi.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
index 775c67818bf1..bd650222e711 100644
--- a/sound/pci/hda/patch_hdmi.c
+++ b/sound/pci/hda/patch_hdmi.c
@@ -3685,6 +3685,7 @@ HDA_CODEC_ENTRY(0x80862808, "Broadwell HDMI",	patch_i915_hsw_hdmi),
 HDA_CODEC_ENTRY(0x80862809, "Skylake HDMI",	patch_i915_hsw_hdmi),
 HDA_CODEC_ENTRY(0x8086280a, "Broxton HDMI",	patch_i915_hsw_hdmi),
 HDA_CODEC_ENTRY(0x8086280b, "Kabylake HDMI",	patch_i915_hsw_hdmi),
+HDA_CODEC_ENTRY(0x8086280d, "Geminilake HDMI",	patch_i915_hsw_hdmi),
 HDA_CODEC_ENTRY(0x80862880, "CedarTrail HDMI",	patch_generic_hdmi),
 HDA_CODEC_ENTRY(0x80862882, "Valleyview2 HDMI",	patch_i915_byt_hdmi),
 HDA_CODEC_ENTRY(0x80862883, "Braswell HDMI",	patch_i915_byt_hdmi),
-- 
2.11.0

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

* [PATCH review for 4.9 11/50] staging: vchiq_2835_arm: Make cache-line-size a required DT property
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (9 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 10/50] net/mlx4_en: fix overflow in mlx4_en_init_timestamp() Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 13/50] iio: adc: xilinx: Fix error handling Levin, Alexander (Sasha Levin)
                   ` (37 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Michael Zoran, Greg Kroah-Hartman, Levin, Alexander (Sasha Levin)

From: Michael Zoran <mzoran@crowfest.net>

[ Upstream commit 6cf1bf636a067eb308cb3a8322b9d6b1844a075d ]

The original github source allowed for the cache-line-size property
to be missing.  Since recent firmwares also require this property,
it makes sense to always require it in the driver as well.

If the cache-line-size property is missing, then the driver probe
should fail as no dev since the kernel and dt may be out of sync.
The fix is to add a check for the return value of of_property_read_u32.

Changes V2:
	1. Add error message if cache-line-size is missing.
	2. Simple check for non-zero return value from
	   of_property_read_u32.

Signed-off-by: Michael Zoran <mzoran@crowfest.net>
Acked-by: Stefan Wahren <stefan.wahren@i2se.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 .../staging/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c    | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c
index 1091b9f1dd07..c2286486d28e 100644
--- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c
+++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c
@@ -106,8 +106,14 @@ int vchiq_platform_init(struct platform_device *pdev, VCHIQ_STATE_T *state)
 
 	g_virt_to_bus_offset = virt_to_dma(dev, (void *)0);
 
-	(void)of_property_read_u32(dev->of_node, "cache-line-size",
+	err = of_property_read_u32(dev->of_node, "cache-line-size",
 				   &g_cache_line_size);
+
+	if (err) {
+		dev_err(dev, "Missing cache-line-size property\n");
+		return -ENODEV;
+	}
+
 	g_fragments_size = 2 * g_cache_line_size;
 
 	/* Allocate space for the channels in coherent memory */
-- 
2.11.0

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

* [PATCH review for 4.9 12/50] netfilter: nf_ct_expect: Change __nf_ct_expect_check() return value.
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (7 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 07/50] ALSA: hda: Add Geminilake HDMI codec ID Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 10/50] net/mlx4_en: fix overflow in mlx4_en_init_timestamp() Levin, Alexander (Sasha Levin)
                   ` (39 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Jarno Rajahalme, Pablo Neira Ayuso, Levin, Alexander (Sasha Levin)

From: Jarno Rajahalme <jarno@ovn.org>

[ Upstream commit 4b86c459c7bee3acaf92f0e2b4c6ac803eaa1a58 ]

Commit 4dee62b1b9b4 ("netfilter: nf_ct_expect: nf_ct_expect_insert()
returns void") inadvertently changed the successful return value of
nf_ct_expect_related_report() from 0 to 1 due to
__nf_ct_expect_check() returning 1 on success.  Prevent this
regression in the future by changing the return value of
__nf_ct_expect_check() to 0 on success.

Signed-off-by: Jarno Rajahalme <jarno@ovn.org>
Acked-by: Joe Stringer <joe@ovn.org>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 net/netfilter/nf_conntrack_expect.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/net/netfilter/nf_conntrack_expect.c b/net/netfilter/nf_conntrack_expect.c
index f8dbacf66795..0d6c72d6b9ba 100644
--- a/net/netfilter/nf_conntrack_expect.c
+++ b/net/netfilter/nf_conntrack_expect.c
@@ -411,7 +411,7 @@ static inline int __nf_ct_expect_check(struct nf_conntrack_expect *expect)
 	struct net *net = nf_ct_exp_net(expect);
 	struct hlist_node *next;
 	unsigned int h;
-	int ret = 1;
+	int ret = 0;
 
 	if (!master_help) {
 		ret = -ESHUTDOWN;
@@ -461,7 +461,7 @@ int nf_ct_expect_related_report(struct nf_conntrack_expect *expect,
 
 	spin_lock_bh(&nf_conntrack_expect_lock);
 	ret = __nf_ct_expect_check(expect);
-	if (ret <= 0)
+	if (ret < 0)
 		goto out;
 
 	ret = nf_ct_expect_insert(expect);
-- 
2.11.0

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

* [PATCH review for 4.9 10/50] net/mlx4_en: fix overflow in mlx4_en_init_timestamp()
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (8 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 12/50] netfilter: nf_ct_expect: Change __nf_ct_expect_check() return value Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 11/50] staging: vchiq_2835_arm: Make cache-line-size a required DT property Levin, Alexander (Sasha Levin)
                   ` (38 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Eric Dumazet, Tariq Toukan, Eugenia Emantayev, David S . Miller,
	Levin, Alexander (Sasha Levin)

From: Eric Dumazet <edumazet@google.com>

[ Upstream commit 47d3a07528ecbbccf53bc4390d70b4e3d1c04fcf ]

The cited commit makes a great job of finding optimal shift/multiplier
values assuming a 10 seconds wrap around, but forgot to change the
overflow_period computation.

It overflows in cyclecounter_cyc2ns(), and the final result is 804 ms,
which is silly.

Lets simply use 5 seconds, no need to recompute this, given how it is
supposed to work.

Later, we will use a timer instead of a work queue, since the new RX
allocation schem will no longer need mlx4_en_recover_from_oom() and the
service_task firing every 250 ms.

Fixes: 31c128b66e5b ("net/mlx4_en: Choose time-stamping shift value according to HW frequency")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Tariq Toukan <tariqt@mellanox.com>
Cc: Eugenia Emantayev <eugenia@mellanox.com>
Reviewed-by: Tariq Toukan <tariqt@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 drivers/net/ethernet/mellanox/mlx4/en_clock.c | 18 ++++++++----------
 drivers/net/ethernet/mellanox/mlx4/mlx4_en.h  |  1 -
 2 files changed, 8 insertions(+), 11 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx4/en_clock.c b/drivers/net/ethernet/mellanox/mlx4/en_clock.c
index a5fc46bbcbe2..d4d97ca12e83 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_clock.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_clock.c
@@ -88,10 +88,17 @@ void mlx4_en_remove_timestamp(struct mlx4_en_dev *mdev)
 	}
 }
 
+#define MLX4_EN_WRAP_AROUND_SEC	10UL
+/* By scheduling the overflow check every 5 seconds, we have a reasonably
+ * good chance we wont miss a wrap around.
+ * TOTO: Use a timer instead of a work queue to increase the guarantee.
+ */
+#define MLX4_EN_OVERFLOW_PERIOD (MLX4_EN_WRAP_AROUND_SEC * HZ / 2)
+
 void mlx4_en_ptp_overflow_check(struct mlx4_en_dev *mdev)
 {
 	bool timeout = time_is_before_jiffies(mdev->last_overflow_check +
-					      mdev->overflow_period);
+					      MLX4_EN_OVERFLOW_PERIOD);
 	unsigned long flags;
 
 	if (timeout) {
@@ -236,7 +243,6 @@ static const struct ptp_clock_info mlx4_en_ptp_clock_info = {
 	.enable		= mlx4_en_phc_enable,
 };
 
-#define MLX4_EN_WRAP_AROUND_SEC	10ULL
 
 /* This function calculates the max shift that enables the user range
  * of MLX4_EN_WRAP_AROUND_SEC values in the cycles register.
@@ -261,7 +267,6 @@ void mlx4_en_init_timestamp(struct mlx4_en_dev *mdev)
 {
 	struct mlx4_dev *dev = mdev->dev;
 	unsigned long flags;
-	u64 ns, zero = 0;
 
 	/* mlx4_en_init_timestamp is called for each netdev.
 	 * mdev->ptp_clock is common for all ports, skip initialization if
@@ -285,13 +290,6 @@ void mlx4_en_init_timestamp(struct mlx4_en_dev *mdev)
 			 ktime_to_ns(ktime_get_real()));
 	write_unlock_irqrestore(&mdev->clock_lock, flags);
 
-	/* Calculate period in seconds to call the overflow watchdog - to make
-	 * sure counter is checked at least once every wrap around.
-	 */
-	ns = cyclecounter_cyc2ns(&mdev->cycles, mdev->cycles.mask, zero, &zero);
-	do_div(ns, NSEC_PER_SEC / 2 / HZ);
-	mdev->overflow_period = ns;
-
 	/* Configure the PHC */
 	mdev->ptp_clock_info = mlx4_en_ptp_clock_info;
 	snprintf(mdev->ptp_clock_info.name, 16, "mlx4 ptp");
diff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
index a3528dd1e72e..df0f39611c5e 100644
--- a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
+++ b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
@@ -419,7 +419,6 @@ struct mlx4_en_dev {
 	struct cyclecounter	cycles;
 	struct timecounter	clock;
 	unsigned long		last_overflow_check;
-	unsigned long		overflow_period;
 	struct ptp_clock	*ptp_clock;
 	struct ptp_clock_info	ptp_clock_info;
 	struct notifier_block	nb;
-- 
2.11.0

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

* [PATCH review for 4.9 13/50] iio: adc: xilinx: Fix error handling
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (10 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 11/50] staging: vchiq_2835_arm: Make cache-line-size a required DT property Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 14/50] f2fs: do SSR for data when there is enough free space Levin, Alexander (Sasha Levin)
                   ` (36 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Christophe JAILLET, Jonathan Cameron, Levin, Alexander (Sasha Levin)

From: Christophe JAILLET <christophe.jaillet@wanadoo.fr>

[ Upstream commit ca1c39ef76376b67303d01f94fe98bb68bb3861a ]

Reorder error handling labels in order to match the way resources have
been allocated.

Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Acked-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 drivers/iio/adc/xilinx-xadc-core.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/iio/adc/xilinx-xadc-core.c b/drivers/iio/adc/xilinx-xadc-core.c
index 0a6beb3d99cb..56cf5907a5f0 100644
--- a/drivers/iio/adc/xilinx-xadc-core.c
+++ b/drivers/iio/adc/xilinx-xadc-core.c
@@ -1208,7 +1208,7 @@ static int xadc_probe(struct platform_device *pdev)
 
 	ret = xadc->ops->setup(pdev, indio_dev, irq);
 	if (ret)
-		goto err_free_samplerate_trigger;
+		goto err_clk_disable_unprepare;
 
 	ret = request_irq(irq, xadc->ops->interrupt_handler, 0,
 			dev_name(&pdev->dev), indio_dev);
@@ -1268,6 +1268,8 @@ static int xadc_probe(struct platform_device *pdev)
 
 err_free_irq:
 	free_irq(irq, indio_dev);
+err_clk_disable_unprepare:
+	clk_disable_unprepare(xadc->clk);
 err_free_samplerate_trigger:
 	if (xadc->ops->flags & XADC_FLAGS_BUFFERED)
 		iio_trigger_free(xadc->samplerate_trigger);
@@ -1277,8 +1279,6 @@ err_free_convst_trigger:
 err_triggered_buffer_cleanup:
 	if (xadc->ops->flags & XADC_FLAGS_BUFFERED)
 		iio_triggered_buffer_cleanup(indio_dev);
-err_clk_disable_unprepare:
-	clk_disable_unprepare(xadc->clk);
 err_device_free:
 	kfree(indio_dev->channels);
 
-- 
2.11.0

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

* [PATCH review for 4.9 14/50] f2fs: do SSR for data when there is enough free space
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (11 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 13/50] iio: adc: xilinx: Fix error handling Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 15/50] sched/fair: Update rq clock before changing a task's CPU affinity Levin, Alexander (Sasha Levin)
                   ` (35 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Yunlong Song, Jaegeuk Kim, Levin, Alexander (Sasha Levin)

From: Yunlong Song <yunlong.song@huawei.com>

[ Upstream commit 035e97adab26c1121cedaeb9bd04cf48a8e8cf51 ]

In allocate_segment_by_default(), need_SSR() already detected it's time to do
SSR. So, let's try to find victims for data segments more aggressively in time.

Signed-off-by: Yunlong Song <yunlong.song@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 fs/f2fs/segment.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index 74a2b444406d..e10f61684ea4 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -1263,7 +1263,7 @@ static int get_ssr_segment(struct f2fs_sb_info *sbi, int type)
 	struct curseg_info *curseg = CURSEG_I(sbi, type);
 	const struct victim_selection *v_ops = DIRTY_I(sbi)->v_ops;
 
-	if (IS_NODESEG(type) || !has_not_enough_free_secs(sbi, 0, 0))
+	if (IS_NODESEG(type))
 		return v_ops->get_victim(sbi,
 				&(curseg)->next_segno, BG_GC, type, SSR);
 
-- 
2.11.0

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

* [PATCH review for 4.9 16/50] Btrfs: send, fix failure to rename top level inode due to name collision
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (13 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 15/50] sched/fair: Update rq clock before changing a task's CPU affinity Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 17/50] f2fs: do not wait for writeback in write_begin Levin, Alexander (Sasha Levin)
                   ` (33 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Robbie Ko, Filipe Manana, Levin, Alexander (Sasha Levin)

From: Robbie Ko <robbieko@synology.com>

[ Upstream commit 4dd9920d991745c4a16f53a8f615f706fbe4b3f7 ]

Under certain situations, an incremental send operation can fail due to a
premature attempt to create a new top level inode (a direct child of the
subvolume/snapshot root) whose name collides with another inode that was
removed from the send snapshot.

Consider the following example scenario.

Parent snapshot:

  .                 (ino 256, gen 8)
  |---- a1/         (ino 257, gen 9)
  |---- a2/         (ino 258, gen 9)

Send snapshot:

  .                 (ino 256, gen 3)
  |---- a2/         (ino 257, gen 7)

In this scenario, when receiving the incremental send stream, the btrfs
receive command fails like this (ran in verbose mode, -vv argument):

  rmdir a1
  mkfile o257-7-0
  rename o257-7-0 -> a2
  ERROR: rename o257-7-0 -> a2 failed: Is a directory

What happens when computing the incremental send stream is:

1) An operation to remove the directory with inode number 257 and
   generation 9 is issued.

2) An operation to create the inode with number 257 and generation 7 is
   issued. This creates the inode with an orphanized name of "o257-7-0".

3) An operation rename the new inode 257 to its final name, "a2", is
   issued. This is incorrect because inode 258, which has the same name
   and it's a child of the same parent (root inode 256), was not yet
   processed and therefore no rmdir operation for it was yet issued.
   The rename operation is issued because we fail to detect that the
   name of the new inode 257 collides with inode 258, because their
   parent, a subvolume/snapshot root (inode 256) has a different
   generation in both snapshots.

So fix this by ignoring the generation value of a parent directory that
matches a root inode (number 256) when we are checking if the name of the
inode currently being processed collides with the name of some other
inode that was not yet processed.

We can achieve this scenario of different inodes with the same number but
different generation values either by mounting a filesystem with the inode
cache option (-o inode_cache) or by creating and sending snapshots across
different filesystems, like in the following example:

  $ mkfs.btrfs -f /dev/sdb
  $ mount /dev/sdb /mnt
  $ mkdir /mnt/a1
  $ mkdir /mnt/a2
  $ btrfs subvolume snapshot -r /mnt /mnt/snap1
  $ btrfs send /mnt/snap1 -f /tmp/1.snap
  $ umount /mnt

  $ mkfs.btrfs -f /dev/sdc
  $ mount /dev/sdc /mnt
  $ touch /mnt/a2
  $ btrfs subvolume snapshot -r /mnt /mnt/snap2
  $ btrfs receive /mnt -f /tmp/1.snap
  # Take note that once the filesystem is created, its current
  # generation has value 7 so the inode from the second snapshot has
  # a generation value of 7. And after receiving the first snapshot
  # the filesystem is at a generation value of 10, because the call to
  # create the second snapshot bumps the generation to 8 (the snapshot
  # creation ioctl does a transaction commit), the receive command calls
  # the snapshot creation ioctl to create the first snapshot, which bumps
  # the filesystem's generation to 9, and finally when the receive
  # operation finishes it calls an ioctl to transition the first snapshot
  # (snap1) from RW mode to RO mode, which does another transaction commit
  # and bumps the filesystem's generation to 10.
  $ rm -f /tmp/1.snap
  $ btrfs send /mnt/snap1 -f /tmp/1.snap
  $ btrfs send -p /mnt/snap1 /mnt/snap2 -f /tmp/2.snap
  $ umount /mnt

  $ mkfs.btrfs -f /dev/sdd
  $ mount /dev/sdd /mnt
  $ btrfs receive /mnt /tmp/1.snap
  # Receive of snapshot snap2 used to fail.
  $ btrfs receive /mnt /tmp/2.snap

Signed-off-by: Robbie Ko <robbieko@synology.com>
Reviewed-by: Filipe Manana <fdmanana@suse.com>
[Rewrote changelog to be more precise and clear]
Signed-off-by: Filipe Manana <fdmanana@suse.com>

Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 fs/btrfs/send.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c
index 71261b459863..77f9efc1f7aa 100644
--- a/fs/btrfs/send.c
+++ b/fs/btrfs/send.c
@@ -1680,6 +1680,9 @@ static int is_inode_existent(struct send_ctx *sctx, u64 ino, u64 gen)
 {
 	int ret;
 
+	if (ino == BTRFS_FIRST_FREE_OBJECTID)
+		return 1;
+
 	ret = get_cur_inode_state(sctx, ino, gen);
 	if (ret < 0)
 		goto out;
@@ -1865,7 +1868,7 @@ static int will_overwrite_ref(struct send_ctx *sctx, u64 dir, u64 dir_gen,
 	 * not deleted and then re-created, if it was then we have no overwrite
 	 * and we can just unlink this entry.
 	 */
-	if (sctx->parent_root) {
+	if (sctx->parent_root && dir != BTRFS_FIRST_FREE_OBJECTID) {
 		ret = get_inode_info(sctx->parent_root, dir, NULL, &gen, NULL,
 				     NULL, NULL, NULL);
 		if (ret < 0 && ret != -ENOENT)
-- 
2.11.0

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

* [PATCH review for 4.9 17/50] f2fs: do not wait for writeback in write_begin
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (14 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 16/50] Btrfs: send, fix failure to rename top level inode due to name collision Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 18/50] md/linear: shutup lockdep warnning Levin, Alexander (Sasha Levin)
                   ` (32 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: Jaegeuk Kim, Levin, Alexander (Sasha Levin)

From: Jaegeuk Kim <jaegeuk@kernel.org>

[ Upstream commit 86d54795c94532075d862aa0a79f0c981dab4bdd ]

Otherwise we can get livelock like below.

[79880.428136] dbench          D    0 18405  18404 0x00000000
[79880.428139] Call Trace:
[79880.428142]  __schedule+0x219/0x6b0
[79880.428144]  schedule+0x36/0x80
[79880.428147]  schedule_timeout+0x243/0x2e0
[79880.428152]  ? update_sd_lb_stats+0x16b/0x5f0
[79880.428155]  ? ktime_get+0x3c/0xb0
[79880.428157]  io_schedule_timeout+0xa6/0x110
[79880.428161]  __lock_page+0xf7/0x130
[79880.428164]  ? unlock_page+0x30/0x30
[79880.428167]  pagecache_get_page+0x16b/0x250
[79880.428171]  grab_cache_page_write_begin+0x20/0x40
[79880.428182]  f2fs_write_begin+0xa2/0xdb0 [f2fs]
[79880.428192]  ? f2fs_mark_inode_dirty_sync+0x16/0x30 [f2fs]
[79880.428197]  ? kmem_cache_free+0x79/0x200
[79880.428203]  ? __mark_inode_dirty+0x17f/0x360
[79880.428206]  generic_perform_write+0xbb/0x190
[79880.428213]  ? file_update_time+0xa4/0xf0
[79880.428217]  __generic_file_write_iter+0x19b/0x1e0
[79880.428226]  f2fs_file_write_iter+0x9c/0x180 [f2fs]
[79880.428231]  __vfs_write+0xc5/0x140
[79880.428235]  vfs_write+0xb2/0x1b0
[79880.428238]  SyS_write+0x46/0xa0
[79880.428242]  entry_SYSCALL_64_fastpath+0x1e/0xad

Fixes: cae96a5c8ab6 ("f2fs: check io submission more precisely")
Reviewed-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 fs/f2fs/data.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 14db4b712021..99432b59c5cb 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -1619,7 +1619,12 @@ static int f2fs_write_begin(struct file *file, struct address_space *mapping,
 			goto fail;
 	}
 repeat:
-	page = grab_cache_page_write_begin(mapping, index, flags);
+	/*
+	 * Do not use grab_cache_page_write_begin() to avoid deadlock due to
+	 * wait_for_stable_page. Will wait that below with our IO control.
+	 */
+	page = pagecache_get_page(mapping, index,
+				FGP_LOCK | FGP_WRITE | FGP_CREAT, GFP_NOFS);
 	if (!page) {
 		err = -ENOMEM;
 		goto fail;
-- 
2.11.0

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

* [PATCH review for 4.9 15/50] sched/fair: Update rq clock before changing a task's CPU affinity
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (12 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 14/50] f2fs: do SSR for data when there is enough free space Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 16/50] Btrfs: send, fix failure to rename top level inode due to name collision Levin, Alexander (Sasha Levin)
                   ` (34 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Wanpeng Li, Peter Zijlstra, Linus Torvalds, Mike Galbraith,
	Thomas Gleixner, Ingo Molnar, Levin, Alexander (Sasha Levin)

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

[ Upstream commit a499c3ead88ccf147fc50689e85a530ad923ce36 ]

This is triggered during boot when CONFIG_SCHED_DEBUG is enabled:

 ------------[ cut here ]------------
 WARNING: CPU: 6 PID: 81 at kernel/sched/sched.h:812 set_next_entity+0x11d/0x380
 rq->clock_update_flags < RQCF_ACT_SKIP
 CPU: 6 PID: 81 Comm: torture_shuffle Not tainted 4.10.0+ #1
 Hardware name: LENOVO ThinkCentre M8500t-N000/SHARKBAY, BIOS FBKTC1AUS 02/16/2016
 Call Trace:
  dump_stack+0x85/0xc2
  __warn+0xcb/0xf0
  warn_slowpath_fmt+0x5f/0x80
  set_next_entity+0x11d/0x380
  set_curr_task_fair+0x2b/0x60
  do_set_cpus_allowed+0x139/0x180
  __set_cpus_allowed_ptr+0x113/0x260
  set_cpus_allowed_ptr+0x10/0x20
  torture_shuffle+0xfd/0x180
  kthread+0x10f/0x150
  ? torture_shutdown_init+0x60/0x60
  ? kthread_create_on_node+0x60/0x60
  ret_from_fork+0x31/0x40
 ---[ end trace dd94d92344cea9c6 ]---

The task is running && !queued, so there is no rq clock update before calling
set_curr_task().

This patch fixes it by updating rq clock after holding rq->lock/pi_lock
just as what other dequeue + put_prev + enqueue + set_curr story does.

Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Matt Fleming <matt@codeblueprint.co.uk>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/1487749975-5994-1-git-send-email-wanpeng.li@hotmail.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 kernel/sched/core.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 2098954c690f..d271a1c387eb 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -1141,6 +1141,7 @@ static int __set_cpus_allowed_ptr(struct task_struct *p,
 	int ret = 0;
 
 	rq = task_rq_lock(p, &rf);
+	update_rq_clock(rq);
 
 	if (p->flags & PF_KTHREAD) {
 		/*
-- 
2.11.0

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

* [PATCH review for 4.9 18/50] md/linear: shutup lockdep warnning
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (15 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 17/50] f2fs: do not wait for writeback in write_begin Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 20/50] net/mlx4_core: Fix VF overwrite of module param which disables DMFS on new probed PFs Levin, Alexander (Sasha Levin)
                   ` (31 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: Shaohua Li, Levin, Alexander (Sasha Levin)

From: Shaohua Li <shli@fb.com>

[ Upstream commit d939cdfde34f50b95254b375f498447c82190b3e ]

Commit 03a9e24(md linear: fix a race between linear_add() and
linear_congested()) introduces the warnning.

Acked-by: Coly Li <colyli@suse.de>
Signed-off-by: Shaohua Li <shli@fb.com>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 drivers/md/linear.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/md/linear.c b/drivers/md/linear.c
index b0c0aef92a37..12abf69d568a 100644
--- a/drivers/md/linear.c
+++ b/drivers/md/linear.c
@@ -223,7 +223,8 @@ static int linear_add(struct mddev *mddev, struct md_rdev *rdev)
 	 * oldconf until no one uses it anymore.
 	 */
 	mddev_suspend(mddev);
-	oldconf = rcu_dereference(mddev->private);
+	oldconf = rcu_dereference_protected(mddev->private,
+			lockdep_is_held(&mddev->reconfig_mutex));
 	mddev->raid_disks++;
 	WARN_ONCE(mddev->raid_disks != newconf->raid_disks,
 		"copied raid_disks doesn't match mddev->raid_disks");
-- 
2.11.0

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

* [PATCH review for 4.9 19/50] sparc64: Migrate hvcons irq to panicked cpu
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (17 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 20/50] net/mlx4_core: Fix VF overwrite of module param which disables DMFS on new probed PFs Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 21/50] crypto: xts - Add ECB dependency Levin, Alexander (Sasha Levin)
                   ` (29 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Vijay Kumar, David S . Miller, Levin, Alexander (Sasha Levin)

From: Vijay Kumar <vijay.ac.kumar@oracle.com>

[ Upstream commit 7dd4fcf5b70694dc961eb6b954673e4fc9730dbd ]

On panic, all other CPUs are stopped except the one which had
hit panic. To keep console alive, we need to migrate hvcons irq
to panicked CPU.

Signed-off-by: Vijay Kumar <vijay.ac.kumar@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 arch/sparc/include/asm/setup.h | 5 ++++-
 arch/sparc/kernel/smp_64.c     | 6 +++++-
 drivers/tty/serial/sunhv.c     | 6 ++++++
 3 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/arch/sparc/include/asm/setup.h b/arch/sparc/include/asm/setup.h
index be0cc1beed41..3fae200dd251 100644
--- a/arch/sparc/include/asm/setup.h
+++ b/arch/sparc/include/asm/setup.h
@@ -59,8 +59,11 @@ extern atomic_t dcpage_flushes;
 extern atomic_t dcpage_flushes_xcall;
 
 extern int sysctl_tsb_ratio;
-#endif
 
+#ifdef CONFIG_SERIAL_SUNHV
+void sunhv_migrate_hvcons_irq(int cpu);
+#endif
+#endif
 void sun_do_break(void);
 extern int stop_a_enabled;
 extern int scons_pwroff;
diff --git a/arch/sparc/kernel/smp_64.c b/arch/sparc/kernel/smp_64.c
index 2deb89ef1d5f..ca7cb8e57ab0 100644
--- a/arch/sparc/kernel/smp_64.c
+++ b/arch/sparc/kernel/smp_64.c
@@ -1465,8 +1465,12 @@ void smp_send_stop(void)
 	int cpu;
 
 	if (tlb_type == hypervisor) {
+		int this_cpu = smp_processor_id();
+#ifdef CONFIG_SERIAL_SUNHV
+		sunhv_migrate_hvcons_irq(this_cpu);
+#endif
 		for_each_online_cpu(cpu) {
-			if (cpu == smp_processor_id())
+			if (cpu == this_cpu)
 				continue;
 #ifdef CONFIG_SUN_LDOMS
 			if (ldom_domaining_enabled) {
diff --git a/drivers/tty/serial/sunhv.c b/drivers/tty/serial/sunhv.c
index 4e603d060e80..59828d819145 100644
--- a/drivers/tty/serial/sunhv.c
+++ b/drivers/tty/serial/sunhv.c
@@ -398,6 +398,12 @@ static struct uart_driver sunhv_reg = {
 
 static struct uart_port *sunhv_port;
 
+void sunhv_migrate_hvcons_irq(int cpu)
+{
+	/* Migrate hvcons irq to param cpu */
+	irq_force_affinity(sunhv_port->irq, cpumask_of(cpu));
+}
+
 /* Copy 's' into the con_write_page, decoding "\n" into
  * "\r\n" along the way.  We have to return two lengths
  * because the caller needs to know how much to advance
-- 
2.11.0

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

* [PATCH review for 4.9 20/50] net/mlx4_core: Fix VF overwrite of module param which disables DMFS on new probed PFs
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (16 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 18/50] md/linear: shutup lockdep warnning Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 19/50] sparc64: Migrate hvcons irq to panicked cpu Levin, Alexander (Sasha Levin)
                   ` (30 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Majd Dibbiny, Tariq Toukan, David S . Miller, Levin,
	Alexander (Sasha Levin)

From: Majd Dibbiny <majd@mellanox.com>

[ Upstream commit 95f1ba9a24af9769f6e20dfe9a77c863f253f311 ]

In the VF driver, module parameter mlx4_log_num_mgm_entry_size was
mistakenly overwritten -- and in a manner which overrode the
device-managed flow steering option encoded in the parameter.

log_num_mgm_entry_size is a global module parameter which
affects all ConnectX-3 PFs installed on that host.
If a VF changes log_num_mgm_entry_size, this will affect all PFs
which are probed subsequent to the change (by disabling DMFS for
those PFs).

Fixes: 3c439b5586e9 ("mlx4_core: Allow choosing flow steering mode")
Signed-off-by: Majd Dibbiny <majd@mellanox.com>
Reviewed-by: Jack Morgenstein <jackm@dev.mellanox.co.il>
Signed-off-by: Tariq Toukan <tariqt@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 drivers/net/ethernet/mellanox/mlx4/main.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx4/main.c b/drivers/net/ethernet/mellanox/mlx4/main.c
index ba652d8a2b93..727122de7df0 100644
--- a/drivers/net/ethernet/mellanox/mlx4/main.c
+++ b/drivers/net/ethernet/mellanox/mlx4/main.c
@@ -841,8 +841,6 @@ static int mlx4_slave_cap(struct mlx4_dev *dev)
 		return -ENOSYS;
 	}
 
-	mlx4_log_num_mgm_entry_size = hca_param.log_mc_entry_sz;
-
 	dev->caps.hca_core_clock = hca_param.hca_core_clock;
 
 	memset(&dev_cap, 0, sizeof(dev_cap));
-- 
2.11.0

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

* [PATCH review for 4.9 21/50] crypto: xts - Add ECB dependency
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (18 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 19/50] sparc64: Migrate hvcons irq to panicked cpu Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 22/50] mm/memory_hotplug: set magic number to page->freelist instead of page->lru.next Levin, Alexander (Sasha Levin)
                   ` (28 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Milan Broz, Herbert Xu, Levin, Alexander (Sasha Levin)

From: Milan Broz <gmazyland@gmail.com>

[ Upstream commit 12cb3a1c4184f891d965d1f39f8cfcc9ef617647 ]

Since the
   commit f1c131b45410a202eb45cc55980a7a9e4e4b4f40
   crypto: xts - Convert to skcipher
the XTS mode is based on ECB, so the mode must select
ECB otherwise it can fail to initialize.

Signed-off-by: Milan Broz <gmazyland@gmail.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 crypto/Kconfig | 1 +
 1 file changed, 1 insertion(+)

diff --git a/crypto/Kconfig b/crypto/Kconfig
index 84d71482bf08..fa98ad7edb60 100644
--- a/crypto/Kconfig
+++ b/crypto/Kconfig
@@ -360,6 +360,7 @@ config CRYPTO_XTS
 	select CRYPTO_BLKCIPHER
 	select CRYPTO_MANAGER
 	select CRYPTO_GF128MUL
+	select CRYPTO_ECB
 	help
 	  XTS: IEEE1619/D16 narrow block cipher use with aes-xts-plain,
 	  key size 256, 384 or 512 bits. This implementation currently
-- 
2.11.0

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

* [PATCH review for 4.9 22/50] mm/memory_hotplug: set magic number to page->freelist instead of page->lru.next
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (19 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 21/50] crypto: xts - Add ECB dependency Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 24/50] slub: do not merge cache if slub_debug contains a never-merge flag Levin, Alexander (Sasha Levin)
                   ` (27 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Yasuaki Ishimatsu, Yasuaki Ishimatsu, Thomas Gleixner,
	Ingo Molnar, H . Peter Anvin, Dave Hansen, Vlastimil Babka,
	Mel Gorman, Xishi Qiu, Andrew Morton, Linus Torvalds, Levin,
	Alexander (Sasha Levin)

From: Yasuaki Ishimatsu <yasu.isimatu@gmail.com>

[ Upstream commit ddffe98d166f4a93d996d5aa628fd745311fc1e7 ]

To identify that pages of page table are allocated from bootmem
allocator, magic number sets to page->lru.next.

But page->lru list is initialized in reserve_bootmem_region().  So when
calling free_pagetable(), the function cannot find the magic number of
pages.  And free_pagetable() frees the pages by free_reserved_page() not
put_page_bootmem().

But if the pages are allocated from bootmem allocator and used as page
table, the pages have private flag.  So before freeing the pages, we
should clear the private flag by put_page_bootmem().

Before applying the commit 7bfec6f47bb0 ("mm, page_alloc: check multiple
page fields with a single branch"), we could find the following visible
issue:

  BUG: Bad page state in process kworker/u1024:1
  page:ffffea103cfd8040 count:0 mapcount:0 mappi
  flags: 0x6fffff80000800(private)
  page dumped because: PAGE_FLAGS_CHECK_AT_FREE flag(s) set
  bad because of flags: 0x800(private)
  <snip>
  Call Trace:
  [...] dump_stack+0x63/0x87
  [...] bad_page+0x114/0x130
  [...] free_pages_prepare+0x299/0x2d0
  [...] free_hot_cold_page+0x31/0x150
  [...] __free_pages+0x25/0x30
  [...] free_pagetable+0x6f/0xb4
  [...] remove_pagetable+0x379/0x7ff
  [...] vmemmap_free+0x10/0x20
  [...] sparse_remove_one_section+0x149/0x180
  [...] __remove_pages+0x2e9/0x4f0
  [...] arch_remove_memory+0x63/0xc0
  [...] remove_memory+0x8c/0xc0
  [...] acpi_memory_device_remove+0x79/0xa5
  [...] acpi_bus_trim+0x5a/0x8d
  [...] acpi_bus_trim+0x38/0x8d
  [...] acpi_device_hotplug+0x1b7/0x418
  [...] acpi_hotplug_work_fn+0x1e/0x29
  [...] process_one_work+0x152/0x400
  [...] worker_thread+0x125/0x4b0
  [...] kthread+0xd8/0xf0
  [...] ret_from_fork+0x22/0x40

And the issue still silently occurs.

Until freeing the pages of page table allocated from bootmem allocator,
the page->freelist is never used.  So the patch sets magic number to
page->freelist instead of page->lru.next.

[isimatu.yasuaki@jp.fujitsu.com: fix merge issue]
  Link: http://lkml.kernel.org/r/722b1cc4-93ac-dd8b-2be2-7a7e313b3b0b@gmail.com
Link: http://lkml.kernel.org/r/2c29bd9f-5b67-02d0-18a3-8828e78bbb6f@gmail.com
Signed-off-by: Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Mel Gorman <mgorman@techsingularity.net>
Cc: Xishi Qiu <qiuxishi@huawei.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 arch/x86/mm/init_64.c | 2 +-
 mm/memory_hotplug.c   | 5 +++--
 mm/sparse.c           | 2 +-
 3 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index 9a324fc8bed8..3e27ded6ac65 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -689,7 +689,7 @@ static void __meminit free_pagetable(struct page *page, int order)
 	if (PageReserved(page)) {
 		__ClearPageReserved(page);
 
-		magic = (unsigned long)page->lru.next;
+		magic = (unsigned long)page->freelist;
 		if (magic == SECTION_INFO || magic == MIX_SECTION_INFO) {
 			while (nr_pages--)
 				put_page_bootmem(page++);
diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
index ede137345a99..c9f715b2917f 100644
--- a/mm/memory_hotplug.c
+++ b/mm/memory_hotplug.c
@@ -179,7 +179,7 @@ static void release_memory_resource(struct resource *res)
 void get_page_bootmem(unsigned long info,  struct page *page,
 		      unsigned long type)
 {
-	page->lru.next = (struct list_head *) type;
+	page->freelist = (void *)type;
 	SetPagePrivate(page);
 	set_page_private(page, info);
 	page_ref_inc(page);
@@ -189,11 +189,12 @@ void put_page_bootmem(struct page *page)
 {
 	unsigned long type;
 
-	type = (unsigned long) page->lru.next;
+	type = (unsigned long) page->freelist;
 	BUG_ON(type < MEMORY_HOTPLUG_MIN_BOOTMEM_TYPE ||
 	       type > MEMORY_HOTPLUG_MAX_BOOTMEM_TYPE);
 
 	if (page_ref_dec_return(page) == 1) {
+		page->freelist = NULL;
 		ClearPagePrivate(page);
 		set_page_private(page, 0);
 		INIT_LIST_HEAD(&page->lru);
diff --git a/mm/sparse.c b/mm/sparse.c
index 1e168bf2779a..8c4c82e358e6 100644
--- a/mm/sparse.c
+++ b/mm/sparse.c
@@ -662,7 +662,7 @@ static void free_map_bootmem(struct page *memmap)
 		>> PAGE_SHIFT;
 
 	for (i = 0; i < nr_pages; i++, page++) {
-		magic = (unsigned long) page->lru.next;
+		magic = (unsigned long) page->freelist;
 
 		BUG_ON(magic == NODE_INFO);
 
-- 
2.11.0

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

* [PATCH review for 4.9 23/50] ocfs2/dlmglue: prepare tracking logic to avoid recursive cluster lock
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (21 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 24/50] slub: do not merge cache if slub_debug contains a never-merge flag Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 25/50] scsi: scsi_dh_emc: return success in clariion_std_inquiry() Levin, Alexander (Sasha Levin)
                   ` (25 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Eric Ren, Stephen Rothwell, Mark Fasheh, Joel Becker,
	Andrew Morton, Linus Torvalds, Levin, Alexander (Sasha Levin)

From: Eric Ren <zren@suse.com>

[ Upstream commit 439a36b8ef38657f765b80b775e2885338d72451 ]

We are in the situation that we have to avoid recursive cluster locking,
but there is no way to check if a cluster lock has been taken by a precess
already.

Mostly, we can avoid recursive locking by writing code carefully.
However, we found that it's very hard to handle the routines that are
invoked directly by vfs code.  For instance:

  const struct inode_operations ocfs2_file_iops = {
      .permission     = ocfs2_permission,
      .get_acl        = ocfs2_iop_get_acl,
      .set_acl        = ocfs2_iop_set_acl,
  };

Both ocfs2_permission() and ocfs2_iop_get_acl() call ocfs2_inode_lock(PR):

  do_sys_open
   may_open
    inode_permission
     ocfs2_permission
      ocfs2_inode_lock() <=== first time
       generic_permission
        get_acl
         ocfs2_iop_get_acl
  	ocfs2_inode_lock() <=== recursive one

A deadlock will occur if a remote EX request comes in between two of
ocfs2_inode_lock().  Briefly describe how the deadlock is formed:

On one hand, OCFS2_LOCK_BLOCKED flag of this lockres is set in
BAST(ocfs2_generic_handle_bast) when downconvert is started on behalf of
the remote EX lock request.  Another hand, the recursive cluster lock
(the second one) will be blocked in in __ocfs2_cluster_lock() because of
OCFS2_LOCK_BLOCKED.  But, the downconvert never complete, why? because
there is no chance for the first cluster lock on this node to be
unlocked - we block ourselves in the code path.

The idea to fix this issue is mostly taken from gfs2 code.

1. introduce a new field: struct ocfs2_lock_res.l_holders, to keep track
   of the processes' pid who has taken the cluster lock of this lock
   resource;

2. introduce a new flag for ocfs2_inode_lock_full:
   OCFS2_META_LOCK_GETBH; it means just getting back disk inode bh for
   us if we've got cluster lock.

3. export a helper: ocfs2_is_locked_by_me() is used to check if we have
   got the cluster lock in the upper code path.

The tracking logic should be used by some of the ocfs2 vfs's callbacks,
to solve the recursive locking issue cuased by the fact that vfs
routines can call into each other.

The performance penalty of processing the holder list should only be
seen at a few cases where the tracking logic is used, such as get/set
acl.

You may ask what if the first time we got a PR lock, and the second time
we want a EX lock? fortunately, this case never happens in the real
world, as far as I can see, including permission check,
(get|set)_(acl|attr), and the gfs2 code also do so.

[sfr@canb.auug.org.au remove some inlines]
Link: http://lkml.kernel.org/r/20170117100948.11657-2-zren@suse.com
Signed-off-by: Eric Ren <zren@suse.com>
Reviewed-by: Junxiao Bi <junxiao.bi@oracle.com>
Reviewed-by: Joseph Qi <jiangqi903@gmail.com>
Cc: Stephen Rothwell <sfr@canb.auug.org.au>
Cc: Mark Fasheh <mfasheh@versity.com>
Cc: Joel Becker <jlbec@evilplan.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 fs/ocfs2/dlmglue.c | 105 +++++++++++++++++++++++++++++++++++++++++++++++++++--
 fs/ocfs2/dlmglue.h |  18 +++++++++
 fs/ocfs2/ocfs2.h   |   1 +
 3 files changed, 121 insertions(+), 3 deletions(-)

diff --git a/fs/ocfs2/dlmglue.c b/fs/ocfs2/dlmglue.c
index 77d1632e905d..8dce4099a6ca 100644
--- a/fs/ocfs2/dlmglue.c
+++ b/fs/ocfs2/dlmglue.c
@@ -532,6 +532,7 @@ void ocfs2_lock_res_init_once(struct ocfs2_lock_res *res)
 	init_waitqueue_head(&res->l_event);
 	INIT_LIST_HEAD(&res->l_blocked_list);
 	INIT_LIST_HEAD(&res->l_mask_waiters);
+	INIT_LIST_HEAD(&res->l_holders);
 }
 
 void ocfs2_inode_lock_res_init(struct ocfs2_lock_res *res,
@@ -749,6 +750,50 @@ void ocfs2_lock_res_free(struct ocfs2_lock_res *res)
 	res->l_flags = 0UL;
 }
 
+/*
+ * Keep a list of processes who have interest in a lockres.
+ * Note: this is now only uesed for check recursive cluster locking.
+ */
+static inline void ocfs2_add_holder(struct ocfs2_lock_res *lockres,
+				   struct ocfs2_lock_holder *oh)
+{
+	INIT_LIST_HEAD(&oh->oh_list);
+	oh->oh_owner_pid = get_pid(task_pid(current));
+
+	spin_lock(&lockres->l_lock);
+	list_add_tail(&oh->oh_list, &lockres->l_holders);
+	spin_unlock(&lockres->l_lock);
+}
+
+static inline void ocfs2_remove_holder(struct ocfs2_lock_res *lockres,
+				       struct ocfs2_lock_holder *oh)
+{
+	spin_lock(&lockres->l_lock);
+	list_del(&oh->oh_list);
+	spin_unlock(&lockres->l_lock);
+
+	put_pid(oh->oh_owner_pid);
+}
+
+static inline int ocfs2_is_locked_by_me(struct ocfs2_lock_res *lockres)
+{
+	struct ocfs2_lock_holder *oh;
+	struct pid *pid;
+
+	/* look in the list of holders for one with the current task as owner */
+	spin_lock(&lockres->l_lock);
+	pid = task_pid(current);
+	list_for_each_entry(oh, &lockres->l_holders, oh_list) {
+		if (oh->oh_owner_pid == pid) {
+			spin_unlock(&lockres->l_lock);
+			return 1;
+		}
+	}
+	spin_unlock(&lockres->l_lock);
+
+	return 0;
+}
+
 static inline void ocfs2_inc_holders(struct ocfs2_lock_res *lockres,
 				     int level)
 {
@@ -2333,8 +2378,9 @@ int ocfs2_inode_lock_full_nested(struct inode *inode,
 		goto getbh;
 	}
 
-	if (ocfs2_mount_local(osb))
-		goto local;
+	if ((arg_flags & OCFS2_META_LOCK_GETBH) ||
+	    ocfs2_mount_local(osb))
+		goto update;
 
 	if (!(arg_flags & OCFS2_META_LOCK_RECOVERY))
 		ocfs2_wait_for_recovery(osb);
@@ -2363,7 +2409,7 @@ int ocfs2_inode_lock_full_nested(struct inode *inode,
 	if (!(arg_flags & OCFS2_META_LOCK_RECOVERY))
 		ocfs2_wait_for_recovery(osb);
 
-local:
+update:
 	/*
 	 * We only see this flag if we're being called from
 	 * ocfs2_read_locked_inode(). It means we're locking an inode
@@ -2497,6 +2543,59 @@ void ocfs2_inode_unlock(struct inode *inode,
 		ocfs2_cluster_unlock(OCFS2_SB(inode->i_sb), lockres, level);
 }
 
+/*
+ * This _tracker variantes are introduced to deal with the recursive cluster
+ * locking issue. The idea is to keep track of a lock holder on the stack of
+ * the current process. If there's a lock holder on the stack, we know the
+ * task context is already protected by cluster locking. Currently, they're
+ * used in some VFS entry routines.
+ *
+ * return < 0 on error, return == 0 if there's no lock holder on the stack
+ * before this call, return == 1 if this call would be a recursive locking.
+ */
+int ocfs2_inode_lock_tracker(struct inode *inode,
+			     struct buffer_head **ret_bh,
+			     int ex,
+			     struct ocfs2_lock_holder *oh)
+{
+	int status;
+	int arg_flags = 0, has_locked;
+	struct ocfs2_lock_res *lockres;
+
+	lockres = &OCFS2_I(inode)->ip_inode_lockres;
+	has_locked = ocfs2_is_locked_by_me(lockres);
+	/* Just get buffer head if the cluster lock has been taken */
+	if (has_locked)
+		arg_flags = OCFS2_META_LOCK_GETBH;
+
+	if (likely(!has_locked || ret_bh)) {
+		status = ocfs2_inode_lock_full(inode, ret_bh, ex, arg_flags);
+		if (status < 0) {
+			if (status != -ENOENT)
+				mlog_errno(status);
+			return status;
+		}
+	}
+	if (!has_locked)
+		ocfs2_add_holder(lockres, oh);
+
+	return has_locked;
+}
+
+void ocfs2_inode_unlock_tracker(struct inode *inode,
+				int ex,
+				struct ocfs2_lock_holder *oh,
+				int had_lock)
+{
+	struct ocfs2_lock_res *lockres;
+
+	lockres = &OCFS2_I(inode)->ip_inode_lockres;
+	if (!had_lock) {
+		ocfs2_remove_holder(lockres, oh);
+		ocfs2_inode_unlock(inode, ex);
+	}
+}
+
 int ocfs2_orphan_scan_lock(struct ocfs2_super *osb, u32 *seqno)
 {
 	struct ocfs2_lock_res *lockres;
diff --git a/fs/ocfs2/dlmglue.h b/fs/ocfs2/dlmglue.h
index d293a22c32c5..a7fc18ba0dc1 100644
--- a/fs/ocfs2/dlmglue.h
+++ b/fs/ocfs2/dlmglue.h
@@ -70,6 +70,11 @@ struct ocfs2_orphan_scan_lvb {
 	__be32	lvb_os_seqno;
 };
 
+struct ocfs2_lock_holder {
+	struct list_head oh_list;
+	struct pid *oh_owner_pid;
+};
+
 /* ocfs2_inode_lock_full() 'arg_flags' flags */
 /* don't wait on recovery. */
 #define OCFS2_META_LOCK_RECOVERY	(0x01)
@@ -77,6 +82,8 @@ struct ocfs2_orphan_scan_lvb {
 #define OCFS2_META_LOCK_NOQUEUE		(0x02)
 /* don't block waiting for the downconvert thread, instead return -EAGAIN */
 #define OCFS2_LOCK_NONBLOCK		(0x04)
+/* just get back disk inode bh if we've got cluster lock. */
+#define OCFS2_META_LOCK_GETBH		(0x08)
 
 /* Locking subclasses of inode cluster lock */
 enum {
@@ -170,4 +177,15 @@ void ocfs2_put_dlm_debug(struct ocfs2_dlm_debug *dlm_debug);
 
 /* To set the locking protocol on module initialization */
 void ocfs2_set_locking_protocol(void);
+
+/* The _tracker pair is used to avoid cluster recursive locking */
+int ocfs2_inode_lock_tracker(struct inode *inode,
+			     struct buffer_head **ret_bh,
+			     int ex,
+			     struct ocfs2_lock_holder *oh);
+void ocfs2_inode_unlock_tracker(struct inode *inode,
+				int ex,
+				struct ocfs2_lock_holder *oh,
+				int had_lock);
+
 #endif	/* DLMGLUE_H */
diff --git a/fs/ocfs2/ocfs2.h b/fs/ocfs2/ocfs2.h
index e63af7ddfe68..594575e380e8 100644
--- a/fs/ocfs2/ocfs2.h
+++ b/fs/ocfs2/ocfs2.h
@@ -172,6 +172,7 @@ struct ocfs2_lock_res {
 
 	struct list_head         l_blocked_list;
 	struct list_head         l_mask_waiters;
+	struct list_head	 l_holders;
 
 	unsigned long		 l_flags;
 	char                     l_name[OCFS2_LOCK_ID_MAX_LEN];
-- 
2.11.0

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

* [PATCH review for 4.9 24/50] slub: do not merge cache if slub_debug contains a never-merge flag
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (20 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 22/50] mm/memory_hotplug: set magic number to page->freelist instead of page->lru.next Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 23/50] ocfs2/dlmglue: prepare tracking logic to avoid recursive cluster lock Levin, Alexander (Sasha Levin)
                   ` (26 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Grygorii Maistrenko, Joonsoo Kim, Andrew Morton, Linus Torvalds,
	Levin, Alexander (Sasha Levin)

From: Grygorii Maistrenko <grygoriimkd@gmail.com>

[ Upstream commit c6e28895a4372992961888ffaadc9efc643b5bfe ]

In case CONFIG_SLUB_DEBUG_ON=n, find_mergeable() gets debug features from
commandline but never checks if there are features from the
SLAB_NEVER_MERGE set.

As a result selected by slub_debug caches are always mergeable if they
have been created without a custom constructor set or without one of the
SLAB_* debug features on.

This moves the SLAB_NEVER_MERGE check below the flags update from
commandline to make sure it won't merge the slab cache if one of the debug
features is on.

Link: http://lkml.kernel.org/r/20170101124451.GA4740@lp-laptop-d
Signed-off-by: Grygorii Maistrenko <grygoriimkd@gmail.com>
Reviewed-by: Pekka Enberg <penberg@kernel.org>
Acked-by: David Rientjes <rientjes@google.com>
Acked-by: Christoph Lameter <cl@linux.com>
Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 mm/slab_common.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/mm/slab_common.c b/mm/slab_common.c
index 5d2f24fbafc5..622f6b6ae844 100644
--- a/mm/slab_common.c
+++ b/mm/slab_common.c
@@ -255,7 +255,7 @@ struct kmem_cache *find_mergeable(size_t size, size_t align,
 {
 	struct kmem_cache *s;
 
-	if (slab_nomerge || (flags & SLAB_NEVER_MERGE))
+	if (slab_nomerge)
 		return NULL;
 
 	if (ctor)
@@ -266,6 +266,9 @@ struct kmem_cache *find_mergeable(size_t size, size_t align,
 	size = ALIGN(size, align);
 	flags = kmem_cache_flags(size, flags, name, NULL);
 
+	if (flags & SLAB_NEVER_MERGE)
+		return NULL;
+
 	list_for_each_entry_reverse(s, &slab_caches, list) {
 		if (slab_unmergeable(s))
 			continue;
-- 
2.11.0

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

* [PATCH review for 4.9 27/50] drm/amdgpu: refuse to reserve io mem for split VRAM buffers
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (23 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 25/50] scsi: scsi_dh_emc: return success in clariion_std_inquiry() Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 26/50] ASoC: mediatek: add I2C dependency for CS42XX8 Levin, Alexander (Sasha Levin)
                   ` (23 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Nicolai Hähnle, Alex Deucher, Levin, Alexander (Sasha Levin)

From: Nicolai Hähnle <nicolai.haehnle@amd.com>

[ Upstream commit 4694335dad7357e9b3d7822ab13049014d74d8b0 ]

When the fast blit path fails while attempting to move a buffer from RAM
to VRAM, we fall back to a CPU-based memcpy that cannot handle split VRAM
buffers. Instead of crashing, simply fail the buffer move.

Ideally, we would teach TTM about split buffers so that the fallback still
works in this case, but that is quite involved. So for now, apply the
simplest possible fix.

Fixes: 40361bb1704b ("drm/amdgpu: add VRAM manager v2")
Signed-off-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index 264899df9bfc..05ff98b43c50 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -491,6 +491,9 @@ static int amdgpu_ttm_io_mem_reserve(struct ttm_bo_device *bdev, struct ttm_mem_
 	case TTM_PL_TT:
 		break;
 	case TTM_PL_VRAM:
+		if (mem->start == AMDGPU_BO_INVALID_OFFSET)
+			return -EINVAL;
+
 		mem->bus.offset = mem->start << PAGE_SHIFT;
 		/* check if it's visible */
 		if ((mem->bus.offset + mem->bus.size) > adev->mc.visible_vram_size)
-- 
2.11.0

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

* [PATCH review for 4.9 25/50] scsi: scsi_dh_emc: return success in clariion_std_inquiry()
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (22 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 23/50] ocfs2/dlmglue: prepare tracking logic to avoid recursive cluster lock Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 27/50] drm/amdgpu: refuse to reserve io mem for split VRAM buffers Levin, Alexander (Sasha Levin)
                   ` (24 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Dan Carpenter, Martin K . Petersen, Levin, Alexander (Sasha Levin)

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

[ Upstream commit 4d7d39a18b8b81511f0b893b7d2203790bf8a58b ]

We accidentally return an uninitialized variable on success.

Fixes: b6ff1b14cdf4 ("[SCSI] scsi_dh: Update EMC handler")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 drivers/scsi/device_handler/scsi_dh_emc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/scsi/device_handler/scsi_dh_emc.c b/drivers/scsi/device_handler/scsi_dh_emc.c
index 375d81850f15..d5f6fbfa17bf 100644
--- a/drivers/scsi/device_handler/scsi_dh_emc.c
+++ b/drivers/scsi/device_handler/scsi_dh_emc.c
@@ -461,7 +461,7 @@ static int clariion_prep_fn(struct scsi_device *sdev, struct request *req)
 static int clariion_std_inquiry(struct scsi_device *sdev,
 				struct clariion_dh_data *csdev)
 {
-	int err;
+	int err = SCSI_DH_OK;
 	char *sp_model;
 
 	err = send_inquiry_cmd(sdev, 0, csdev);
-- 
2.11.0

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

* [PATCH review for 4.9 26/50] ASoC: mediatek: add I2C dependency for CS42XX8
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (24 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 27/50] drm/amdgpu: refuse to reserve io mem for split VRAM buffers Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 28/50] net: mvpp2: release reference to txq_cpu[] entry after unmapping Levin, Alexander (Sasha Levin)
                   ` (22 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Arnd Bergmann, Mark Brown, Levin, Alexander (Sasha Levin)

From: Arnd Bergmann <arnd@arndb.de>

[ Upstream commit 72cedf599fcebfd6cd2550274d7855838068d28c ]

We should not select drivers that depend on I2C when that is disabled,
as it results in a build error:

warning: (SND_SOC_MT2701_CS42448) selects SND_SOC_CS42XX8_I2C which has unmet direct dependencies (SOUND && !M68K && !UML && SND && SND_SOC && I2C)
sound/soc/codecs/cs42xx8-i2c.c:60:1: warning: data definition has no type or storage class
 module_i2c_driver(cs42xx8_i2c_driver);
sound/soc/codecs/cs42xx8-i2c.c:60:1: error: type defaults to 'int' in declaration of 'module_i2c_driver' [-Werror=implicit-int]

Fixes: 1f458d53f76c ("ASoC: mediatek: Add mt2701-cs42448 driver and config option.")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 sound/soc/mediatek/Kconfig | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sound/soc/mediatek/Kconfig b/sound/soc/mediatek/Kconfig
index 05cf809cf9e1..d7013bde6f45 100644
--- a/sound/soc/mediatek/Kconfig
+++ b/sound/soc/mediatek/Kconfig
@@ -13,7 +13,7 @@ config SND_SOC_MT2701
 
 config SND_SOC_MT2701_CS42448
 	tristate "ASoc Audio driver for MT2701 with CS42448 codec"
-	depends on SND_SOC_MT2701
+	depends on SND_SOC_MT2701 && I2C
 	select SND_SOC_CS42XX8_I2C
 	select SND_SOC_BT_SCO
 	help
-- 
2.11.0

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

* [PATCH review for 4.9 30/50] qed: Reserve doorbell BAR space for present CPUs
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (26 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 28/50] net: mvpp2: release reference to txq_cpu[] entry after unmapping Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 29/50] qede: Prevent index problems in loopback test Levin, Alexander (Sasha Levin)
                   ` (20 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Ram Amrani, Yuval Mintz, David S . Miller, Levin,
	Alexander (Sasha Levin)

From: Ram Amrani <Ram.Amrani@cavium.com>

[ Upstream commit c2dedf8773e873474535bd4a158609b9eda5403d ]

Reserving doorbell BAR space according to the currently active CPUs
may result in a bug if disabled CPUs are later enabled but no
doorbell space was reserved for them.

Signed-off-by: Ram Amrani <Ram.Amrani@cavium.com>
Signed-off-by: Yuval Mintz <Yuval.Mintz@cavium.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 drivers/net/ethernet/qlogic/qed/qed_dev.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/qlogic/qed/qed_dev.c b/drivers/net/ethernet/qlogic/qed/qed_dev.c
index 41367c490a7f..afe5e57d9acb 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_dev.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_dev.c
@@ -877,7 +877,7 @@ qed_hw_init_pf_doorbell_bar(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
 		/* Either EDPM is mandatory, or we are attempting to allocate a
 		 * WID per CPU.
 		 */
-		n_cpus = num_active_cpus();
+		n_cpus = num_present_cpus();
 		rc = qed_hw_init_dpi_size(p_hwfn, p_ptt, pwm_regsize, n_cpus);
 	}
 
-- 
2.11.0

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

* [PATCH review for 4.9 28/50] net: mvpp2: release reference to txq_cpu[] entry after unmapping
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (25 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 26/50] ASoC: mediatek: add I2C dependency for CS42XX8 Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 30/50] qed: Reserve doorbell BAR space for present CPUs Levin, Alexander (Sasha Levin)
                   ` (21 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Thomas Petazzoni, David S . Miller, Levin, Alexander (Sasha Levin)

From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>

[ Upstream commit 36fb7435b6ac4d288a2d4deea8934f9456ab46b6 ]

The mvpp2_txq_bufs_free() function is called upon TX completion to DMA
unmap TX buffers, and free the corresponding SKBs. It gets the
references to the SKB to free and the DMA buffer to unmap from a per-CPU
txq_pcpu data structure.

However, the code currently increments the pointer to the next entry
before doing the DMA unmap and freeing the SKB. It does not cause any
visible problem because for a given SKB the TX completion is guaranteed
to take place on the CPU where the TX was started. However, it is much
more logical to increment the pointer to the next entry once the current
entry has been completely unmapped/released.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Acked-by: Russell King <rmk+kernel@armlinux.org.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 drivers/net/ethernet/marvell/mvpp2.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/drivers/net/ethernet/marvell/mvpp2.c b/drivers/net/ethernet/marvell/mvpp2.c
index 0a4e81a253fb..ed6fae964ec5 100644
--- a/drivers/net/ethernet/marvell/mvpp2.c
+++ b/drivers/net/ethernet/marvell/mvpp2.c
@@ -4413,13 +4413,12 @@ static void mvpp2_txq_bufs_free(struct mvpp2_port *port,
 		struct mvpp2_txq_pcpu_buf *tx_buf =
 			txq_pcpu->buffs + txq_pcpu->txq_get_index;
 
-		mvpp2_txq_inc_get(txq_pcpu);
-
 		dma_unmap_single(port->dev->dev.parent, tx_buf->phys,
 				 tx_buf->size, DMA_TO_DEVICE);
-		if (!tx_buf->skb)
-			continue;
-		dev_kfree_skb_any(tx_buf->skb);
+		if (tx_buf->skb)
+			dev_kfree_skb_any(tx_buf->skb);
+
+		mvpp2_txq_inc_get(txq_pcpu);
 	}
 }
 
-- 
2.11.0

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

* [PATCH review for 4.9 29/50] qede: Prevent index problems in loopback test
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (27 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 30/50] qed: Reserve doorbell BAR space for present CPUs Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 31/50] qed: Read queue state before releasing buffer Levin, Alexander (Sasha Levin)
                   ` (19 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Sudarsana Reddy Kalluru, Yuval Mintz, David S . Miller, Levin,
	Alexander (Sasha Levin)

From: Sudarsana Reddy Kalluru <Sudarsana.Kalluru@cavium.com>

[ Upstream commit afe981d664aeeebc8d1bcbd7d2070b5432edaecb ]

Driver currently utilizes the same loop variable in two
nested loops.

Signed-off-by: Sudarsana Reddy Kalluru <Sudarsana.Kalluru@cavium.com>
Signed-off-by: Yuval Mintz <Yuval.Mintz@cavium.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 drivers/net/ethernet/qlogic/qede/qede_ethtool.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/qlogic/qede/qede_ethtool.c b/drivers/net/ethernet/qlogic/qede/qede_ethtool.c
index 7567cc464b88..634e4149af22 100644
--- a/drivers/net/ethernet/qlogic/qede/qede_ethtool.c
+++ b/drivers/net/ethernet/qlogic/qede/qede_ethtool.c
@@ -1221,7 +1221,7 @@ static int qede_selftest_receive_traffic(struct qede_dev *edev)
 	struct qede_rx_queue *rxq = NULL;
 	struct sw_rx_data *sw_rx_data;
 	union eth_rx_cqe *cqe;
-	int i, rc = 0;
+	int i, iter, rc = 0;
 	u8 *data_ptr;
 
 	for_each_queue(i) {
@@ -1240,7 +1240,7 @@ static int qede_selftest_receive_traffic(struct qede_dev *edev)
 	 * enabled. This is because the queue 0 is configured as the default
 	 * queue and that the loopback traffic is not IP.
 	 */
-	for (i = 0; i < QEDE_SELFTEST_POLL_COUNT; i++) {
+	for (iter = 0; iter < QEDE_SELFTEST_POLL_COUNT; iter++) {
 		if (!qede_has_rx_work(rxq)) {
 			usleep_range(100, 200);
 			continue;
@@ -1287,7 +1287,7 @@ static int qede_selftest_receive_traffic(struct qede_dev *edev)
 		qed_chain_recycle_consumed(&rxq->rx_comp_ring);
 	}
 
-	if (i == QEDE_SELFTEST_POLL_COUNT) {
+	if (iter == QEDE_SELFTEST_POLL_COUNT) {
 		DP_NOTICE(edev, "Failed to receive the traffic\n");
 		return -1;
 	}
-- 
2.11.0

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

* [PATCH review for 4.9 31/50] qed: Read queue state before releasing buffer
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (28 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 29/50] qede: Prevent index problems in loopback test Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 32/50] i2c: at91: ensure state is restored after suspending Levin, Alexander (Sasha Levin)
                   ` (18 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Ram Amrani, Yuval Mintz, David S . Miller, Levin,
	Alexander (Sasha Levin)

From: Ram Amrani <Ram.Amrani@cavium.com>

[ Upstream commit c5212b943d4b52a7d9e0d9f747e7ad59c50d31f1 ]

Currently the state is read only after the buffers are relesed.

Signed-off-by: Ram Amrani <Ram.Amrani@cavium.com>
Signed-off-by: Yuval Mintz <Yuval.Mintz@cavium.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 drivers/net/ethernet/qlogic/qed/qed_roce.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/net/ethernet/qlogic/qed/qed_roce.c b/drivers/net/ethernet/qlogic/qed/qed_roce.c
index f3a825a8f8d5..d9dcb0d1714c 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_roce.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_roce.c
@@ -1766,13 +1766,13 @@ static int qed_roce_query_qp(struct qed_hwfn *p_hwfn,
 	if (rc)
 		goto err_resp;
 
-	dma_free_coherent(&p_hwfn->cdev->pdev->dev, sizeof(*p_resp_ramrod_res),
-			  p_resp_ramrod_res, resp_ramrod_res_phys);
-
 	out_params->rq_psn = le32_to_cpu(p_resp_ramrod_res->psn);
 	rq_err_state = GET_FIELD(le32_to_cpu(p_resp_ramrod_res->err_flag),
 				 ROCE_QUERY_QP_RESP_OUTPUT_PARAMS_ERROR_FLG);
 
+	dma_free_coherent(&p_hwfn->cdev->pdev->dev, sizeof(*p_resp_ramrod_res),
+			  p_resp_ramrod_res, resp_ramrod_res_phys);
+
 	if (!(qp->req_offloaded)) {
 		/* Don't send query qp for the requester */
 		out_params->sq_psn = qp->sq_psn;
@@ -1813,9 +1813,6 @@ static int qed_roce_query_qp(struct qed_hwfn *p_hwfn,
 	if (rc)
 		goto err_req;
 
-	dma_free_coherent(&p_hwfn->cdev->pdev->dev, sizeof(*p_req_ramrod_res),
-			  p_req_ramrod_res, req_ramrod_res_phys);
-
 	out_params->sq_psn = le32_to_cpu(p_req_ramrod_res->psn);
 	sq_err_state = GET_FIELD(le32_to_cpu(p_req_ramrod_res->flags),
 				 ROCE_QUERY_QP_REQ_OUTPUT_PARAMS_ERR_FLG);
@@ -1823,6 +1820,9 @@ static int qed_roce_query_qp(struct qed_hwfn *p_hwfn,
 		GET_FIELD(le32_to_cpu(p_req_ramrod_res->flags),
 			  ROCE_QUERY_QP_REQ_OUTPUT_PARAMS_SQ_DRAINING_FLG);
 
+	dma_free_coherent(&p_hwfn->cdev->pdev->dev, sizeof(*p_req_ramrod_res),
+			  p_req_ramrod_res, req_ramrod_res_phys);
+
 	out_params->draining = false;
 
 	if (rq_err_state)
-- 
2.11.0

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

* [PATCH review for 4.9 33/50] ceph: don't update_dentry_lease unless we actually got one
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (30 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 32/50] i2c: at91: ensure state is restored after suspending Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 36/50] uapi: fix linux/rds.h userspace compilation errors Levin, Alexander (Sasha Levin)
                   ` (16 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Jeff Layton, Ilya Dryomov, Levin, Alexander (Sasha Levin)

From: Jeff Layton <jlayton@redhat.com>

[ Upstream commit 80d025ffede88969f6adf7266fbdedfd5641148a ]

This if block updates the dentry lease even in the case where
the MDS didn't grant one.

Signed-off-by: Jeff Layton <jlayton@redhat.com>
Reviewed-by: Yan, Zheng <zyan@redhat.com>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 fs/ceph/inode.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c
index 953275b651bc..4a6df2ce0f76 100644
--- a/fs/ceph/inode.c
+++ b/fs/ceph/inode.c
@@ -1323,8 +1323,8 @@ retry_lookup:
 				ceph_dir_clear_ordered(dir);
 				dout("d_delete %p\n", dn);
 				d_delete(dn);
-			} else {
-				if (have_lease && d_unhashed(dn))
+			} else if (have_lease) {
+				if (d_unhashed(dn))
 					d_add(dn, NULL);
 				update_dentry_lease(dn, rinfo->dlease,
 						    session,
-- 
2.11.0

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

* [PATCH review for 4.9 32/50] i2c: at91: ensure state is restored after suspending
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (29 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 31/50] qed: Read queue state before releasing buffer Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 33/50] ceph: don't update_dentry_lease unless we actually got one Levin, Alexander (Sasha Levin)
                   ` (17 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Alexandre Belloni, Wolfram Sang, Levin, Alexander (Sasha Levin)

From: Alexandre Belloni <alexandre.belloni@free-electrons.com>

[ Upstream commit e3ccc921b7d8fd1fcd10a00720e09823d8078666 ]

When going to suspend, the I2C registers may be lost because the power to
VDDcore is cut. Restore them when resuming.

Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
Acked-by: Ludovic Desroches <ludovic.desroches@microchip.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 drivers/i2c/busses/i2c-at91.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/i2c/busses/i2c-at91.c b/drivers/i2c/busses/i2c-at91.c
index 0b86c6173e07..c925a690cb32 100644
--- a/drivers/i2c/busses/i2c-at91.c
+++ b/drivers/i2c/busses/i2c-at91.c
@@ -1180,6 +1180,7 @@ static int at91_twi_suspend_noirq(struct device *dev)
 
 static int at91_twi_resume_noirq(struct device *dev)
 {
+	struct at91_twi_dev *twi_dev = dev_get_drvdata(dev);
 	int ret;
 
 	if (!pm_runtime_status_suspended(dev)) {
@@ -1191,6 +1192,8 @@ static int at91_twi_resume_noirq(struct device *dev)
 	pm_runtime_mark_last_busy(dev);
 	pm_request_autosuspend(dev);
 
+	at91_init_twi_bus(twi_dev);
+
 	return 0;
 }
 
-- 
2.11.0

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

* [PATCH review for 4.9 36/50] uapi: fix linux/rds.h userspace compilation errors
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (31 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 33/50] ceph: don't update_dentry_lease unless we actually got one Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 35/50] ceph: clean up unsafe d_parent accesses in build_dentry_path Levin, Alexander (Sasha Levin)
                   ` (15 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Dmitry V. Levin, David S . Miller, Levin, Alexander (Sasha Levin)

From: "Dmitry V. Levin" <ldv@altlinux.org>

[ Upstream commit feb0869d90e51ce8b6fd8a46588465b1b5a26d09 ]

Consistently use types from linux/types.h to fix the following
linux/rds.h userspace compilation errors:

/usr/include/linux/rds.h:106:2: error: unknown type name 'uint8_t'
  uint8_t name[32];
/usr/include/linux/rds.h:107:2: error: unknown type name 'uint64_t'
  uint64_t value;
/usr/include/linux/rds.h:117:2: error: unknown type name 'uint64_t'
  uint64_t next_tx_seq;
/usr/include/linux/rds.h:118:2: error: unknown type name 'uint64_t'
  uint64_t next_rx_seq;
/usr/include/linux/rds.h:121:2: error: unknown type name 'uint8_t'
  uint8_t transport[TRANSNAMSIZ];  /* null term ascii */
/usr/include/linux/rds.h:122:2: error: unknown type name 'uint8_t'
  uint8_t flags;
/usr/include/linux/rds.h:129:2: error: unknown type name 'uint64_t'
  uint64_t seq;
/usr/include/linux/rds.h:130:2: error: unknown type name 'uint32_t'
  uint32_t len;
/usr/include/linux/rds.h:135:2: error: unknown type name 'uint8_t'
  uint8_t flags;
/usr/include/linux/rds.h:139:2: error: unknown type name 'uint32_t'
  uint32_t sndbuf;
/usr/include/linux/rds.h:144:2: error: unknown type name 'uint32_t'
  uint32_t rcvbuf;
/usr/include/linux/rds.h:145:2: error: unknown type name 'uint64_t'
  uint64_t inum;
/usr/include/linux/rds.h:153:2: error: unknown type name 'uint64_t'
  uint64_t       hdr_rem;
/usr/include/linux/rds.h:154:2: error: unknown type name 'uint64_t'
  uint64_t       data_rem;
/usr/include/linux/rds.h:155:2: error: unknown type name 'uint32_t'
  uint32_t       last_sent_nxt;
/usr/include/linux/rds.h:156:2: error: unknown type name 'uint32_t'
  uint32_t       last_expected_una;
/usr/include/linux/rds.h:157:2: error: unknown type name 'uint32_t'
  uint32_t       last_seen_una;
/usr/include/linux/rds.h:164:2: error: unknown type name 'uint8_t'
  uint8_t  src_gid[RDS_IB_GID_LEN];
/usr/include/linux/rds.h:165:2: error: unknown type name 'uint8_t'
  uint8_t  dst_gid[RDS_IB_GID_LEN];
/usr/include/linux/rds.h:167:2: error: unknown type name 'uint32_t'
  uint32_t max_send_wr;
/usr/include/linux/rds.h:168:2: error: unknown type name 'uint32_t'
  uint32_t max_recv_wr;
/usr/include/linux/rds.h:169:2: error: unknown type name 'uint32_t'
  uint32_t max_send_sge;
/usr/include/linux/rds.h:170:2: error: unknown type name 'uint32_t'
  uint32_t rdma_mr_max;
/usr/include/linux/rds.h:171:2: error: unknown type name 'uint32_t'
  uint32_t rdma_mr_size;
/usr/include/linux/rds.h:212:9: error: unknown type name 'uint64_t'
 typedef uint64_t rds_rdma_cookie_t;
/usr/include/linux/rds.h:215:2: error: unknown type name 'uint64_t'
  uint64_t addr;
/usr/include/linux/rds.h:216:2: error: unknown type name 'uint64_t'
  uint64_t bytes;
/usr/include/linux/rds.h:221:2: error: unknown type name 'uint64_t'
  uint64_t cookie_addr;
/usr/include/linux/rds.h:222:2: error: unknown type name 'uint64_t'
  uint64_t flags;
/usr/include/linux/rds.h:228:2: error: unknown type name 'uint64_t'
  uint64_t  cookie_addr;
/usr/include/linux/rds.h:229:2: error: unknown type name 'uint64_t'
  uint64_t  flags;
/usr/include/linux/rds.h:234:2: error: unknown type name 'uint64_t'
  uint64_t flags;
/usr/include/linux/rds.h:240:2: error: unknown type name 'uint64_t'
  uint64_t local_vec_addr;
/usr/include/linux/rds.h:241:2: error: unknown type name 'uint64_t'
  uint64_t nr_local;
/usr/include/linux/rds.h:242:2: error: unknown type name 'uint64_t'
  uint64_t flags;
/usr/include/linux/rds.h:243:2: error: unknown type name 'uint64_t'
  uint64_t user_token;
/usr/include/linux/rds.h:248:2: error: unknown type name 'uint64_t'
  uint64_t  local_addr;
/usr/include/linux/rds.h:249:2: error: unknown type name 'uint64_t'
  uint64_t  remote_addr;
/usr/include/linux/rds.h:252:4: error: unknown type name 'uint64_t'
    uint64_t compare;
/usr/include/linux/rds.h:253:4: error: unknown type name 'uint64_t'
    uint64_t swap;
/usr/include/linux/rds.h:256:4: error: unknown type name 'uint64_t'
    uint64_t add;
/usr/include/linux/rds.h:259:4: error: unknown type name 'uint64_t'
    uint64_t compare;
/usr/include/linux/rds.h:260:4: error: unknown type name 'uint64_t'
    uint64_t swap;
/usr/include/linux/rds.h:261:4: error: unknown type name 'uint64_t'
    uint64_t compare_mask;
/usr/include/linux/rds.h:262:4: error: unknown type name 'uint64_t'
    uint64_t swap_mask;
/usr/include/linux/rds.h:265:4: error: unknown type name 'uint64_t'
    uint64_t add;
/usr/include/linux/rds.h:266:4: error: unknown type name 'uint64_t'
    uint64_t nocarry_mask;
/usr/include/linux/rds.h:269:2: error: unknown type name 'uint64_t'
  uint64_t flags;
/usr/include/linux/rds.h:270:2: error: unknown type name 'uint64_t'
  uint64_t user_token;
/usr/include/linux/rds.h:274:2: error: unknown type name 'uint64_t'
  uint64_t user_token;
/usr/include/linux/rds.h:275:2: error: unknown type name 'int32_t'
  int32_t  status;

Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 include/uapi/linux/rds.h | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/include/uapi/linux/rds.h b/include/uapi/linux/rds.h
index 0f9265cb2a96..7af20a136429 100644
--- a/include/uapi/linux/rds.h
+++ b/include/uapi/linux/rds.h
@@ -35,6 +35,7 @@
 #define _LINUX_RDS_H
 
 #include <linux/types.h>
+#include <linux/socket.h>		/* For __kernel_sockaddr_storage. */
 
 #define RDS_IB_ABI_VERSION		0x301
 
@@ -223,7 +224,7 @@ struct rds_get_mr_args {
 };
 
 struct rds_get_mr_for_dest_args {
-	struct sockaddr_storage	dest_addr;
+	struct __kernel_sockaddr_storage dest_addr;
 	struct rds_iovec 	vec;
 	uint64_t		cookie_addr;
 	uint64_t		flags;
-- 
2.11.0

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

* [PATCH review for 4.9 35/50] ceph: clean up unsafe d_parent accesses in build_dentry_path
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (32 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 36/50] uapi: fix linux/rds.h userspace compilation errors Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 34/50] ceph: fix bogus endianness change in ceph_ioctl_set_layout Levin, Alexander (Sasha Levin)
                   ` (14 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Jeff Layton, Ilya Dryomov, Levin, Alexander (Sasha Levin)

From: Jeff Layton <jlayton@redhat.com>

[ Upstream commit c6b0b656ca24ede6657abb4a2cd910fa9c1879ba ]

While we hold a reference to the dentry when build_dentry_path is
called, we could end up racing with a rename that changes d_parent.
Handle that situation correctly, by using the rcu_read_lock to
ensure that the parent dentry and inode stick around long enough
to safely check ceph_snap and ceph_ino.

Link: http://tracker.ceph.com/issues/18148
Signed-off-by: Jeff Layton <jlayton@redhat.com>
Reviewed-by: Yan, Zheng <zyan@redhat.com>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 fs/ceph/mds_client.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c
index e3e1a80b351e..c0f52c443c34 100644
--- a/fs/ceph/mds_client.c
+++ b/fs/ceph/mds_client.c
@@ -1782,13 +1782,18 @@ static int build_dentry_path(struct dentry *dentry,
 			     int *pfreepath)
 {
 	char *path;
+	struct inode *dir;
 
-	if (ceph_snap(d_inode(dentry->d_parent)) == CEPH_NOSNAP) {
-		*pino = ceph_ino(d_inode(dentry->d_parent));
+	rcu_read_lock();
+	dir = d_inode_rcu(dentry->d_parent);
+	if (dir && ceph_snap(dir) == CEPH_NOSNAP) {
+		*pino = ceph_ino(dir);
+		rcu_read_unlock();
 		*ppath = dentry->d_name.name;
 		*ppathlen = dentry->d_name.len;
 		return 0;
 	}
+	rcu_read_unlock();
 	path = ceph_mdsc_build_path(dentry, ppathlen, pino, 1);
 	if (IS_ERR(path))
 		return PTR_ERR(path);
-- 
2.11.0

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

* [PATCH review for 4.9 34/50] ceph: fix bogus endianness change in ceph_ioctl_set_layout
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (33 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 35/50] ceph: clean up unsafe d_parent accesses in build_dentry_path Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 37/50] uapi: fix linux/mroute6.h userspace compilation errors Levin, Alexander (Sasha Levin)
                   ` (13 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Jeff Layton, Ilya Dryomov, Levin, Alexander (Sasha Levin)

From: Jeff Layton <jlayton@redhat.com>

[ Upstream commit 24c149ad6914d349d8b64749f20f3f8ea5031fe0 ]

sparse says:

    fs/ceph/ioctl.c:100:28: warning: cast to restricted __le64

preferred_osd is a __s64 so we don't need to do any conversion. Also,
just remove the cast in ceph_ioctl_get_layout as it's not needed.

Signed-off-by: Jeff Layton <jlayton@redhat.com>
Reviewed-by: Sage Weil <sage@redhat.com>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 fs/ceph/ioctl.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/fs/ceph/ioctl.c b/fs/ceph/ioctl.c
index 7d752d53353a..4c9c72f26eb9 100644
--- a/fs/ceph/ioctl.c
+++ b/fs/ceph/ioctl.c
@@ -25,7 +25,7 @@ static long ceph_ioctl_get_layout(struct file *file, void __user *arg)
 		l.stripe_count = ci->i_layout.stripe_count;
 		l.object_size = ci->i_layout.object_size;
 		l.data_pool = ci->i_layout.pool_id;
-		l.preferred_osd = (s32)-1;
+		l.preferred_osd = -1;
 		if (copy_to_user(arg, &l, sizeof(l)))
 			return -EFAULT;
 	}
@@ -97,7 +97,7 @@ static long ceph_ioctl_set_layout(struct file *file, void __user *arg)
 		nl.data_pool = ci->i_layout.pool_id;
 
 	/* this is obsolete, and always -1 */
-	nl.preferred_osd = le64_to_cpu(-1);
+	nl.preferred_osd = -1;
 
 	err = __validate_layout(mdsc, &nl);
 	if (err)
-- 
2.11.0

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

* [PATCH review for 4.9 37/50] uapi: fix linux/mroute6.h userspace compilation errors
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (34 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 34/50] ceph: fix bogus endianness change in ceph_ioctl_set_layout Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 39/50] IB/hfi1: Use static CTLE with Preset 6 for integrated HFIs Levin, Alexander (Sasha Levin)
                   ` (12 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Dmitry V. Levin, David S . Miller, Levin, Alexander (Sasha Levin)

From: "Dmitry V. Levin" <ldv@altlinux.org>

[ Upstream commit 72aa107df6a275cf03359934ca5799a2be7a1bf7 ]

Include <linux/in6.h> to fix the following linux/mroute6.h userspace
compilation errors:

/usr/include/linux/mroute6.h:80:22: error: field 'mf6cc_origin' has incomplete type
  struct sockaddr_in6 mf6cc_origin;  /* Origin of mcast */
/usr/include/linux/mroute6.h:81:22: error: field 'mf6cc_mcastgrp' has incomplete type
  struct sockaddr_in6 mf6cc_mcastgrp;  /* Group in question */
/usr/include/linux/mroute6.h:91:22: error: field 'src' has incomplete type
  struct sockaddr_in6 src;
/usr/include/linux/mroute6.h:92:22: error: field 'grp' has incomplete type
  struct sockaddr_in6 grp;
/usr/include/linux/mroute6.h:132:18: error: field 'im6_src' has incomplete type
  struct in6_addr im6_src, im6_dst;
/usr/include/linux/mroute6.h:132:27: error: field 'im6_dst' has incomplete type
  struct in6_addr im6_src, im6_dst;

Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 include/uapi/linux/mroute6.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/include/uapi/linux/mroute6.h b/include/uapi/linux/mroute6.h
index 5062fb5751e1..ed5721148768 100644
--- a/include/uapi/linux/mroute6.h
+++ b/include/uapi/linux/mroute6.h
@@ -4,6 +4,7 @@
 #include <linux/kernel.h>
 #include <linux/types.h>
 #include <linux/sockios.h>
+#include <linux/in6.h>		/* For struct sockaddr_in6. */
 
 /*
  *	Based on the MROUTING 3.5 defines primarily to keep
-- 
2.11.0

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

* [PATCH review for 4.9 38/50] ibmvnic: Handle processing of CRQ messages in a tasklet
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (36 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 39/50] IB/hfi1: Use static CTLE with Preset 6 for integrated HFIs Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 40/50] IB/hfi1: Allocate context data on memory node Levin, Alexander (Sasha Levin)
                   ` (10 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Thomas Falcon, David S . Miller, Levin, Alexander (Sasha Levin)

From: Thomas Falcon <tlfalcon@linux.vnet.ibm.com>

[ Upstream commit 6c267b3dea09aebe84752cfedcab140c908830bb ]

Create a tasklet to process queued commands or messages received from
firmware instead of processing them in the interrupt handler. Note that
this handler does not process network traffic, but communications related
to resource allocation and device settings.

Signed-off-by: Thomas Falcon <tlfalcon@linux.vnet.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 drivers/net/ethernet/ibm/ibmvnic.c | 18 +++++++++++++++++-
 drivers/net/ethernet/ibm/ibmvnic.h |  1 +
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
index b8778e7b1f79..3639a5cd1462 100644
--- a/drivers/net/ethernet/ibm/ibmvnic.c
+++ b/drivers/net/ethernet/ibm/ibmvnic.c
@@ -3427,6 +3427,18 @@ static void ibmvnic_handle_crq(union ibmvnic_crq *crq,
 static irqreturn_t ibmvnic_interrupt(int irq, void *instance)
 {
 	struct ibmvnic_adapter *adapter = instance;
+	unsigned long flags;
+
+	spin_lock_irqsave(&adapter->crq.lock, flags);
+	vio_disable_interrupts(adapter->vdev);
+	tasklet_schedule(&adapter->tasklet);
+	spin_unlock_irqrestore(&adapter->crq.lock, flags);
+	return IRQ_HANDLED;
+}
+
+static void ibmvnic_tasklet(void *data)
+{
+	struct ibmvnic_adapter *adapter = data;
 	struct ibmvnic_crq_queue *queue = &adapter->crq;
 	struct vio_dev *vdev = adapter->vdev;
 	union ibmvnic_crq *crq;
@@ -3452,7 +3464,6 @@ static irqreturn_t ibmvnic_interrupt(int irq, void *instance)
 		}
 	}
 	spin_unlock_irqrestore(&queue->lock, flags);
-	return IRQ_HANDLED;
 }
 
 static int ibmvnic_reenable_crq_queue(struct ibmvnic_adapter *adapter)
@@ -3507,6 +3518,7 @@ static void ibmvnic_release_crq_queue(struct ibmvnic_adapter *adapter)
 
 	netdev_dbg(adapter->netdev, "Releasing CRQ\n");
 	free_irq(vdev->irq, adapter);
+	tasklet_kill(&adapter->tasklet);
 	do {
 		rc = plpar_hcall_norets(H_FREE_CRQ, vdev->unit_address);
 	} while (rc == H_BUSY || H_IS_LONG_BUSY(rc));
@@ -3552,6 +3564,9 @@ static int ibmvnic_init_crq_queue(struct ibmvnic_adapter *adapter)
 
 	retrc = 0;
 
+	tasklet_init(&adapter->tasklet, (void *)ibmvnic_tasklet,
+		     (unsigned long)adapter);
+
 	netdev_dbg(adapter->netdev, "registering irq 0x%x\n", vdev->irq);
 	rc = request_irq(vdev->irq, ibmvnic_interrupt, 0, IBMVNIC_NAME,
 			 adapter);
@@ -3573,6 +3588,7 @@ static int ibmvnic_init_crq_queue(struct ibmvnic_adapter *adapter)
 	return retrc;
 
 req_irq_failed:
+	tasklet_kill(&adapter->tasklet);
 	do {
 		rc = plpar_hcall_norets(H_FREE_CRQ, vdev->unit_address);
 	} while (rc == H_BUSY || H_IS_LONG_BUSY(rc));
diff --git a/drivers/net/ethernet/ibm/ibmvnic.h b/drivers/net/ethernet/ibm/ibmvnic.h
index dd775d951b73..0d0edc36107a 100644
--- a/drivers/net/ethernet/ibm/ibmvnic.h
+++ b/drivers/net/ethernet/ibm/ibmvnic.h
@@ -1049,5 +1049,6 @@ struct ibmvnic_adapter {
 
 	struct work_struct vnic_crq_init;
 	struct work_struct ibmvnic_xport;
+	struct tasklet_struct tasklet;
 	bool failover;
 };
-- 
2.11.0

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

* [PATCH review for 4.9 39/50] IB/hfi1: Use static CTLE with Preset 6 for integrated HFIs
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (35 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 37/50] uapi: fix linux/mroute6.h userspace compilation errors Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 38/50] ibmvnic: Handle processing of CRQ messages in a tasklet Levin, Alexander (Sasha Levin)
                   ` (11 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Easwar Hariharan, Dennis Dalessandro, Doug Ledford, Levin,
	Alexander (Sasha Levin)

From: Easwar Hariharan <easwar.hariharan@intel.com>

[ Upstream commit 39e2afa8d042a53d855137d4c5a689a6f5492b39 ]

After extended testing, it was found that the previous PCIe Gen
3 recipe, which used adaptive CTLE with Preset 4, could cause an
NMI/Surprise Link Down in about 1 in 100 to 1 in 1000 power cycles on
some platforms. New EV data combined with extensive empirical data
indicates that the new recipe should use static CTLE with Preset 6 for
all integrated silicon SKUs.

Fixes: c3f8de0b334c ("IB/hfi1: Add static PCIe Gen3 CTLE tuning")
Reviewed-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Easwar Hariharan <easwar.hariharan@intel.com>
Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 drivers/infiniband/hw/hfi1/pcie.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/infiniband/hw/hfi1/pcie.c b/drivers/infiniband/hw/hfi1/pcie.c
index 4ac8f330c5cb..335613a1a46a 100644
--- a/drivers/infiniband/hw/hfi1/pcie.c
+++ b/drivers/infiniband/hw/hfi1/pcie.c
@@ -673,12 +673,12 @@ MODULE_PARM_DESC(pcie_retry, "Driver will try this many times to reach requested
 
 #define UNSET_PSET 255
 #define DEFAULT_DISCRETE_PSET 2	/* discrete HFI */
-#define DEFAULT_MCP_PSET 4	/* MCP HFI */
+#define DEFAULT_MCP_PSET 6	/* MCP HFI */
 static uint pcie_pset = UNSET_PSET;
 module_param(pcie_pset, uint, S_IRUGO);
 MODULE_PARM_DESC(pcie_pset, "PCIe Eq Pset value to use, range is 0-10");
 
-static uint pcie_ctle = 1; /* discrete on, integrated off */
+static uint pcie_ctle = 3; /* discrete on, integrated on */
 module_param(pcie_ctle, uint, S_IRUGO);
 MODULE_PARM_DESC(pcie_ctle, "PCIe static CTLE mode, bit 0 - discrete on/off, bit 1 - integrated on/off");
 
-- 
2.11.0

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

* [PATCH review for 4.9 41/50] target/iscsi: Fix unsolicited data seq_end_offset calculation
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (38 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 40/50] IB/hfi1: Allocate context data on memory node Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 42/50] hrtimer: Catch invalid clockids again Levin, Alexander (Sasha Levin)
                   ` (8 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Varun Prakash, Bart Van Assche, Nicholas Bellinger, Levin,
	Alexander (Sasha Levin)

From: Varun Prakash <varun@chelsio.com>

[ Upstream commit 4d65491c269729a1e3b375c45e73213f49103d33 ]

In case of unsolicited data for the first sequence
seq_end_offset must be set to minimum of total data length
and FirstBurstLength, so do not add cmd->write_data_done
to the min of total data length and FirstBurstLength.

This patch avoids that with ImmediateData=Yes, InitialR2T=No,
MaxXmitDataSegmentLength < FirstBurstLength that a WRITE command
with IO size above FirstBurstLength triggers sequence error
messages, for example

Set following parameters on target (linux-4.8.12)
ImmediateData = Yes
InitialR2T = No
MaxXmitDataSegmentLength = 8k
FirstBurstLength = 64k

Log in from Open iSCSI initiator and execute
dd if=/dev/zero of=/dev/sdb bs=128k count=1 oflag=direct

Error messages on target
Command ITT: 0x00000035 with Offset: 65536, Length: 8192 outside
of Sequence 73728:131072 while DataSequenceInOrder=Yes.
Command ITT: 0x00000035, received DataSN: 0x00000001 higher than
expected 0x00000000.
Unable to perform within-command recovery while ERL=0.

Signed-off-by: Varun Prakash <varun@chelsio.com>
[ bvanassche: Use min() instead of open-coding it / edited patch description ]
Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>

Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 drivers/target/iscsi/iscsi_target_erl0.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/target/iscsi/iscsi_target_erl0.c b/drivers/target/iscsi/iscsi_target_erl0.c
index efc453ef6831..ab92a1bc9666 100644
--- a/drivers/target/iscsi/iscsi_target_erl0.c
+++ b/drivers/target/iscsi/iscsi_target_erl0.c
@@ -44,10 +44,8 @@ void iscsit_set_dataout_sequence_values(
 	 */
 	if (cmd->unsolicited_data) {
 		cmd->seq_start_offset = cmd->write_data_done;
-		cmd->seq_end_offset = (cmd->write_data_done +
-			((cmd->se_cmd.data_length >
-			  conn->sess->sess_ops->FirstBurstLength) ?
-			 conn->sess->sess_ops->FirstBurstLength : cmd->se_cmd.data_length));
+		cmd->seq_end_offset = min(cmd->se_cmd.data_length,
+					conn->sess->sess_ops->FirstBurstLength);
 		return;
 	}
 
-- 
2.11.0

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

* [PATCH review for 4.9 40/50] IB/hfi1: Allocate context data on memory node
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (37 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 38/50] ibmvnic: Handle processing of CRQ messages in a tasklet Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 41/50] target/iscsi: Fix unsolicited data seq_end_offset calculation Levin, Alexander (Sasha Levin)
                   ` (9 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Sebastian Sanchez, Dennis Dalessandro, Doug Ledford, Levin,
	Alexander (Sasha Levin)

From: Sebastian Sanchez <sebastian.sanchez@intel.com>

[ Upstream commit b448bf9a0df6093dbadac36979a55ce4e012a677 ]

There are some memory allocation calls in hfi1_create_ctxtdata()
that do not use the numa function parameter. This
can cause cache lines to be filled over QPI.

Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: Sebastian Sanchez <sebastian.sanchez@intel.com>
Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 drivers/infiniband/hw/hfi1/init.c | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/drivers/infiniband/hw/hfi1/init.c b/drivers/infiniband/hw/hfi1/init.c
index 34cfd341b6d6..a3dd27b1305d 100644
--- a/drivers/infiniband/hw/hfi1/init.c
+++ b/drivers/infiniband/hw/hfi1/init.c
@@ -297,14 +297,15 @@ struct hfi1_ctxtdata *hfi1_create_ctxtdata(struct hfi1_pportdata *ppd, u32 ctxt,
 		 * The resulting value will be rounded down to the closest
 		 * multiple of dd->rcv_entries.group_size.
 		 */
-		rcd->egrbufs.buffers = kcalloc(rcd->egrbufs.count,
-					       sizeof(*rcd->egrbufs.buffers),
-					       GFP_KERNEL);
+		rcd->egrbufs.buffers = kzalloc_node(
+			rcd->egrbufs.count * sizeof(*rcd->egrbufs.buffers),
+			GFP_KERNEL, numa);
 		if (!rcd->egrbufs.buffers)
 			goto bail;
-		rcd->egrbufs.rcvtids = kcalloc(rcd->egrbufs.count,
-					       sizeof(*rcd->egrbufs.rcvtids),
-					       GFP_KERNEL);
+		rcd->egrbufs.rcvtids = kzalloc_node(
+				rcd->egrbufs.count *
+				sizeof(*rcd->egrbufs.rcvtids),
+				GFP_KERNEL, numa);
 		if (!rcd->egrbufs.rcvtids)
 			goto bail;
 		rcd->egrbufs.size = eager_buffer_size;
@@ -322,8 +323,8 @@ struct hfi1_ctxtdata *hfi1_create_ctxtdata(struct hfi1_pportdata *ppd, u32 ctxt,
 		rcd->egrbufs.rcvtid_size = HFI1_MAX_EAGER_BUFFER_SIZE;
 
 		if (ctxt < dd->first_user_ctxt) { /* N/A for PSM contexts */
-			rcd->opstats = kzalloc(sizeof(*rcd->opstats),
-				GFP_KERNEL);
+			rcd->opstats = kzalloc_node(sizeof(*rcd->opstats),
+						    GFP_KERNEL, numa);
 			if (!rcd->opstats)
 				goto bail;
 		}
-- 
2.11.0

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

* [PATCH review for 4.9 42/50] hrtimer: Catch invalid clockids again
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (39 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 41/50] target/iscsi: Fix unsolicited data seq_end_offset calculation Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 45/50] drm/nouveau/gr/gf100-: fix ccache error logging Levin, Alexander (Sasha Levin)
                   ` (7 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Marc Zyngier, Tomasz Nowicki, Christoffer Dall, Thomas Gleixner,
	Levin, Alexander (Sasha Levin)

From: Marc Zyngier <marc.zyngier@arm.com>

[ Upstream commit 336a9cde10d641e70bac67d90ae91b3190c3edca ]

commit 82e88ff1ea94 ("hrtimer: Revert CLOCK_MONOTONIC_RAW support") removed
unfortunately a sanity check in the hrtimer code which was part of that
MONOTONIC_RAW patch series.

It would have caught the bogus usage of CLOCK_MONOTONIC_RAW in the wireless
code. So bring it back.

It is way too easy to take any random clockid and feed it to the hrtimer
subsystem. At best, it gets mapped to a monotonic base, but it would be
better to just catch illegal values as early as possible.

Detect invalid clockids, map them to CLOCK_MONOTONIC and emit a warning.

[ tglx: Replaced the BUG by a WARN and gracefully map to CLOCK_MONOTONIC ]

Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Cc: Tomasz Nowicki <tn@semihalf.com>
Cc: Christoffer Dall <christoffer.dall@linaro.org>
Link: http://lkml.kernel.org/r/1452879670-16133-3-git-send-email-marc.zyngier@arm.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 kernel/time/hrtimer.c | 20 +++++++++++++++-----
 1 file changed, 15 insertions(+), 5 deletions(-)

diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c
index bb5ec425dfe0..eeb7f2f5698d 100644
--- a/kernel/time/hrtimer.c
+++ b/kernel/time/hrtimer.c
@@ -94,17 +94,15 @@ DEFINE_PER_CPU(struct hrtimer_cpu_base, hrtimer_bases) =
 };
 
 static const int hrtimer_clock_to_base_table[MAX_CLOCKS] = {
+	/* Make sure we catch unsupported clockids */
+	[0 ... MAX_CLOCKS - 1]	= HRTIMER_MAX_CLOCK_BASES,
+
 	[CLOCK_REALTIME]	= HRTIMER_BASE_REALTIME,
 	[CLOCK_MONOTONIC]	= HRTIMER_BASE_MONOTONIC,
 	[CLOCK_BOOTTIME]	= HRTIMER_BASE_BOOTTIME,
 	[CLOCK_TAI]		= HRTIMER_BASE_TAI,
 };
 
-static inline int hrtimer_clockid_to_base(clockid_t clock_id)
-{
-	return hrtimer_clock_to_base_table[clock_id];
-}
-
 /*
  * Functions and macros which are different for UP/SMP systems are kept in a
  * single place
@@ -1112,6 +1110,18 @@ u64 hrtimer_get_next_event(void)
 }
 #endif
 
+static inline int hrtimer_clockid_to_base(clockid_t clock_id)
+{
+	if (likely(clock_id < MAX_CLOCKS)) {
+		int base = hrtimer_clock_to_base_table[clock_id];
+
+		if (likely(base != HRTIMER_MAX_CLOCK_BASES))
+			return base;
+	}
+	WARN(1, "Invalid clockid %d. Using MONOTONIC\n", clock_id);
+	return HRTIMER_BASE_MONOTONIC;
+}
+
 static void __hrtimer_init(struct hrtimer *timer, clockid_t clock_id,
 			   enum hrtimer_mode mode)
 {
-- 
2.11.0

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

* [PATCH review for 4.9 43/50] nfsd/callback: Cleanup callback cred on shutdown
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (42 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 44/50] powerpc/perf: Add restrictions to PMC5 in power9 DD1 Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 47/50] btmrvl: avoid double-disable_irq() race Levin, Alexander (Sasha Levin)
                   ` (4 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Kinglong Mee, J . Bruce Fields, Levin, Alexander (Sasha Levin)

From: Kinglong Mee <kinglongmee@gmail.com>

[ Upstream commit f7d1ddbe7648af7460d23688c8c131342eb43b3a ]

The rpccred gotten from rpc_lookup_machine_cred() should be put when
state is shutdown.

Signed-off-by: Kinglong Mee <kinglongmee@gmail.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 fs/nfsd/nfs4callback.c |  8 ++++++++
 fs/nfsd/nfs4state.c    | 10 ++++++----
 fs/nfsd/state.h        |  1 +
 3 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c
index 211dc2aed8e1..3069cd46ea66 100644
--- a/fs/nfsd/nfs4callback.c
+++ b/fs/nfsd/nfs4callback.c
@@ -753,6 +753,14 @@ int set_callback_cred(void)
 	return 0;
 }
 
+void cleanup_callback_cred(void)
+{
+	if (callback_cred) {
+		put_rpccred(callback_cred);
+		callback_cred = NULL;
+	}
+}
+
 static struct rpc_cred *get_backchannel_cred(struct nfs4_client *clp, struct rpc_clnt *client, struct nfsd4_session *ses)
 {
 	if (clp->cl_minorversion == 0) {
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index a0dee8ae9f97..d35eb077330f 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -7012,23 +7012,24 @@ nfs4_state_start(void)
 
 	ret = set_callback_cred();
 	if (ret)
-		return -ENOMEM;
+		return ret;
+
 	laundry_wq = alloc_workqueue("%s", WQ_UNBOUND, 0, "nfsd4");
 	if (laundry_wq == NULL) {
 		ret = -ENOMEM;
-		goto out_recovery;
+		goto out_cleanup_cred;
 	}
 	ret = nfsd4_create_callback_queue();
 	if (ret)
 		goto out_free_laundry;
 
 	set_max_delegations();
-
 	return 0;
 
 out_free_laundry:
 	destroy_workqueue(laundry_wq);
-out_recovery:
+out_cleanup_cred:
+	cleanup_callback_cred();
 	return ret;
 }
 
@@ -7086,6 +7087,7 @@ nfs4_state_shutdown(void)
 {
 	destroy_workqueue(laundry_wq);
 	nfsd4_destroy_callback_queue();
+	cleanup_callback_cred();
 }
 
 static void
diff --git a/fs/nfsd/state.h b/fs/nfsd/state.h
index 4516e8b7d776..005c911b34ac 100644
--- a/fs/nfsd/state.h
+++ b/fs/nfsd/state.h
@@ -615,6 +615,7 @@ extern struct nfs4_client_reclaim *nfsd4_find_reclaim_client(const char *recdir,
 extern __be32 nfs4_check_open_reclaim(clientid_t *clid,
 		struct nfsd4_compound_state *cstate, struct nfsd_net *nn);
 extern int set_callback_cred(void);
+extern void cleanup_callback_cred(void);
 extern void nfsd4_probe_callback(struct nfs4_client *clp);
 extern void nfsd4_probe_callback_sync(struct nfs4_client *clp);
 extern void nfsd4_change_callback(struct nfs4_client *clp, struct nfs4_cb_conn *);
-- 
2.11.0

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

* [PATCH review for 4.9 44/50] powerpc/perf: Add restrictions to PMC5 in power9 DD1
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (41 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 45/50] drm/nouveau/gr/gf100-: fix ccache error logging Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 43/50] nfsd/callback: Cleanup callback cred on shutdown Levin, Alexander (Sasha Levin)
                   ` (5 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Madhavan Srinivasan, Michael Ellerman, Levin, Alexander (Sasha Levin)

From: Madhavan Srinivasan <maddy@linux.vnet.ibm.com>

[ Upstream commit 8d911904f3ce412b20874a9c95f82009dcbb007c ]

PMC5 on POWER9 DD1 may not provide right counts in all
sampling scenarios, hence use PM_INST_DISP event instead
in PMC2 or PMC3 in preference.

Signed-off-by: Madhavan Srinivasan <maddy@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 arch/powerpc/perf/isa207-common.h | 4 ++++
 arch/powerpc/perf/power9-pmu.c    | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/arch/powerpc/perf/isa207-common.h b/arch/powerpc/perf/isa207-common.h
index 4d0a4e5017c2..8e6dd17fe603 100644
--- a/arch/powerpc/perf/isa207-common.h
+++ b/arch/powerpc/perf/isa207-common.h
@@ -201,6 +201,10 @@
 	CNST_PMC_VAL(1) | CNST_PMC_VAL(2) | CNST_PMC_VAL(3) | \
 	CNST_PMC_VAL(4) | CNST_PMC_VAL(5) | CNST_PMC_VAL(6) | CNST_NC_VAL
 
+/*
+ * Lets restrict use of PMC5 for instruction counting.
+ */
+#define P9_DD1_TEST_ADDER	(ISA207_TEST_ADDER | CNST_PMC_VAL(5))
 
 /* Bits in MMCR1 for PowerISA v2.07 */
 #define MMCR1_UNIT_SHIFT(pmc)		(60 - (4 * ((pmc) - 1)))
diff --git a/arch/powerpc/perf/power9-pmu.c b/arch/powerpc/perf/power9-pmu.c
index 8e9a81967ff8..9abcd8f65504 100644
--- a/arch/powerpc/perf/power9-pmu.c
+++ b/arch/powerpc/perf/power9-pmu.c
@@ -295,7 +295,7 @@ static struct power_pmu power9_pmu = {
 	.name			= "POWER9",
 	.n_counter		= MAX_PMU_COUNTERS,
 	.add_fields		= ISA207_ADD_FIELDS,
-	.test_adder		= ISA207_TEST_ADDER,
+	.test_adder		= P9_DD1_TEST_ADDER,
 	.compute_mmcr		= isa207_compute_mmcr,
 	.config_bhrb		= power9_config_bhrb,
 	.bhrb_filter_map	= power9_bhrb_filter_map,
-- 
2.11.0

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

* [PATCH review for 4.9 45/50] drm/nouveau/gr/gf100-: fix ccache error logging
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (40 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 42/50] hrtimer: Catch invalid clockids again Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 44/50] powerpc/perf: Add restrictions to PMC5 in power9 DD1 Levin, Alexander (Sasha Levin)
                   ` (6 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable; +Cc: Ben Skeggs, Levin, Alexander (Sasha Levin)

From: Ben Skeggs <bskeggs@redhat.com>

[ Upstream commit 1894054dc1b6e4395048b2c0f28832a3f4320fd3 ]

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c
index 6584d505460c..133f89600279 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c
@@ -1129,7 +1129,7 @@ gf100_gr_trap_intr(struct gf100_gr *gr)
 	if (trap & 0x00000008) {
 		u32 stat = nvkm_rd32(device, 0x408030);
 
-		nvkm_snprintbf(error, sizeof(error), gf100_m2mf_error,
+		nvkm_snprintbf(error, sizeof(error), gf100_ccache_error,
 			       stat & 0x3fffffff);
 		nvkm_error(subdev, "CCACHE %08x [%s]\n", stat, error);
 		nvkm_wr32(device, 0x408030, 0xc0000000);
-- 
2.11.0

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

* [PATCH review for 4.9 48/50] EDAC, mce_amd: Print IPID and Syndrome on a separate line
@ 2017-09-25  1:12   ` Levin, Alexander
  0 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Yazen Ghannam, linux-edac, Borislav Petkov, Levin,
	Alexander (Sasha Levin)

From: Yazen Ghannam <Yazen.Ghannam@amd.com>

[ Upstream commit 75bf2f6478cab9b0c1d7f5f674a765d1e2ad530e ]

Currently, the IPID and Syndrome are printed on the same line as the
Address. There are cases when we can have a valid Syndrome but not a
valid Address.

For example, the MCA_SYND register can be used to hold more detailed
error info that the hardware folks can use. It's not just DRAM ECC
syndromes. There are some error types that aren't related to memory that
may have valid syndromes, like some errors related to links in the Data
Fabric, etc.

In these cases, the IPID and Syndrome are not printed at the same log
level as the rest of the stanza, so users won't see them on the console.

Console:
  [Hardware Error]: CPU:16 (17:1:0) MC22_STATUS[Over|CE|MiscV|-|-|-|-|SyndV|-]: 0xd82000000002080b
  [Hardware Error]: Power, Interrupts, etc. Extended Error Code: 2

Dmesg:
  [Hardware Error]: CPU:16 (17:1:0) MC22_STATUS[Over|CE|MiscV|-|-|-|-|SyndV|-]: 0xd82000000002080b
  , Syndrome: 0x000000010b404000, IPID: 0x0001002e00000002
  [Hardware Error]: Power, Interrupts, etc. Extended Error Code: 2

Print the IPID first and on a new line. The IPID should always be
printed on SMCA systems. The Syndrome will then be printed with the IPID
and at the same log level when valid:

  [Hardware Error]: CPU:16 (17:1:0) MC22_STATUS[Over|CE|MiscV|-|-|-|-|SyndV|-]: 0xd82000000002080b
  [Hardware Error]: IPID: 0x0001002e00000002, Syndrome: 0x000000010b404000
  [Hardware Error]: Power, Interrupts, etc. Extended Error Code: 2

Signed-off-by: Yazen Ghannam <Yazen.Ghannam@amd.com>
Cc: linux-edac <linux-edac@vger.kernel.org>
Link: http://lkml.kernel.org/r/1487192182-2474-1-git-send-email-Yazen.Ghannam@amd.com
Signed-off-by: Borislav Petkov <bp@suse.de>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 drivers/edac/mce_amd.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/drivers/edac/mce_amd.c b/drivers/edac/mce_amd.c
index daaac2c79ca7..7db692ed3dea 100644
--- a/drivers/edac/mce_amd.c
+++ b/drivers/edac/mce_amd.c
@@ -981,20 +981,19 @@ int amd_decode_mce(struct notifier_block *nb, unsigned long val, void *data)
 	pr_cont("]: 0x%016llx\n", m->status);
 
 	if (m->status & MCI_STATUS_ADDRV)
-		pr_emerg(HW_ERR "Error Addr: 0x%016llx", m->addr);
+		pr_emerg(HW_ERR "Error Addr: 0x%016llx\n", m->addr);
 
 	if (boot_cpu_has(X86_FEATURE_SMCA)) {
+		pr_emerg(HW_ERR "IPID: 0x%016llx", m->ipid);
+
 		if (m->status & MCI_STATUS_SYNDV)
 			pr_cont(", Syndrome: 0x%016llx", m->synd);
 
-		pr_cont(", IPID: 0x%016llx", m->ipid);
-
 		pr_cont("\n");
 
 		decode_smca_errors(m);
 		goto err_code;
-	} else
-		pr_cont("\n");
+	}
 
 	if (!fam_ops)
 		goto err_code;
-- 
2.11.0

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

* [PATCH review for 4.9 47/50] btmrvl: avoid double-disable_irq() race
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (43 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 43/50] nfsd/callback: Cleanup callback cred on shutdown Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 46/50] regulator: core: Resolve supplies before disabling unused regulators Levin, Alexander (Sasha Levin)
                   ` (3 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Jeffy Chen, Marcel Holtmann, Levin, Alexander (Sasha Levin)

From: Jeffy Chen <jeffy.chen@rock-chips.com>

[ Upstream commit 9af02d86e11dc409e5c3de46e81c0a492ba58905 ]

It's much the same as what we did for mwifiex in:
b9da4d2 mwifiex: avoid double-disable_irq() race

"We have a race where the wakeup IRQ might be in flight while we're
calling mwifiex_disable_wake() from resume(). This can leave us
disabling the IRQ twice.

Let's disable the IRQ and enable it in case if we have double-disabled
it."

Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
Reviewed-by: Brian Norris <briannorris@chromium.org>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 drivers/bluetooth/btmrvl_sdio.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/bluetooth/btmrvl_sdio.c b/drivers/bluetooth/btmrvl_sdio.c
index d02f2c14df32..c738baeb6d45 100644
--- a/drivers/bluetooth/btmrvl_sdio.c
+++ b/drivers/bluetooth/btmrvl_sdio.c
@@ -1682,8 +1682,12 @@ static int btmrvl_sdio_resume(struct device *dev)
 	/* Disable platform specific wakeup interrupt */
 	if (card->plt_wake_cfg && card->plt_wake_cfg->irq_bt >= 0) {
 		disable_irq_wake(card->plt_wake_cfg->irq_bt);
-		if (!card->plt_wake_cfg->wake_by_bt)
-			disable_irq(card->plt_wake_cfg->irq_bt);
+		disable_irq(card->plt_wake_cfg->irq_bt);
+		if (card->plt_wake_cfg->wake_by_bt)
+			/* Undo our disable, since interrupt handler already
+			 * did this.
+			 */
+			enable_irq(card->plt_wake_cfg->irq_bt);
 	}
 
 	return 0;
-- 
2.11.0

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

* [PATCH review for 4.9 46/50] regulator: core: Resolve supplies before disabling unused regulators
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (44 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 47/50] btmrvl: avoid double-disable_irq() race Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12   ` [review,for,4.9,48/50] " Levin, Alexander
                   ` (2 subsequent siblings)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Javier Martinez Canillas, Mark Brown, Levin, Alexander (Sasha Levin)

From: Javier Martinez Canillas <javier@osg.samsung.com>

[ Upstream commit 3827b64dba27ebadb4faf51f2c91143e01ba1f6d ]

After commit 66d228a2bf03 ("regulator: core: Don't use regulators as
supplies until the parent is bound"), input supplies aren't resolved
if the input supplies parent device has not been bound. This prevent
regulators to hold an invalid reference if its supply parent device
driver probe is deferred.

But this causes issues on some boards where a PMIC's regulator use as
input supply a regulator from another PMIC whose driver is registered
after the driver for the former.

In this case the regulators for the first PMIC will fail to resolve
input supplies on regulators registration (since the other PMIC wasn't
probed yet). And when the core attempts to resolve again latter when
the other PMIC registers its own regulators, it will fail again since
the parent device isn't bound yet.

This will cause some parent supplies to never be resolved and wrongly
be disabled on boot due taking them as unused.

To solve this problem, also attempt to resolve the pending regulators
input supplies before disabling the unused regulators.

Signed-off-by: Javier Martinez Canillas <javier@osg.samsung.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 drivers/regulator/core.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
index 9faccfceb53c..9403245503de 100644
--- a/drivers/regulator/core.c
+++ b/drivers/regulator/core.c
@@ -4507,6 +4507,16 @@ static int __init regulator_init_complete(void)
 	if (of_have_populated_dt())
 		has_full_constraints = true;
 
+	/*
+	 * Regulators may had failed to resolve their input supplies
+	 * when were registered, either because the input supply was
+	 * not registered yet or because its parent device was not
+	 * bound yet. So attempt to resolve the input supplies for
+	 * pending regulators before trying to disable unused ones.
+	 */
+	class_for_each_device(&regulator_class, NULL, NULL,
+			      regulator_register_resolve_supply);
+
 	/* If we have a full configuration then disable any regulators
 	 * we have permission to change the status for and which are
 	 * not in use or always_on.  This is effectively the default
-- 
2.11.0

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

* [review,for,4.9,48/50] EDAC, mce_amd: Print IPID and Syndrome on a separate line
@ 2017-09-25  1:12   ` Levin, Alexander
  0 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Yazen Ghannam, linux-edac, Borislav Petkov, Levin,
	Alexander (Sasha Levin)

From: Yazen Ghannam <Yazen.Ghannam@amd.com>

[ Upstream commit 75bf2f6478cab9b0c1d7f5f674a765d1e2ad530e ]

Currently, the IPID and Syndrome are printed on the same line as the
Address. There are cases when we can have a valid Syndrome but not a
valid Address.

For example, the MCA_SYND register can be used to hold more detailed
error info that the hardware folks can use. It's not just DRAM ECC
syndromes. There are some error types that aren't related to memory that
may have valid syndromes, like some errors related to links in the Data
Fabric, etc.

In these cases, the IPID and Syndrome are not printed at the same log
level as the rest of the stanza, so users won't see them on the console.

Console:
  [Hardware Error]: CPU:16 (17:1:0) MC22_STATUS[Over|CE|MiscV|-|-|-|-|SyndV|-]: 0xd82000000002080b
  [Hardware Error]: Power, Interrupts, etc. Extended Error Code: 2

Dmesg:
  [Hardware Error]: CPU:16 (17:1:0) MC22_STATUS[Over|CE|MiscV|-|-|-|-|SyndV|-]: 0xd82000000002080b
  , Syndrome: 0x000000010b404000, IPID: 0x0001002e00000002
  [Hardware Error]: Power, Interrupts, etc. Extended Error Code: 2

Print the IPID first and on a new line. The IPID should always be
printed on SMCA systems. The Syndrome will then be printed with the IPID
and at the same log level when valid:

  [Hardware Error]: CPU:16 (17:1:0) MC22_STATUS[Over|CE|MiscV|-|-|-|-|SyndV|-]: 0xd82000000002080b
  [Hardware Error]: IPID: 0x0001002e00000002, Syndrome: 0x000000010b404000
  [Hardware Error]: Power, Interrupts, etc. Extended Error Code: 2

Signed-off-by: Yazen Ghannam <Yazen.Ghannam@amd.com>
Cc: linux-edac <linux-edac@vger.kernel.org>
Link: http://lkml.kernel.org/r/1487192182-2474-1-git-send-email-Yazen.Ghannam@amd.com
Signed-off-by: Borislav Petkov <bp@suse.de>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 drivers/edac/mce_amd.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/drivers/edac/mce_amd.c b/drivers/edac/mce_amd.c
index daaac2c79ca7..7db692ed3dea 100644
--- a/drivers/edac/mce_amd.c
+++ b/drivers/edac/mce_amd.c
@@ -981,20 +981,19 @@ int amd_decode_mce(struct notifier_block *nb, unsigned long val, void *data)
 	pr_cont("]: 0x%016llx\n", m->status);
 
 	if (m->status & MCI_STATUS_ADDRV)
-		pr_emerg(HW_ERR "Error Addr: 0x%016llx", m->addr);
+		pr_emerg(HW_ERR "Error Addr: 0x%016llx\n", m->addr);
 
 	if (boot_cpu_has(X86_FEATURE_SMCA)) {
+		pr_emerg(HW_ERR "IPID: 0x%016llx", m->ipid);
+
 		if (m->status & MCI_STATUS_SYNDV)
 			pr_cont(", Syndrome: 0x%016llx", m->synd);
 
-		pr_cont(", IPID: 0x%016llx", m->ipid);
-
 		pr_cont("\n");
 
 		decode_smca_errors(m);
 		goto err_code;
-	} else
-		pr_cont("\n");
+	}
 
 	if (!fam_ops)
 		goto err_code;

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

* [PATCH review for 4.9 50/50] cpufreq: CPPC: add ACPI_PROCESSOR dependency
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (47 preceding siblings ...)
  2017-09-25  1:12 ` [PATCH review for 4.9 49/50] genirq: Clarify logic calculating bogus irqreturn_t values Levin, Alexander (Sasha Levin)
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Arnd Bergmann, Rafael J . Wysocki, Levin, Alexander (Sasha Levin)

From: Arnd Bergmann <arnd@arndb.de>

[ Upstream commit a578884fa0d2768f13d37c6591a9e1ed600482d3 ]

Without the Kconfig dependency, we can get this warning:

warning: ACPI_CPPC_CPUFREQ selects ACPI_CPPC_LIB which has unmet direct dependencies (ACPI && ACPI_PROCESSOR)

Fixes: 5477fb3bd1e8 (ACPI / CPPC: Add a CPUFreq driver for use with CPPC)
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 drivers/cpufreq/Kconfig.arm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/cpufreq/Kconfig.arm b/drivers/cpufreq/Kconfig.arm
index d89b8afe23b6..bc3917d6015a 100644
--- a/drivers/cpufreq/Kconfig.arm
+++ b/drivers/cpufreq/Kconfig.arm
@@ -244,7 +244,7 @@ config ARM_PXA2xx_CPUFREQ
 
 config ACPI_CPPC_CPUFREQ
 	tristate "CPUFreq driver based on the ACPI CPPC spec"
-	depends on ACPI
+	depends on ACPI_PROCESSOR
 	select ACPI_CPPC_LIB
 	default n
 	help
-- 
2.11.0

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

* [PATCH review for 4.9 49/50] genirq: Clarify logic calculating bogus irqreturn_t values
  2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
                   ` (46 preceding siblings ...)
  2017-09-25  1:12   ` [review,for,4.9,48/50] " Levin, Alexander
@ 2017-09-25  1:12 ` Levin, Alexander (Sasha Levin)
  2017-09-25  1:12 ` [PATCH review for 4.9 50/50] cpufreq: CPPC: add ACPI_PROCESSOR dependency Levin, Alexander (Sasha Levin)
  48 siblings, 0 replies; 51+ messages in thread
From: Levin, Alexander (Sasha Levin) @ 2017-09-25  1:12 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Jeremy Kerr, Thomas Gleixner, Levin, Alexander (Sasha Levin)

From: Jeremy Kerr <jk@ozlabs.org>

[ Upstream commit 5d4bac9a5f4ef24b2482529bda6661a58e5b5b65 ]

Although irqreturn_t is an enum, we treat it (and its enumeration
constants) as a bitmask.

However, bad_action_ret() uses a less-than operator to determine whether
an irqreturn_t falls within allowable bit values, which means we need to
know the signededness of an enum type to read the logic, which is
implementation-dependent.

This change explicitly uses an unsigned type for the comparison. We do
this instead of changing to a bitwise test, as the latter compiles to
increased instructions in this hot path.

It looks like we get the correct behaviour currently (bad_action_ret(-1)
returns 1), so this is purely a readability fix.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Link: http://lkml.kernel.org/r/1487219049-4061-1-git-send-email-jk@ozlabs.org
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
---
 kernel/irq/spurious.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/kernel/irq/spurious.c b/kernel/irq/spurious.c
index 5707f97a3e6a..061ba7eed4ed 100644
--- a/kernel/irq/spurious.c
+++ b/kernel/irq/spurious.c
@@ -175,7 +175,9 @@ out:
 
 static inline int bad_action_ret(irqreturn_t action_ret)
 {
-	if (likely(action_ret <= (IRQ_HANDLED | IRQ_WAKE_THREAD)))
+	unsigned int r = action_ret;
+
+	if (likely(r <= (IRQ_HANDLED | IRQ_WAKE_THREAD)))
 		return 0;
 	return 1;
 }
-- 
2.11.0

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

end of thread, other threads:[~2017-09-25  1:34 UTC | newest]

Thread overview: 51+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-09-25  1:12 [PATCH review for 4.9 01/50] xen-netback: Use GFP_ATOMIC to allocate hash Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 02/50] locking/lockdep: Add nest_lock integrity test Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 04/50] irqchip/crossbar: Fix incorrect type of local variables Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 03/50] watchdog: kempld: fix gcc-4.3 build Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 05/50] initramfs: finish fput() before accessing any binary from initramfs Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 06/50] mac80211_hwsim: check HWSIM_ATTR_RADIO_NAME length Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 08/50] qed: Don't use attention PTT for configuring BW Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 09/50] mac80211: fix power saving clients handling in iwlwifi Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 07/50] ALSA: hda: Add Geminilake HDMI codec ID Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 12/50] netfilter: nf_ct_expect: Change __nf_ct_expect_check() return value Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 10/50] net/mlx4_en: fix overflow in mlx4_en_init_timestamp() Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 11/50] staging: vchiq_2835_arm: Make cache-line-size a required DT property Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 13/50] iio: adc: xilinx: Fix error handling Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 14/50] f2fs: do SSR for data when there is enough free space Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 15/50] sched/fair: Update rq clock before changing a task's CPU affinity Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 16/50] Btrfs: send, fix failure to rename top level inode due to name collision Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 17/50] f2fs: do not wait for writeback in write_begin Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 18/50] md/linear: shutup lockdep warnning Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 20/50] net/mlx4_core: Fix VF overwrite of module param which disables DMFS on new probed PFs Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 19/50] sparc64: Migrate hvcons irq to panicked cpu Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 21/50] crypto: xts - Add ECB dependency Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 22/50] mm/memory_hotplug: set magic number to page->freelist instead of page->lru.next Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 24/50] slub: do not merge cache if slub_debug contains a never-merge flag Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 23/50] ocfs2/dlmglue: prepare tracking logic to avoid recursive cluster lock Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 25/50] scsi: scsi_dh_emc: return success in clariion_std_inquiry() Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 27/50] drm/amdgpu: refuse to reserve io mem for split VRAM buffers Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 26/50] ASoC: mediatek: add I2C dependency for CS42XX8 Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 28/50] net: mvpp2: release reference to txq_cpu[] entry after unmapping Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 30/50] qed: Reserve doorbell BAR space for present CPUs Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 29/50] qede: Prevent index problems in loopback test Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 31/50] qed: Read queue state before releasing buffer Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 32/50] i2c: at91: ensure state is restored after suspending Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 33/50] ceph: don't update_dentry_lease unless we actually got one Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 36/50] uapi: fix linux/rds.h userspace compilation errors Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 35/50] ceph: clean up unsafe d_parent accesses in build_dentry_path Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 34/50] ceph: fix bogus endianness change in ceph_ioctl_set_layout Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 37/50] uapi: fix linux/mroute6.h userspace compilation errors Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 39/50] IB/hfi1: Use static CTLE with Preset 6 for integrated HFIs Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 38/50] ibmvnic: Handle processing of CRQ messages in a tasklet Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 40/50] IB/hfi1: Allocate context data on memory node Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 41/50] target/iscsi: Fix unsolicited data seq_end_offset calculation Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 42/50] hrtimer: Catch invalid clockids again Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 45/50] drm/nouveau/gr/gf100-: fix ccache error logging Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 44/50] powerpc/perf: Add restrictions to PMC5 in power9 DD1 Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 43/50] nfsd/callback: Cleanup callback cred on shutdown Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 47/50] btmrvl: avoid double-disable_irq() race Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 46/50] regulator: core: Resolve supplies before disabling unused regulators Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 48/50] EDAC, mce_amd: Print IPID and Syndrome on a separate line Levin, Alexander (Sasha Levin)
2017-09-25  1:12   ` [review,for,4.9,48/50] " Levin, Alexander
2017-09-25  1:12 ` [PATCH review for 4.9 49/50] genirq: Clarify logic calculating bogus irqreturn_t values Levin, Alexander (Sasha Levin)
2017-09-25  1:12 ` [PATCH review for 4.9 50/50] cpufreq: CPPC: add ACPI_PROCESSOR dependency Levin, Alexander (Sasha Levin)

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.