[PATCH v2] selftests/bpf: clarify build error if no vmlinux

2020-12-15 Thread Kamal Mostafa
If Makefile cannot find any of the vmlinux's in its VMLINUX_BTF_PATHS list,
it tries to run btftool incorrectly, with VMLINUX_BTF unset:

bpftool btf dump file $(VMLINUX_BTF) format c

Such that the keyword 'format' is misinterpreted as the path to vmlinux.
The resulting build error message is fairly cryptic:

  GEN  vmlinux.h
Error: failed to load BTF from format: No such file or directory

This patch makes the failure reason clearer by yielding this instead:

Makefile:...: *** cannot find a vmlinux for VMLINUX_BTF at any of
"{paths}".  Stop.

Fixes: acbd06206bbb ("selftests/bpf: Add vmlinux.h selftest exercising tracing 
of syscalls")
Cc: sta...@vger.kernel.org # 5.7+
Signed-off-by: Kamal Mostafa 
---

[v2] moves the check to right after the VMLINUX_BTF definition.

 tools/testing/selftests/bpf/Makefile | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/tools/testing/selftests/bpf/Makefile 
b/tools/testing/selftests/bpf/Makefile
index 542768f5195b..7ba631f495f7 100644
--- a/tools/testing/selftests/bpf/Makefile
+++ b/tools/testing/selftests/bpf/Makefile
@@ -146,6 +146,9 @@ VMLINUX_BTF_PATHS ?= $(if $(O),$(O)/vmlinux)
\
 /sys/kernel/btf/vmlinux\
 /boot/vmlinux-$(shell uname -r)
 VMLINUX_BTF ?= $(abspath $(firstword $(wildcard $(VMLINUX_BTF_PATHS
+ifeq ($(VMLINUX_BTF),)
+$(error cannot find a vmlinux for VMLINUX_BTF at any of "$(VMLINUX_BTF_PATHS)")
+endif
 
 DEFAULT_BPFTOOL := $(SCRATCH_DIR)/sbin/bpftool
 
-- 
2.17.1



[PATCH] selftests/bpf: clarify build error if no vmlinux

2020-12-14 Thread Kamal Mostafa
If Makefile cannot find any of the vmlinux's in its VMLINUX_BTF_PATHS list,
it tries to run btftool incorrectly, with VMLINUX_BTF unset:

bpftool btf dump file $(VMLINUX_BTF) format c

Such that the keyword 'format' is misinterpreted as the path to vmlinux.
The resulting build error message is fairly cryptic:

  GEN  vmlinux.h
Error: failed to load BTF from format: No such file or directory

This patch makes the failure reason clearer by yielding this instead:

Makefile:...: *** cannot find a vmlinux for VMLINUX_BTF at any of
"{paths}".  Stop.

Fixes: acbd06206bbb ("selftests/bpf: Add vmlinux.h selftest exercising tracing 
of syscalls")
Cc: sta...@vger.kernel.org # 5.7+
Signed-off-by: Kamal Mostafa 
---
 tools/testing/selftests/bpf/Makefile | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/tools/testing/selftests/bpf/Makefile 
b/tools/testing/selftests/bpf/Makefile
index 542768f5195b..93ed34ef6e3f 100644
--- a/tools/testing/selftests/bpf/Makefile
+++ b/tools/testing/selftests/bpf/Makefile
@@ -196,6 +196,9 @@ $(BUILD_DIR)/libbpf $(BUILD_DIR)/bpftool 
$(BUILD_DIR)/resolve_btfids $(INCLUDE_D
 $(INCLUDE_DIR)/vmlinux.h: $(VMLINUX_BTF) | $(BPFTOOL) $(INCLUDE_DIR)
 ifeq ($(VMLINUX_H),)
$(call msg,GEN,,$@)
+ifeq ($(VMLINUX_BTF),)
+$(error cannot find a vmlinux for VMLINUX_BTF at any of "$(VMLINUX_BTF_PATHS)")
+endif
$(Q)$(BPFTOOL) btf dump file $(VMLINUX_BTF) format c > $@
 else
$(call msg,CP,,$@)
-- 
2.17.1



Re: Same problem for 4.14.y and a concern: Re: [PATCH 4.19 056/191] powerpc: select ARCH_WANT_IRQS_OFF_ACTIVATE_MM

2020-11-18 Thread Kamal Mostafa
On Tue, Nov 17, 2020 at 07:45:28PM -0500, Sasha Levin wrote:
> On Tue, Nov 17, 2020 at 10:51:16AM -0800, Kamal Mostafa wrote:
> > On Tue, Nov 3, 2020 at 4:22 PM Michael Ellerman  wrote:
> > 
> > > Greg Kroah-Hartman  writes:
> > > > From: Nicholas Piggin 
> > > >
> > > > [ Upstream commit 66acd46080bd9e5ad2be4b0eb1d498d5145d058e ]
> > > >
> > > > powerpc uses IPIs in some situations to switch a kernel thread away
> > > > from a lazy tlb mm, which is subject to the TLB flushing race
> > > > described in the changelog introducing ARCH_WANT_IRQS_OFF_ACTIVATE_MM.
> > > >
> > > > Signed-off-by: Nicholas Piggin 
> > > > Signed-off-by: Michael Ellerman 
> > > > Link:
> > > https://lore.kernel.org/r/20200914045219.3736466-3-npig...@gmail.com
> > > > Signed-off-by: Sasha Levin 
> > > > ---
> > > >  arch/powerpc/Kconfig   | 1 +
> > > >  arch/powerpc/include/asm/mmu_context.h | 2 +-
> > > >  2 files changed, 2 insertions(+), 1 deletion(-)
> > > >
> > > > diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
> > > > index f38d153d25861..0bc53f0e37c0f 100644
> > > > --- a/arch/powerpc/Kconfig
> > > > +++ b/arch/powerpc/Kconfig
> > > > @@ -152,6 +152,7 @@ config PPC
> > > >   select ARCH_USE_BUILTIN_BSWAP
> > > >   select ARCH_USE_CMPXCHG_LOCKREF if PPC64
> > > >   select ARCH_WANT_IPC_PARSE_VERSION
> > > > + select ARCH_WANT_IRQS_OFF_ACTIVATE_MM
> > > 
> > > This depends on upstream commit:
> > > 
> > >   d53c3dfb23c4 ("mm: fix exec activate_mm vs TLB shootdown and lazy tlb
> > > switching race")
> > > 
> > > 
> > > Which I don't see in 4.19 stable, or in the email thread here.
> > > 
> > > So this shouldn't be backported to 4.19 unless that commit is also
> > > backported.
> > > 
> > > cheers
> > > 
> > 
> > Hi-
> > 
> > This glitch has made its way into 4.14.y ...
> >[4.14.y] c2bca8712a19 powerpc: select ARCH_WANT_IRQS_OFF_ACTIVATE_MM
> > But 4.14.y does not carry the prereq that introduces that config.
> 
> I'll queue up the 4.19 backport for 4.14 too, thanks!
> 

Thanks Sasha.

And nevermind my other concern ...

> > It would seem that the intent is that it should be *only* enabled
> > (currently at least) for arches that will explicitly select it, but the
> > config advice does not make that very clear.  Could that new config get
> > an explicit "default n" line?

... I see now that a 'default' isn't necessary; the config only appears
for arches which explicitly select it, as intended.

 -Kamal


Same problem for 4.14.y and a concern: Re: [PATCH 4.19 056/191] powerpc: select ARCH_WANT_IRQS_OFF_ACTIVATE_MM

2020-11-17 Thread Kamal Mostafa
On Tue, Nov 3, 2020 at 4:22 PM Michael Ellerman  wrote:

> Greg Kroah-Hartman  writes:
> > From: Nicholas Piggin 
> >
> > [ Upstream commit 66acd46080bd9e5ad2be4b0eb1d498d5145d058e ]
> >
> > powerpc uses IPIs in some situations to switch a kernel thread away
> > from a lazy tlb mm, which is subject to the TLB flushing race
> > described in the changelog introducing ARCH_WANT_IRQS_OFF_ACTIVATE_MM.
> >
> > Signed-off-by: Nicholas Piggin 
> > Signed-off-by: Michael Ellerman 
> > Link:
> https://lore.kernel.org/r/20200914045219.3736466-3-npig...@gmail.com
> > Signed-off-by: Sasha Levin 
> > ---
> >  arch/powerpc/Kconfig   | 1 +
> >  arch/powerpc/include/asm/mmu_context.h | 2 +-
> >  2 files changed, 2 insertions(+), 1 deletion(-)
> >
> > diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
> > index f38d153d25861..0bc53f0e37c0f 100644
> > --- a/arch/powerpc/Kconfig
> > +++ b/arch/powerpc/Kconfig
> > @@ -152,6 +152,7 @@ config PPC
> >   select ARCH_USE_BUILTIN_BSWAP
> >   select ARCH_USE_CMPXCHG_LOCKREF if PPC64
> >   select ARCH_WANT_IPC_PARSE_VERSION
> > + select ARCH_WANT_IRQS_OFF_ACTIVATE_MM
>
> This depends on upstream commit:
>
>   d53c3dfb23c4 ("mm: fix exec activate_mm vs TLB shootdown and lazy tlb
> switching race")
>
>
> Which I don't see in 4.19 stable, or in the email thread here.
>
> So this shouldn't be backported to 4.19 unless that commit is also
> backported.
>
> cheers
>

Hi-

This glitch has made its way into 4.14.y ...
[4.14.y] c2bca8712a19 powerpc: select ARCH_WANT_IRQS_OFF_ACTIVATE_MM
But 4.14.y does not carry the prereq that introduces that config.

That said, I have a more general concern about the new config (in mainline
and the stable backports):
[mainline] d53c3dfb23c4 mm: fix exec activate_mm vs TLB shootdown and
lazy tlb switching race
It would seem that the intent is that it should be *only* enabled
(currently at least) for arches that will explicitly select it, but the
config advice does not make that very clear.  Could that new config get an
explicit "default n" line?

 -Kamal


Re: [PATCH] security: CONFIG_HARDENED_USERCOPY does not need to select BUG

2018-07-02 Thread Kamal Mostafa
On Fri, Jun 29, 2018 at 01:27:08PM -0700, Kees Cook wrote:
> On Fri, Jun 29, 2018 at 1:04 PM, Kamal Mostafa  wrote:
> > Allows for CONFIG_HARDENED_USERCOPY without CONFIG_BUG.
> >
> > Signed-off-by: Kamal Mostafa 
> > ---
> >  security/Kconfig | 1 -
> >  1 file changed, 1 deletion(-)
> >
> > diff --git a/security/Kconfig b/security/Kconfig
> > index c430206..7667774 100644
> > --- a/security/Kconfig
> > +++ b/security/Kconfig
> > @@ -153,7 +153,6 @@ config HAVE_HARDENED_USERCOPY_ALLOCATOR
> >  config HARDENED_USERCOPY
> > bool "Harden memory copies between kernel and userspace"
> > depends on HAVE_HARDENED_USERCOPY_ALLOCATOR
> > -   select BUG
> > imply STRICT_DEVMEM
> > help
> >   This option checks for obviously wrong memory regions when
> 
> Do the lkdtm tests for usercopy correctly halt the kernel thread if
> CONFIG_BUG is removed?
> 

Yes, they do...

With this config (specifically disabling 'FALLBACK'):

CONFIG_HARDENED_USERCOPY=y
# CONFIG_HARDENED_USERCOPY_FALLBACK is not set
# CONFIG_BUG is not set

I ran the usercopy tests as follows:

modprobe lkdtm
cd /sys/kernel/debug/provoke-crash
cat DIRECT | grep USERCOPY | while read x ; do echo $x | tee DIRECT || echo 
$?; done

Resulting in this command line output:

USERCOPY_HEAP_SIZE_TO
139
USERCOPY_HEAP_SIZE_FROM
139
USERCOPY_HEAP_WHITELIST_TO
139
USERCOPY_HEAP_WHITELIST_FROM
139
USERCOPY_STACK_FRAME_TO
139
USERCOPY_STACK_FRAME_FROM
139
USERCOPY_STACK_BEYOND
139
USERCOPY_KERNEL
139

Each test case yields kernel log output like:

lkdtm: Performing direct entry USERCOPY_HEAP_SIZE_TO
lkdtm: attempting good copy_to_user of correct size
lkdtm: attempting bad copy_to_user of too large size
usercopy: Kernel memory exposure attempt detected from SLUB object 
'kmalloc-1024' (offset 16, size 1024)!
invalid opcode:  [#17] SMP PTI
... {panic dump} ...

Each 'tee' gets terminated with SIGSEGV and no instances appear of the
lkdtm/usercopy.c warning "copy_{to/from}_user failed, but lacked Oops".

If I leave CONFIG_HARDENED_USERCOPY_FALLBACK=y then the pair of
WHITELIST tests don't trigger a panic or SIGSEGV, as expected.

 -Kamal


[PATCH] security: CONFIG_HARDENED_USERCOPY does not need to select BUG

2018-06-29 Thread Kamal Mostafa
Allows for CONFIG_HARDENED_USERCOPY without CONFIG_BUG.

Signed-off-by: Kamal Mostafa 
---
 security/Kconfig | 1 -
 1 file changed, 1 deletion(-)

diff --git a/security/Kconfig b/security/Kconfig
index c430206..7667774 100644
--- a/security/Kconfig
+++ b/security/Kconfig
@@ -153,7 +153,6 @@ config HAVE_HARDENED_USERCOPY_ALLOCATOR
 config HARDENED_USERCOPY
bool "Harden memory copies between kernel and userspace"
depends on HAVE_HARDENED_USERCOPY_ALLOCATOR
-   select BUG
imply STRICT_DEVMEM
help
  This option checks for obviously wrong memory regions when
-- 
2.7.4



[PATCH] xhci: Fix soft lockup in xhci_pci_probe path when XHCI_STATE_HALTED

2016-08-01 Thread Kamal Mostafa
Commit 27a41a83ec54 ("xhci: Cleanup only when releasing primary hcd")
causes a soft lockup at boot when XHCI_STATE_HALTED, preventing
VirtualBox 5.1.x from booting if USB3.0 is enabled.

Revert to allowing xhci_irq to handle the interrupt when
XHCI_STATE_HALTED but not XHCI_STATE_DYING.

Fixes: 27a41a83ec54 ("xhci: Cleanup only when releasing primary hcd")
BugLink: https://bugs.launchpad.net/bugs/1604058
Signed-off-by: Kamal Mostafa 
Cc:  #v4.3+
Cc: Gabriel Krisman Bertazi 
Acked-by: Tim Gardner 
Acked-by: Stefan Bader 
---
 drivers/usb/host/xhci-ring.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
index 918e0c7..1d36a5f 100644
--- a/drivers/usb/host/xhci-ring.c
+++ b/drivers/usb/host/xhci-ring.c
@@ -2751,8 +2751,7 @@ hw_died:
writel(irq_pending, &xhci->ir_set->irq_pending);
}
 
-   if (xhci->xhc_state & XHCI_STATE_DYING ||
-   xhci->xhc_state & XHCI_STATE_HALTED) {
+   if (xhci->xhc_state & XHCI_STATE_DYING) {
xhci_dbg(xhci, "xHCI dying, ignoring interrupt. "
"Shouldn't IRQs be disabled?\n");
/* Clear the event handler busy flag (RW1C);
@@ -2764,6 +2763,8 @@ hw_died:
spin_unlock(&xhci->lock);
 
return IRQ_HANDLED;
+   } else if (xhci->xhc_state & XHCI_STATE_HALTED) {
+   xhci_dbg(xhci, "xHCI halted, handling interrupt.\n");
}
 
event_ring_deq = xhci->event_ring->dequeue;
-- 
2.7.4



Re: [4.2.y-ckt stable] Linux 4.2.8-ckt13

2016-07-13 Thread Kamal Mostafa
diff --git a/Makefile b/Makefile
index ff59f01..e8eb500 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
 VERSION = 4
 PATCHLEVEL = 2
 SUBLEVEL = 8
-EXTRAVERSION = -ckt12
+EXTRAVERSION = -ckt13
 NAME = Hare's hurried rump
 
 # *DOCUMENTATION*
diff --git a/arch/powerpc/platforms/pseries/iommu.c 
b/arch/powerpc/platforms/pseries/iommu.c
index 10510de..cd148c3 100644
--- a/arch/powerpc/platforms/pseries/iommu.c
+++ b/arch/powerpc/platforms/pseries/iommu.c
@@ -913,7 +913,8 @@ machine_arch_initcall(pseries, find_existing_ddw_windows);
 static int query_ddw(struct pci_dev *dev, const u32 *ddw_avail,
struct ddw_query_response *query)
 {
-   struct eeh_dev *edev;
+   struct device_node *dn;
+   struct pci_dn *pdn;
u32 cfg_addr;
u64 buid;
int ret;
@@ -924,11 +925,10 @@ static int query_ddw(struct pci_dev *dev, const u32 
*ddw_avail,
 * Retrieve them from the pci device, not the node with the
 * dma-window property
 */
-   edev = pci_dev_to_eeh_dev(dev);
-   cfg_addr = edev->config_addr;
-   if (edev->pe_config_addr)
-   cfg_addr = edev->pe_config_addr;
-   buid = edev->phb->buid;
+   dn = pci_device_to_OF_node(dev);
+   pdn = PCI_DN(dn);
+   buid = pdn->phb->buid;
+   cfg_addr = ((pdn->busno << 16) | (pdn->devfn << 8));
 
ret = rtas_call(ddw_avail[0], 3, 5, (u32 *)query,
  cfg_addr, BUID_HI(buid), BUID_LO(buid));
@@ -942,7 +942,8 @@ static int create_ddw(struct pci_dev *dev, const u32 
*ddw_avail,
struct ddw_create_response *create, int page_shift,
int window_shift)
 {
-   struct eeh_dev *edev;
+   struct device_node *dn;
+   struct pci_dn *pdn;
u32 cfg_addr;
u64 buid;
int ret;
@@ -953,11 +954,10 @@ static int create_ddw(struct pci_dev *dev, const u32 
*ddw_avail,
 * Retrieve them from the pci device, not the node with the
 * dma-window property
 */
-   edev = pci_dev_to_eeh_dev(dev);
-   cfg_addr = edev->config_addr;
-   if (edev->pe_config_addr)
-   cfg_addr = edev->pe_config_addr;
-   buid = edev->phb->buid;
+   dn = pci_device_to_OF_node(dev);
+   pdn = PCI_DN(dn);
+   buid = pdn->phb->buid;
+   cfg_addr = ((pdn->busno << 16) | (pdn->devfn << 8));
 
do {
/* extra outputs are LIOBN and dma-addr (hi, lo) */
diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c
index 910c12e..348dd50 100644
--- a/drivers/net/can/dev.c
+++ b/drivers/net/can/dev.c
@@ -798,6 +798,9 @@ static int can_validate(struct nlattr *tb[], struct nlattr 
*data[])
 * - control mode with CAN_CTRLMODE_FD set
 */
 
+   if (!data)
+   return 0;
+
if (data[IFLA_CAN_CTRLMODE]) {
struct can_ctrlmode *cm = nla_data(data[IFLA_CAN_CTRLMODE]);
 
diff --git a/mm/migrate.c b/mm/migrate.c
index fcb6204..a14784c 100644
--- a/mm/migrate.c
+++ b/mm/migrate.c
@@ -30,6 +30,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -310,6 +311,8 @@ int migrate_page_move_mapping(struct address_space *mapping,
struct buffer_head *head, enum migrate_mode mode,
int extra_count)
 {
+   struct zone *oldzone, *newzone;
+   int dirty;
int expected_count = 1 + extra_count;
void **pslot;
 
@@ -320,6 +323,9 @@ int migrate_page_move_mapping(struct address_space *mapping,
return MIGRATEPAGE_SUCCESS;
}
 
+   oldzone = page_zone(page);
+   newzone = page_zone(newpage);
+
spin_lock_irq(&mapping->tree_lock);
 
pslot = radix_tree_lookup_slot(&mapping->page_tree,
@@ -360,6 +366,13 @@ int migrate_page_move_mapping(struct address_space 
*mapping,
set_page_private(newpage, page_private(page));
}
 
+   /* Move dirty while page refs frozen and newpage not yet exposed */
+   dirty = PageDirty(page);
+   if (dirty) {
+   ClearPageDirty(page);
+   SetPageDirty(newpage);
+   }
+
radix_tree_replace_slot(pslot, newpage);
 
/*
@@ -369,6 +382,9 @@ int migrate_page_move_mapping(struct address_space *mapping,
 */
page_unfreeze_refs(page, expected_count - 1);
 
+   spin_unlock(&mapping->tree_lock);
+   /* Leave irq disabled to prevent preemption while updating stats */
+
/*
 * If moved to a different zone then also account
 * the page for that zone. Other VM counters will be
@@ -379,13 +395,19 @@ int migrate_page_move_mapping(struct address_space 
*mapping,
 * via NR_FILE_PAGES and NR_ANON_PAGES if they
 * are mapped to swap space.
 */
-   __dec_zone_page_state(page, NR_FILE_PAGES);
-   __inc_zone_page_state(newpage, NR_FILE_PAGES);
-   if (!PageSwapCache(page) && PageSwapBacked(page)) {
-   __dec_zone_page_state(

[4.2.y-ckt stable] Linux 4.2.8-ckt13

2016-07-13 Thread Kamal Mostafa
I am announcing the release of the Linux 4.2.8-ckt13 kernel.

***
*** Note that this is the FINAL 4.2.y-ckt RELEASE in this series.
***

The updated 4.2.y-ckt tree can be found at: 
git://git.launchpad.net/~canonical-kernel/linux/+git/linux-stable-ckt 
linux-4.2.y
and can be browsed at:

https://git.launchpad.net/~canonical-kernel/linux/+git/linux-stable-ckt/log/?h=linux-4.2.y

The diff from v4.2.8-ckt12 is posted as a follow-up to this email.

The 4.2.y-ckt extended stable tree is maintained by the Canonical Kernel Team.
For more info, see https://wiki.ubuntu.com/Kernel/Dev/ExtendedStable

 -Kamal

-- 
 Makefile   |  2 +-
 arch/powerpc/platforms/pseries/iommu.c | 24 
 drivers/net/can/dev.c  |  3 ++
 mm/migrate.c   | 51 +-
 tools/perf/tests/vmlinux-kallsyms.c|  8 +-
 5 files changed, 48 insertions(+), 40 deletions(-)

Gavin Shan (1):
  powerpc/pseries: Fix PCI config address for DDW

Guilherme G. Piccoli (1):
  powerpc/iommu: Remove the dependency on EEH struct in DDW mechanism

Hugh Dickins (1):
  mm: migrate dirty page without clear_page_dirty_for_io etc

Kamal Mostafa (1):
  Linux 4.2.8-ckt13

Oliver Hartkopp (1):
  can: fix handling of unmodifiable configuration options fix

Tim Gardner (1):
  [4.2-stable only] Revert "perf test: Ignore kcore files in the "vmlinux 
matches kallsyms" test"



[3.19.y-ckt stable] Linux 3.19.8-ckt23

2016-07-12 Thread Kamal Mostafa
  |   1 +
 fs/btrfs/file.c   |   2 +-
 fs/btrfs/inode.c  |   2 +-
 fs/btrfs/ioctl.c  |  21 
 fs/cifs/sess.c| 139 +--
 fs/cifs/smb2glob.h|   1 +
 fs/cifs/smb2inode.c   |   8 +-
 fs/cifs/smb2pdu.c |  16 +++
 fs/cifs/smb2proto.h   |   2 +
 fs/ext4/ialloc.c  |  10 +-
 fs/ext4/mballoc.c |  10 +-
 fs/ext4/namei.c   |   2 +-
 fs/hpfs/super.c   |  42 +--
 fs/xfs/xfs_inode.c|  26 +++--
 include/linux/can/dev.h   |  22 +++-
 include/linux/usb.h   |   5 +-
 include/linux/usb/hcd.h   |   1 +
 include/scsi/scsi_device.h|   1 +
 kernel/exit.c |  29 +++--
 kernel/trace/ring_buffer.c|  35 +++---
 lib/dma-debug.c   |   2 +-
 mm/migrate.c  |  51 +
 net/sunrpc/auth_gss/svcauth_gss.c |   4 +-
 scripts/Makefile.extrawarn|   1 +
 sound/soc/codecs/ak4642.c |   2 +
 101 files changed, 982 insertions(+), 425 deletions(-)

Adrian Hunter (3):
  mmc: mmc: Fix partition switch timeout for some eMMCs
  mmc: sdhci-pci: Remove MMC_CAP_BUS_WIDTH_TEST for Intel controllers
  mmc: sdhci-acpi: Remove MMC_CAP_BUS_WIDTH_TEST for Intel controllers

Alan Stern (1):
  USB: leave LPM alone if possible when binding/unbinding interface drivers

Andreas Noever (1):
  thunderbolt: Fix double free of drom buffer

Andreas Werner (1):
  mcb: Fixed bar number assignment for the gdd

Andrew Jeffery (1):
  pinctrl: exynos5440: Use off-stack memory for pinctrl_gpio_range

Andy Honig (1):
  KVM: MTRR: remove MSR 0x2f8

Anilkumar Kolli (1):
  ath10k: fix debugfs pktlog_filter write

Arnd Bergmann (2):
  gcov: disable tree-loop-im to reduce stack usage
  kbuild: move -Wunused-const-variable to W=1 warning level

Cameron Gutman (1):
  Input: xpad - prevent spurious input from wired Xbox 360 controllers

Catalin Marinas (1):
  arm64: Ensure pmd_present() returns false after pmd_mknotpresent()

Catalin Vasile (1):
  crypto: caam - fix caam_jr_alloc() ret code

Chris Bainbridge (1):
  usb: core: hub: hub_port_init lock controller instead of bus

Daniel Lezcano (1):
  cpuidle: Fix cpuidle_state_is_coupled() argument in cpuidle_enter()

Dave Chinner (3):
  xfs: xfs_iflush_cluster fails to abort on error
  xfs: fix inode validity check in xfs_iflush_cluster
  xfs: skip stale inodes in xfs_iflush_cluster

Dave Gerlach (1):
  cpuidle: Indicate when a device has been unregistered

Gavin Shan (3):
  powerpc/eeh: Don't report error in eeh_pe_reset_and_recover()
  powerpc/eeh: Restore initial state in eeh_pe_reset_and_recover()
  powerpc/pseries: Fix PCI config address for DDW

Guilherme G. Piccoli (1):
  powerpc/iommu: Remove the dependency on EEH struct in DDW mechanism

Hari Bathini (1):
  powerpc/book3s64: Fix branching to OOL handlers in relocatable kernel

Huacai Chen (1):
  MIPS: Reserve nosave data for hibernation

Hugh Dickins (1):
  mm: migrate dirty page without clear_page_dirty_for_io etc

Itai Handler (1):
  drm/gma500: Fix possible out of bounds read

James Hogan (5):
  MIPS: Fix siginfo.h to use strict posix types
  MIPS: Don't unwind to user mode with EVA
  MIPS: Avoid using unwind_stack() with usermode
  MIPS: KVM: Fix timer IRQ race when freezing timer
  MIPS: KVM: Fix timer IRQ race when writing CP0_Compare

Jan Kara (1):
  ext4: fix oops on corrupted filesystem

Jiri Slaby (3):
  Bluetooth: vhci: fix open_timeout vs. hdev race
  Bluetooth: vhci: purge unhandled skbs
  TTY: n_gsm, fix false positive WARN_ON

Johan Hovold (5):
  USB: serial: io_edgeport: fix memory leaks in attach error path
  USB: serial: io_edgeport: fix memory leaks in probe error path
  USB: serial: keyspan: fix use-after-free in probe error path
  USB: serial: mxuport: fix use-after-free in probe error path
  USB: serial: quatech2: fix use-after-free in probe error path

Johannes Thumshirn (2):
  scsi: Add intermediate STARGET_REMOVE state to scsi_target_state
  Revert "scsi: fix soft lockup in scsi_remove_target() on module removal"

Joseph Salisbury (1):
  ath5k: Change led pin configuration for compaq c700 laptop

Julien Grall (1):
  arm64: cpuinfo: Missing NULL terminator in compat_hwcap_str

Kamal Mostafa (1):
  Linux 3.19.8-ckt23

Konstantin Shkolnyy (1):
  USB: serial: cp210x: fix hardware flow-control disable

Krzysztof Kozlowski (1):
 

Re: [3.19.y-ckt stable] Linux 3.19.8-ckt23

2016-07-12 Thread Kamal Mostafa
diff --git a/Makefile b/Makefile
index 6b72df3..7e5e27e 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
 VERSION = 3
 PATCHLEVEL = 19
 SUBLEVEL = 8
-EXTRAVERSION = -ckt22
+EXTRAVERSION = -ckt23
 NAME = Sedated Swine
 
 # *DOCUMENTATION*
@@ -376,7 +376,7 @@ AFLAGS_MODULE   =
 LDFLAGS_MODULE  =
 CFLAGS_KERNEL  =
 AFLAGS_KERNEL  =
-CFLAGS_GCOV= -fprofile-arcs -ftest-coverage
+CFLAGS_GCOV= -fprofile-arcs -ftest-coverage -fno-tree-loop-im
 
 
 # Use USERINCLUDE when you must reference the UAPI directories only.
@@ -688,9 +688,10 @@ KBUILD_CFLAGS += $(call cc-option, -mno-global-merge,)
 KBUILD_CFLAGS += $(call cc-option, -fcatch-undefined-behavior)
 else
 
-# This warning generated too much noise in a regular build.
-# Use make W=1 to enable this warning (see scripts/Makefile.build)
+# These warnings generated too much noise in a regular build.
+# Use make W=1 to enable them (see scripts/Makefile.build)
 KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable)
+KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable)
 endif
 
 ifdef CONFIG_FRAME_POINTER
diff --git a/arch/arm/kvm/mmu.c b/arch/arm/kvm/mmu.c
index 966f8d2..b4c2d43 100644
--- a/arch/arm/kvm/mmu.c
+++ b/arch/arm/kvm/mmu.c
@@ -845,11 +845,14 @@ static int stage2_set_pmd_huge(struct kvm *kvm, struct 
kvm_mmu_memory_cache
VM_BUG_ON(pmd_present(*pmd) && pmd_pfn(*pmd) != pmd_pfn(*new_pmd));
 
old_pmd = *pmd;
-   kvm_set_pmd(pmd, *new_pmd);
-   if (pmd_present(old_pmd))
+   if (pmd_present(old_pmd)) {
+   pmd_clear(pmd);
kvm_tlb_flush_vmid_ipa(kvm, addr);
-   else
+   } else {
get_page(virt_to_page(pmd));
+   }
+
+   kvm_set_pmd(pmd, *new_pmd);
return 0;
 }
 
@@ -886,12 +889,14 @@ static int stage2_set_pte(struct kvm *kvm, struct 
kvm_mmu_memory_cache *cache,
 
/* Create 2nd stage page table mapping - Level 3 */
old_pte = *pte;
-   kvm_set_pte(pte, *new_pte);
-   if (pte_present(old_pte))
+   if (pte_present(old_pte)) {
+   kvm_set_pte(pte, __pte(0));
kvm_tlb_flush_vmid_ipa(kvm, addr);
-   else
+   } else {
get_page(virt_to_page(pte));
+   }
 
+   kvm_set_pte(pte, *new_pte);
return 0;
 }
 
diff --git a/arch/arm64/include/asm/pgtable-hwdef.h 
b/arch/arm64/include/asm/pgtable-hwdef.h
index 88174e0..31e6b04 100644
--- a/arch/arm64/include/asm/pgtable-hwdef.h
+++ b/arch/arm64/include/asm/pgtable-hwdef.h
@@ -77,7 +77,6 @@
  * Section
  */
 #define PMD_SECT_VALID (_AT(pmdval_t, 1) << 0)
-#define PMD_SECT_PROT_NONE (_AT(pmdval_t, 1) << 58)
 #define PMD_SECT_USER  (_AT(pmdval_t, 1) << 6) /* AP[1] */
 #define PMD_SECT_RDONLY(_AT(pmdval_t, 1) << 7) /* 
AP[2] */
 #define PMD_SECT_S (_AT(pmdval_t, 3) << 8)
diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h
index 210d632..6e2a33e 100644
--- a/arch/arm64/include/asm/pgtable.h
+++ b/arch/arm64/include/asm/pgtable.h
@@ -279,6 +279,7 @@ void pmdp_splitting_flush(struct vm_area_struct *vma, 
unsigned long address,
 #endif /* CONFIG_HAVE_RCU_TABLE_FREE */
 #endif /* CONFIG_TRANSPARENT_HUGEPAGE */
 
+#define pmd_present(pmd)   pte_present(pmd_pte(pmd))
 #define pmd_dirty(pmd) pte_dirty(pmd_pte(pmd))
 #define pmd_young(pmd) pte_young(pmd_pte(pmd))
 #define pmd_wrprotect(pmd) pte_pmd(pte_wrprotect(pmd_pte(pmd)))
@@ -287,7 +288,7 @@ void pmdp_splitting_flush(struct vm_area_struct *vma, 
unsigned long address,
 #define pmd_mkwrite(pmd)   pte_pmd(pte_mkwrite(pmd_pte(pmd)))
 #define pmd_mkdirty(pmd)   pte_pmd(pte_mkdirty(pmd_pte(pmd)))
 #define pmd_mkyoung(pmd)   pte_pmd(pte_mkyoung(pmd_pte(pmd)))
-#define pmd_mknotpresent(pmd)  (__pmd(pmd_val(pmd) & ~PMD_TYPE_MASK))
+#define pmd_mknotpresent(pmd)  (__pmd(pmd_val(pmd) & ~PMD_SECT_VALID))
 
 #define __HAVE_ARCH_PMD_WRITE
 #define pmd_write(pmd) pte_write(pmd_pte(pmd))
@@ -326,7 +327,6 @@ extern pgprot_t phys_mem_access_prot(struct file *file, 
unsigned long pfn,
 unsigned long size, pgprot_t vma_prot);
 
 #define pmd_none(pmd)  (!pmd_val(pmd))
-#define pmd_present(pmd)   (pmd_val(pmd))
 
 #define pmd_bad(pmd)   (!(pmd_val(pmd) & 2))
 
diff --git a/arch/arm64/kernel/setup.c b/arch/arm64/kernel/setup.c
index 386acb8..07df3f7 100644
--- a/arch/arm64/kernel/setup.c
+++ b/arch/arm64/kernel/setup.c
@@ -491,7 +491,8 @@ static const char *compat_hwcap_str[] = {
"idivt",
"vfpd32",
"lpae",
-   "evtstrm"
+   "evtstrm",
+   NULL
 };
 
 static const char *compat_hwcap2_str[] = {
diff --git a/arch/mips/ath79/early_printk.c b/arch/mips/ath79/early_printk.c
index b955faf..d1adc59 100644
--- a/arch/mips/ath79/early_printk.c
+++ b/arch/mips/ath79/early_printk.c
@@ -31,13 +31,15 @@ static inline void prom_putchar_wait(void __iomem *reg, u32 
mask, u32 

[PATCH 4.2.y-ckt 1/5] [4.2-stable only] Revert "perf test: Ignore kcore files in the "vmlinux matches kallsyms" test"

2016-07-08 Thread Kamal Mostafa
4.2.8-ckt13 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Tim Gardner 

BugLink: http://bugs.launchpad.net/bugs/1592552

This reverts commit 159436d273a248e99f05dcd15f39e2c6bdb02652.

Causes an FTBS.

tests/vmlinux-kallsyms.c: In function 'test__vmlinux_matches_kallsyms':
tests/vmlinux-kallsyms.c:64:6: error: implicit declaration of function 
'__machine__load_kallsyms' [-Werror=implicit-function-declaration]
  if (__machine__load_kallsyms(&kallsyms, "/proc/kallsyms", type, true, NULL) 
<= 0) {
  ^
tests/vmlinux-kallsyms.c:64:2: error: nested extern declaration of 
'__machine__load_kallsyms' [-Werror=nested-externs]
  if (__machine__load_kallsyms(&kallsyms, "/proc/kallsyms", type, true, NULL) 
<= 0) {
  ^
cc1: all warnings being treated as errors

Signed-off-by: Tim Gardner 
Signed-off-by: Kamal Mostafa 
---
 tools/perf/tests/vmlinux-kallsyms.c | 8 +---
 1 file changed, 1 insertion(+), 7 deletions(-)

diff --git a/tools/perf/tests/vmlinux-kallsyms.c 
b/tools/perf/tests/vmlinux-kallsyms.c
index 8de34ea..b34c5fc 100644
--- a/tools/perf/tests/vmlinux-kallsyms.c
+++ b/tools/perf/tests/vmlinux-kallsyms.c
@@ -54,14 +54,8 @@ int test__vmlinux_matches_kallsyms(void)
 * Step 3:
 *
 * Load and split /proc/kallsyms into multiple maps, one per module.
-* Do not use kcore, as this test was designed before kcore support
-* and has parts that only make sense if using the non-kcore code.
-* XXX: extend it to stress the kcorre code as well, hint: the list
-* of modules extracted from /proc/kcore, in its current form, can't
-* be compacted against the list of modules found in the "vmlinux"
-* code and with the one got from /proc/modules from the "kallsyms" 
code.
 */
-   if (__machine__load_kallsyms(&kallsyms, "/proc/kallsyms", type, true, 
NULL) <= 0) {
+   if (machine__load_kallsyms(&kallsyms, "/proc/kallsyms", type, NULL) <= 
0) {
pr_debug("dso__load_kallsyms ");
goto out;
}
-- 
2.7.4



[PATCH 4.2.y-ckt 2/5] mm: migrate dirty page without clear_page_dirty_for_io etc

2016-07-08 Thread Kamal Mostafa
4.2.8-ckt13 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Hugh Dickins 

commit 42cb14b110a5698ccf26ce59c4441722605a3743 upstream.

clear_page_dirty_for_io() has accumulated writeback and memcg subtleties
since v2.6.16 first introduced page migration; and the set_page_dirty()
which completed its migration of PageDirty, later had to be moderated to
__set_page_dirty_nobuffers(); then PageSwapBacked had to skip that too.

No actual problems seen with this procedure recently, but if you look into
what the clear_page_dirty_for_io(page)+set_page_dirty(newpage) is actually
achieving, it turns out to be nothing more than moving the PageDirty flag,
and its NR_FILE_DIRTY stat from one zone to another.

It would be good to avoid a pile of irrelevant decrementations and
incrementations, and improper event counting, and unnecessary descent of
the radix_tree under tree_lock (to set the PAGECACHE_TAG_DIRTY which
radix_tree_replace_slot() left in place anyway).

Do the NR_FILE_DIRTY movement, like the other stats movements, while
interrupts still disabled in migrate_page_move_mapping(); and don't even
bother if the zone is the same.  Do the PageDirty movement there under
tree_lock too, where old page is frozen and newpage not yet visible:
bearing in mind that as soon as newpage becomes visible in radix_tree, an
un-page-locked set_page_dirty() might interfere (or perhaps that's just
not possible: anything doing so should already hold an additional
reference to the old page, preventing its migration; but play safe).

But we do still need to transfer PageDirty in migrate_page_copy(), for
those who don't go the mapping route through migrate_page_move_mapping().

Signed-off-by: Hugh Dickins 
Cc: Christoph Lameter 
Cc: "Kirill A. Shutemov" 
Cc: Rik van Riel 
Cc: Vlastimil Babka 
Cc: Davidlohr Bueso 
Cc: Oleg Nesterov 
Cc: Sasha Levin 
Cc: Dmitry Vyukov 
Cc: KOSAKI Motohiro 
Signed-off-by: Andrew Morton 
Signed-off-by: Linus Torvalds 
[bwh: Backported to 3.16: adjust context.  This is not just an optimisation,
 but turned out to fix a possible oops (CVE-2016-3070).]
Signed-off-by: Ben Hutchings 
Signed-off-by: Luis Henriques 
Signed-off-by: Kamal Mostafa 
---
 mm/migrate.c | 51 +++
 1 file changed, 31 insertions(+), 20 deletions(-)

diff --git a/mm/migrate.c b/mm/migrate.c
index fcb6204..a14784c 100644
--- a/mm/migrate.c
+++ b/mm/migrate.c
@@ -30,6 +30,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -310,6 +311,8 @@ int migrate_page_move_mapping(struct address_space *mapping,
struct buffer_head *head, enum migrate_mode mode,
int extra_count)
 {
+   struct zone *oldzone, *newzone;
+   int dirty;
int expected_count = 1 + extra_count;
void **pslot;
 
@@ -320,6 +323,9 @@ int migrate_page_move_mapping(struct address_space *mapping,
return MIGRATEPAGE_SUCCESS;
}
 
+   oldzone = page_zone(page);
+   newzone = page_zone(newpage);
+
spin_lock_irq(&mapping->tree_lock);
 
pslot = radix_tree_lookup_slot(&mapping->page_tree,
@@ -360,6 +366,13 @@ int migrate_page_move_mapping(struct address_space 
*mapping,
set_page_private(newpage, page_private(page));
}
 
+   /* Move dirty while page refs frozen and newpage not yet exposed */
+   dirty = PageDirty(page);
+   if (dirty) {
+   ClearPageDirty(page);
+   SetPageDirty(newpage);
+   }
+
radix_tree_replace_slot(pslot, newpage);
 
/*
@@ -369,6 +382,9 @@ int migrate_page_move_mapping(struct address_space *mapping,
 */
page_unfreeze_refs(page, expected_count - 1);
 
+   spin_unlock(&mapping->tree_lock);
+   /* Leave irq disabled to prevent preemption while updating stats */
+
/*
 * If moved to a different zone then also account
 * the page for that zone. Other VM counters will be
@@ -379,13 +395,19 @@ int migrate_page_move_mapping(struct address_space 
*mapping,
 * via NR_FILE_PAGES and NR_ANON_PAGES if they
 * are mapped to swap space.
 */
-   __dec_zone_page_state(page, NR_FILE_PAGES);
-   __inc_zone_page_state(newpage, NR_FILE_PAGES);
-   if (!PageSwapCache(page) && PageSwapBacked(page)) {
-   __dec_zone_page_state(page, NR_SHMEM);
-   __inc_zone_page_state(newpage, NR_SHMEM);
+   if (newzone != oldzone) {
+   __dec_zone_state(oldzone, NR_FILE_PAGES);
+   __inc_zone_state(newzone, NR_FILE_PAGES);
+   if (PageSwapBacked(page) && !PageSwapCache(page)) {
+   __dec_zone_state(oldzone, NR_SHMEM);
+   __inc_zone_state(newzone, NR_SHMEM);
+  

[PATCH 4.2.y-ckt 3/5] can: fix handling of unmodifiable configuration options fix

2016-07-08 Thread Kamal Mostafa
4.2.8-ckt13 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Oliver Hartkopp 

commit bce271f255dae8335dc4d2ee2c4531e09cc67f5a upstream.

With upstream commit bb208f144cf3f59 (can: fix handling of unmodifiable
configuration options) a new can_validate() function was introduced.

When invoking 'ip link set can0 type can' without any configuration data
can_validate() tries to validate the content without taking into account that
there's totally no content. This patch adds a check for missing content.

Reported-by: ajneu 
Signed-off-by: Oliver Hartkopp 
Signed-off-by: Marc Kleine-Budde 
Signed-off-by: Kamal Mostafa 
---
 drivers/net/can/dev.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c
index 910c12e..348dd50 100644
--- a/drivers/net/can/dev.c
+++ b/drivers/net/can/dev.c
@@ -798,6 +798,9 @@ static int can_validate(struct nlattr *tb[], struct nlattr 
*data[])
 * - control mode with CAN_CTRLMODE_FD set
 */
 
+   if (!data)
+   return 0;
+
if (data[IFLA_CAN_CTRLMODE]) {
struct can_ctrlmode *cm = nla_data(data[IFLA_CAN_CTRLMODE]);
 
-- 
2.7.4



[4.2.y-ckt stable] Linux 4.2.8-ckt13 stable review

2016-07-08 Thread Kamal Mostafa
This is the start of the review cycle for the Linux 4.2.8-ckt13 stable
kernel.

***
*** Note that this will be the FINAL 4.2.y-ckt RELEASE in this series.
***

This version contains 5 new patches, summarized below.  The new patches
are posted as replies to this message and also available in this git branch:

https://git.launchpad.net/~canonical-kernel/linux/+git/linux-stable-ckt/log/?h=linux-4.2.y-review

git://git.launchpad.net/~canonical-kernel/linux/+git/linux-stable-ckt  
linux-4.2.y-review

The review period for version 4.2.8-ckt13 will be open for the next three
days.  To report a problem, please reply to the relevant follow-up patch
message.

For more information about the Linux 4.2.y-ckt extended stable kernel
series, see https://wiki.ubuntu.com/Kernel/Dev/ExtendedStable .

 -Kamal

--
 arch/powerpc/platforms/pseries/iommu.c | 24 
 drivers/net/can/dev.c  |  3 ++
 mm/migrate.c   | 51 +-
 tools/perf/tests/vmlinux-kallsyms.c|  8 +-
 4 files changed, 47 insertions(+), 39 deletions(-)

Gavin Shan (1):
  powerpc/pseries: Fix PCI config address for DDW

Guilherme G. Piccoli (1):
  powerpc/iommu: Remove the dependency on EEH struct in DDW mechanism

Hugh Dickins (1):
  mm: migrate dirty page without clear_page_dirty_for_io etc

Oliver Hartkopp (1):
  can: fix handling of unmodifiable configuration options fix

Tim Gardner (1):
  [4.2-stable only] Revert "perf test: Ignore kcore files in the "vmlinux 
matches kallsyms" test"


[PATCH 4.2.y-ckt 4/5] powerpc/iommu: Remove the dependency on EEH struct in DDW mechanism

2016-07-08 Thread Kamal Mostafa
4.2.8-ckt13 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: "Guilherme G. Piccoli" 

commit 8445a87f7092bc8336ea1305be9306f26b846d93 upstream.

Commit 39baadbf36ce ("powerpc/eeh: Remove eeh information from pci_dn")
changed the pci_dn struct by removing its EEH-related members.
As part of this clean-up, DDW mechanism was modified to read the device
configuration address from eeh_dev struct.

As a consequence, now if we disable EEH mechanism on kernel command-line
for example, the DDW mechanism will fail, generating a kernel oops by
dereferencing a NULL pointer (which turns to be the eeh_dev pointer).

This patch just changes the configuration address calculation on DDW
functions to a manual calculation based on pci_dn members instead of
using eeh_dev-based address.

No functional changes were made. This was tested on pSeries, both
in PHyp and qemu guest.

Fixes: 39baadbf36ce ("powerpc/eeh: Remove eeh information from pci_dn")
Reviewed-by: Gavin Shan 
Signed-off-by: Guilherme G. Piccoli 
Signed-off-by: Michael Ellerman 
Signed-off-by: Kamal Mostafa 
---
 arch/powerpc/platforms/pseries/iommu.c | 24 
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/arch/powerpc/platforms/pseries/iommu.c 
b/arch/powerpc/platforms/pseries/iommu.c
index 10510de..34ee145 100644
--- a/arch/powerpc/platforms/pseries/iommu.c
+++ b/arch/powerpc/platforms/pseries/iommu.c
@@ -913,7 +913,8 @@ machine_arch_initcall(pseries, find_existing_ddw_windows);
 static int query_ddw(struct pci_dev *dev, const u32 *ddw_avail,
struct ddw_query_response *query)
 {
-   struct eeh_dev *edev;
+   struct device_node *dn;
+   struct pci_dn *pdn;
u32 cfg_addr;
u64 buid;
int ret;
@@ -924,11 +925,10 @@ static int query_ddw(struct pci_dev *dev, const u32 
*ddw_avail,
 * Retrieve them from the pci device, not the node with the
 * dma-window property
 */
-   edev = pci_dev_to_eeh_dev(dev);
-   cfg_addr = edev->config_addr;
-   if (edev->pe_config_addr)
-   cfg_addr = edev->pe_config_addr;
-   buid = edev->phb->buid;
+   dn = pci_device_to_OF_node(dev);
+   pdn = PCI_DN(dn);
+   buid = pdn->phb->buid;
+   cfg_addr = (pdn->busno << 8) | pdn->devfn;
 
ret = rtas_call(ddw_avail[0], 3, 5, (u32 *)query,
  cfg_addr, BUID_HI(buid), BUID_LO(buid));
@@ -942,7 +942,8 @@ static int create_ddw(struct pci_dev *dev, const u32 
*ddw_avail,
struct ddw_create_response *create, int page_shift,
int window_shift)
 {
-   struct eeh_dev *edev;
+   struct device_node *dn;
+   struct pci_dn *pdn;
u32 cfg_addr;
u64 buid;
int ret;
@@ -953,11 +954,10 @@ static int create_ddw(struct pci_dev *dev, const u32 
*ddw_avail,
 * Retrieve them from the pci device, not the node with the
 * dma-window property
 */
-   edev = pci_dev_to_eeh_dev(dev);
-   cfg_addr = edev->config_addr;
-   if (edev->pe_config_addr)
-   cfg_addr = edev->pe_config_addr;
-   buid = edev->phb->buid;
+   dn = pci_device_to_OF_node(dev);
+   pdn = PCI_DN(dn);
+   buid = pdn->phb->buid;
+   cfg_addr = (pdn->busno << 8) | pdn->devfn;
 
do {
/* extra outputs are LIOBN and dma-addr (hi, lo) */
-- 
2.7.4



[PATCH 4.2.y-ckt 5/5] powerpc/pseries: Fix PCI config address for DDW

2016-07-08 Thread Kamal Mostafa
4.2.8-ckt13 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Gavin Shan 

commit 8a934efe94347eee843aeea65bdec8077a79e259 upstream.

In commit 8445a87f7092 "powerpc/iommu: Remove the dependency on EEH
struct in DDW mechanism", the PE address was replaced with the PCI
config address in order to remove dependency on EEH. According to PAPR
spec, firmware (pHyp or QEMU) should accept "xxBBSSxx" format PCI config
address, not "BBSS" provided by the patch. Note that "BB" is PCI bus
number and "SS" is the combination of slot and function number.

This fixes the PCI address passed to DDW RTAS calls.

Fixes: 8445a87f7092 ("powerpc/iommu: Remove the dependency on EEH struct in DDW 
mechanism")
Reported-by: Guilherme G. Piccoli 
Signed-off-by: Gavin Shan 
Tested-by: Guilherme G. Piccoli 
Signed-off-by: Michael Ellerman 
Signed-off-by: Kamal Mostafa 
---
 arch/powerpc/platforms/pseries/iommu.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/powerpc/platforms/pseries/iommu.c 
b/arch/powerpc/platforms/pseries/iommu.c
index 34ee145..cd148c3 100644
--- a/arch/powerpc/platforms/pseries/iommu.c
+++ b/arch/powerpc/platforms/pseries/iommu.c
@@ -928,7 +928,7 @@ static int query_ddw(struct pci_dev *dev, const u32 
*ddw_avail,
dn = pci_device_to_OF_node(dev);
pdn = PCI_DN(dn);
buid = pdn->phb->buid;
-   cfg_addr = (pdn->busno << 8) | pdn->devfn;
+   cfg_addr = ((pdn->busno << 16) | (pdn->devfn << 8));
 
ret = rtas_call(ddw_avail[0], 3, 5, (u32 *)query,
  cfg_addr, BUID_HI(buid), BUID_LO(buid));
@@ -957,7 +957,7 @@ static int create_ddw(struct pci_dev *dev, const u32 
*ddw_avail,
dn = pci_device_to_OF_node(dev);
pdn = PCI_DN(dn);
buid = pdn->phb->buid;
-   cfg_addr = (pdn->busno << 8) | pdn->devfn;
+   cfg_addr = ((pdn->busno << 16) | (pdn->devfn << 8));
 
do {
/* extra outputs are LIOBN and dma-addr (hi, lo) */
-- 
2.7.4



[PATCH 3.19.y-ckt 02/99] ath10k: fix firmware assert in monitor mode

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Rajkumar Manoharan 

commit 8a75fc54745fd3ce9062ab1cc6429a9da9ac2a68 upstream.

commit 166de3f1895d ("ath10k: remove supported chain mask") had revealed
an issue on monitor mode. Configuring NSS upon monitor interface
creation is causing target assert in all qca9888x and qca6174 firmware.
Firmware assert issue can be reproduced by below sequence even after
reverting commit 166de3f1895d ("ath10k: remove supported chain mask").

ip link set wlan0 down
iw wlan0 set type monitor
iw phy0 set antenna 7
ip link set wlan0 up

This issue is originally reported on qca9888 with 10.1 firmware.

Fixes: 5572a95b4b ("ath10k: apply chainmask settings to vdev on creation")
Reported-by: Janusz Dziedzic 
Signed-off-by: Rajkumar Manoharan 
Signed-off-by: Kalle Valo 
Signed-off-by: Kamal Mostafa 
---
 drivers/net/wireless/ath/ath10k/mac.c | 5 -
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/ath/ath10k/mac.c 
b/drivers/net/wireless/ath/ath10k/mac.c
index bbee156..4505cf7 100644
--- a/drivers/net/wireless/ath/ath10k/mac.c
+++ b/drivers/net/wireless/ath/ath10k/mac.c
@@ -2986,7 +2986,10 @@ static int ath10k_add_interface(struct ieee80211_hw *hw,
goto err_vdev_delete;
}
 
-   if (ar->cfg_tx_chainmask) {
+   /* Configuring number of spatial stream for monitor interface is causing
+* target assert in qca9888 and qca6174.
+*/
+   if (ar->cfg_tx_chainmask && (vif->type != NL80211_IFTYPE_MONITOR)) {
u16 nss = get_nss_from_chainmask(ar->cfg_tx_chainmask);
 
vdev_param = ar->wmi.vdev_param->nss;
-- 
2.7.4



[PATCH 3.19.y-ckt 20/99] pinctrl: exynos5440: Use off-stack memory for pinctrl_gpio_range

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Andrew Jeffery 

commit 71324fdc72ef0163e57631aa814a9a81e9e4770b upstream.

The range is registered into a linked list which can be referenced
throughout the lifetime of the driver. Ensure the range's memory is useful
for the same lifetime by adding it to the driver's private data structure.

The bug was introduced in the driver's initial commit, which was present in
v3.10.

Fixes: f0b9a7e521fa ("pinctrl: exynos5440: add pinctrl driver for Samsung 
EXYNOS5440 SoC")
Signed-off-by: Andrew Jeffery 
Acked-by: Tomasz Figa 
Reviewed-by: Krzysztof Kozlowski 
Signed-off-by: Linus Walleij 
Signed-off-by: Kamal Mostafa 
---
 drivers/pinctrl/samsung/pinctrl-exynos5440.c | 15 ---
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/drivers/pinctrl/samsung/pinctrl-exynos5440.c 
b/drivers/pinctrl/samsung/pinctrl-exynos5440.c
index 86192be..cd04755 100644
--- a/drivers/pinctrl/samsung/pinctrl-exynos5440.c
+++ b/drivers/pinctrl/samsung/pinctrl-exynos5440.c
@@ -109,6 +109,7 @@ struct exynos5440_pmx_func {
  * @nr_groups: number of pin groups available.
  * @pmx_functions: list of pin functions parsed from device tree.
  * @nr_functions: number of pin functions available.
+ * @range: gpio range to register with pinctrl
  */
 struct exynos5440_pinctrl_priv_data {
void __iomem*reg_base;
@@ -119,6 +120,7 @@ struct exynos5440_pinctrl_priv_data {
unsigned intnr_groups;
const struct exynos5440_pmx_func*pmx_functions;
unsigned intnr_functions;
+   struct pinctrl_gpio_range   range;
 };
 
 /**
@@ -769,7 +771,6 @@ static int exynos5440_pinctrl_register(struct 
platform_device *pdev,
struct pinctrl_desc *ctrldesc;
struct pinctrl_dev *pctl_dev;
struct pinctrl_pin_desc *pindesc, *pdesc;
-   struct pinctrl_gpio_range grange;
char *pin_names;
int pin, ret;
 
@@ -827,12 +828,12 @@ static int exynos5440_pinctrl_register(struct 
platform_device *pdev,
return -EINVAL;
}
 
-   grange.name = "exynos5440-pctrl-gpio-range";
-   grange.id = 0;
-   grange.base = 0;
-   grange.npins = EXYNOS5440_MAX_PINS;
-   grange.gc = priv->gc;
-   pinctrl_add_gpio_range(pctl_dev, &grange);
+   priv->range.name = "exynos5440-pctrl-gpio-range";
+   priv->range.id = 0;
+   priv->range.base = 0;
+   priv->range.npins = EXYNOS5440_MAX_PINS;
+   priv->range.gc = priv->gc;
+   pinctrl_add_gpio_range(pctl_dev, &priv->range);
return 0;
 }
 
-- 
2.7.4



[PATCH 3.19.y-ckt 16/99] PM / Runtime: Fix error path in pm_runtime_force_resume()

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Ulf Hansson 

commit 0ae3aeefabbeef26294e7a349b51f1c761d46c9f upstream.

As pm_runtime_set_active() may fail because the device's parent isn't
active, we can end up executing the ->runtime_resume() callback for the
device when it isn't allowed.

Fix this by invoking pm_runtime_set_active() before running the callback
and let's also deal with the error code.

Fixes: 37f204164dfb (PM: Add pm_runtime_suspend|resume_force functions)
Signed-off-by: Ulf Hansson 
Reviewed-by: Linus Walleij 
Signed-off-by: Rafael J. Wysocki 
Signed-off-by: Kamal Mostafa 
---
 drivers/base/power/runtime.c | 9 +++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/drivers/base/power/runtime.c b/drivers/base/power/runtime.c
index 5070c4f..5b06452 100644
--- a/drivers/base/power/runtime.c
+++ b/drivers/base/power/runtime.c
@@ -1462,11 +1462,16 @@ int pm_runtime_force_resume(struct device *dev)
goto out;
}
 
-   ret = callback(dev);
+   ret = pm_runtime_set_active(dev);
if (ret)
goto out;
 
-   pm_runtime_set_active(dev);
+   ret = callback(dev);
+   if (ret) {
+   pm_runtime_set_suspended(dev);
+   goto out;
+   }
+
pm_runtime_mark_last_busy(dev);
 out:
pm_runtime_enable(dev);
-- 
2.7.4



[PATCH 3.19.y-ckt 12/99] Revert "scsi: fix soft lockup in scsi_remove_target() on module removal"

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Johannes Thumshirn 

commit 305c2e71b3d733ec065cb716c76af7d554bd5571 upstream.

Now that we've done a more comprehensive fix with the intermediate
target state we can remove the previous hack introduced with commit
90a88d6ef88e ("scsi: fix soft lockup in scsi_remove_target() on module
removal").

Signed-off-by: Johannes Thumshirn 
Reviewed-by: Ewan D. Milne 
Reviewed-by: Hannes Reinecke 
Signed-off-by: Martin K. Petersen 
Signed-off-by: Kamal Mostafa 
---
 drivers/scsi/scsi_sysfs.c | 6 ++
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c
index c6126e0..64f11fa 100644
--- a/drivers/scsi/scsi_sysfs.c
+++ b/drivers/scsi/scsi_sysfs.c
@@ -1148,19 +1148,17 @@ static void __scsi_remove_target(struct scsi_target 
*starget)
 void scsi_remove_target(struct device *dev)
 {
struct Scsi_Host *shost = dev_to_shost(dev->parent);
-   struct scsi_target *starget, *last_target = NULL;
+   struct scsi_target *starget;
unsigned long flags;
 
 restart:
spin_lock_irqsave(shost->host_lock, flags);
list_for_each_entry(starget, &shost->__targets, siblings) {
if (starget->state == STARGET_DEL ||
-   starget->state == STARGET_REMOVE ||
-   starget == last_target)
+   starget->state == STARGET_REMOVE)
continue;
if (starget->dev.parent == dev || &starget->dev == dev) {
kref_get(&starget->reap_ref);
-   last_target = starget;
starget->state = STARGET_REMOVE;
spin_unlock_irqrestore(shost->host_lock, flags);
__scsi_remove_target(starget);
-- 
2.7.4



[PATCH 3.19.y-ckt 04/99] ath10k: fix debugfs pktlog_filter write

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Anilkumar Kolli 

commit 9ddc486aa09a3413a6c492fcf160ce61bfccb7b1 upstream.

It is observed that, we are disabling the packet log if we write same
value to the pktlog_filter for the second time. Always enable pktlogs
on non zero filter.

Fixes: 90174455ae05 ("ath10k: add support to configure pktlog filter")
Signed-off-by: Anilkumar Kolli 
Signed-off-by: Kalle Valo 
Signed-off-by: Kamal Mostafa 
---
 drivers/net/wireless/ath/ath10k/debug.c | 7 ++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/ath/ath10k/debug.c 
b/drivers/net/wireless/ath/ath10k/debug.c
index a716758..8f5e41c 100644
--- a/drivers/net/wireless/ath/ath10k/debug.c
+++ b/drivers/net/wireless/ath/ath10k/debug.c
@@ -1760,7 +1760,12 @@ static ssize_t ath10k_write_pktlog_filter(struct file 
*file,
goto out;
}
 
-   if (filter && (filter != ar->debug.pktlog_filter)) {
+   if (filter == ar->debug.pktlog_filter) {
+   ret = count;
+   goto out;
+   }
+
+   if (filter) {
ret = ath10k_wmi_pdev_pktlog_enable(ar, filter);
if (ret) {
ath10k_warn(ar, "failed to enable pktlog filter %x: 
%d\n",
-- 
2.7.4



[PATCH 3.19.y-ckt 15/99] powerpc/book3s64: Fix branching to OOL handlers in relocatable kernel

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Hari Bathini 

commit 8ed8ab40047a570fdd8043a40c104a57248dd3fd upstream.

Some of the interrupt vectors on 64-bit POWER server processors are only
32 bytes long (8 instructions), which is not enough for the full
first-level interrupt handler. For these we need to branch to an
out-of-line (OOL) handler. But when we are running a relocatable kernel,
interrupt vectors till __end_interrupts marker are copied down to real
address 0x100. So, branching to labels (ie. OOL handlers) outside this
section must be handled differently (see LOAD_HANDLER()), considering
relocatable kernel, which would need at least 4 instructions.

However, branching from interrupt vector means that we corrupt the
CFAR (come-from address register) on POWER7 and later processors as
mentioned in commit 1707dd16. So, EXCEPTION_PROLOG_0 (6 instructions)
that contains the part up to the point where the CFAR is saved in the
PACA should be part of the short interrupt vectors before we branch out
to OOL handlers.

But as mentioned already, there are interrupt vectors on 64-bit POWER
server processors that are only 32 bytes long (like vectors 0x4f00,
0x4f20, etc.), which cannot accomodate the above two cases at the same
time owing to space constraint. Currently, in these interrupt vectors,
we simply branch out to OOL handlers, without using LOAD_HANDLER(),
which leaves us vulnerable when running a relocatable kernel (eg. kdump
case). While this has been the case for sometime now and kdump is used
widely, we were fortunate not to see any problems so far, for three
reasons:

  1. In almost all cases, production kernel (relocatable) is used for
 kdump as well, which would mean that crashed kernel's OOL handler
 would be at the same place where we end up branching to, from short
 interrupt vector of kdump kernel.
  2. Also, OOL handler was unlikely the reason for crash in almost all
 the kdump scenarios, which meant we had a sane OOL handler from
 crashed kernel that we branched to.
  3. On most 64-bit POWER server processors, page size is large enough
 that marking interrupt vector code as executable (see commit
 429d2e83) leads to marking OOL handler code from crashed kernel,
 that sits right below interrupt vector code from kdump kernel, as
 executable as well.

Let us fix this by moving the __end_interrupts marker down past OOL
handlers to make sure that we also copy OOL handlers to real address
0x100 when running a relocatable kernel.

This fix has been tested successfully in kdump scenario, on an LPAR with
4K page size by using different default/production kernel and kdump
kernel.

Also tested by manually corrupting the OOL handlers in the first kernel
and then kdump'ing, and then causing the OOL handlers to fire - mpe.

Fixes: c1fb6816fb1b ("powerpc: Add relocation on exception vector handlers")
Signed-off-by: Hari Bathini 
Signed-off-by: Mahesh Salgaonkar 
Signed-off-by: Michael Ellerman 
Signed-off-by: Kamal Mostafa 
---
 arch/powerpc/kernel/exceptions-64s.S | 16 +++-
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/arch/powerpc/kernel/exceptions-64s.S 
b/arch/powerpc/kernel/exceptions-64s.S
index 9519e6b..7662bfa 100644
--- a/arch/powerpc/kernel/exceptions-64s.S
+++ b/arch/powerpc/kernel/exceptions-64s.S
@@ -963,11 +963,6 @@ hv_facility_unavailable_relon_trampoline:
 #endif
STD_RELON_EXCEPTION_PSERIES(0x5700, 0x1700, altivec_assist)
 
-   /* Other future vectors */
-   .align  7
-   .globl  __end_interrupts
-__end_interrupts:
-
.align  7
 system_call_entry_direct:
 #if defined(CONFIG_RELOCATABLE)
@@ -1261,6 +1256,17 @@ __end_handlers:
STD_RELON_EXCEPTION_PSERIES_OOL(0xf60, facility_unavailable)
STD_RELON_EXCEPTION_HV_OOL(0xf80, hv_facility_unavailable)
 
+   /*
+* The __end_interrupts marker must be past the out-of-line (OOL)
+* handlers, so that they are copied to real address 0x100 when running
+* a relocatable kernel. This ensures they can be reached from the short
+* trampoline handlers (like 0x4f00, 0x4f20, etc.) which branch
+* directly, without using LOAD_HANDLER().
+*/
+   .align  7
+   .globl  __end_interrupts
+__end_interrupts:
+
 #if defined(CONFIG_PPC_PSERIES) || defined(CONFIG_PPC_POWERNV)
 /*
  * Data area reserved for FWNMI option.
-- 
2.7.4



[PATCH 3.19.y-ckt 09/99] cpuidle: Indicate when a device has been unregistered

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Dave Gerlach 

commit c998c07836f985b24361629dc98506ec7893e7a0 upstream.

Currently the 'registered' member of the cpuidle_device struct is set
to 1 during cpuidle_register_device. In this same function there are
checks to see if the device is already registered to prevent duplicate
calls to register the device, but this value is never set to 0 even on
unregister of the device. Because of this, any attempt to call
cpuidle_register_device after a call to cpuidle_unregister_device will
fail which shouldn't be the case.

To prevent this, set registered to 0 when the device is unregistered.

Fixes: c878a52d3c7c (cpuidle: Check if device is already registered)
Signed-off-by: Dave Gerlach 
Acked-by: Daniel Lezcano 
Signed-off-by: Rafael J. Wysocki 
Signed-off-by: Kamal Mostafa 
---
 drivers/cpuidle/cpuidle.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c
index 9ab9964..5a4ff9c 100644
--- a/drivers/cpuidle/cpuidle.c
+++ b/drivers/cpuidle/cpuidle.c
@@ -355,6 +355,8 @@ static void __cpuidle_unregister_device(struct 
cpuidle_device *dev)
list_del(&dev->device_list);
per_cpu(cpuidle_devices, dev->cpu) = NULL;
module_put(drv->owner);
+
+   dev->registered = 0;
 }
 
 static void __cpuidle_device_init(struct cpuidle_device *dev)
-- 
2.7.4



[PATCH 3.19.y-ckt 13/99] usb: f_mass_storage: test whether thread is running before starting another

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Michal Nazarewicz 

commit f78bbcae86e676fad9e6c6bb6cd9d9868ba23696 upstream.

When binding the function to usb_configuration, check whether the thread
is running before starting another one.  Without that, when function
instance is added to multiple configurations, fsg_bing starts multiple
threads with all but the latest one being forgotten by the driver.  This
leads to obvious thread leaks, possible lockups when trying to halt the
machine and possible more issues.

This fixes issues with legacy/multi¹ gadget as well as configfs gadgets
when mass_storage function is added to multiple configurations.

This change also simplifies API since the legacy gadgets no longer need
to worry about starting the thread by themselves (which was where bug
in legacy/multi was in the first place).

N.B., this patch doesn’t address adding single mass_storage function
instance to a single configuration twice.  Thankfully, there’s no
legitimate reason for such setup plus, if I’m not mistaken, configfs
gadget doesn’t even allow it to be expressed.

¹ I have no example failure though.  Conclusion that legacy/multi has
  a bug is based purely on me reading the code.

Acked-by: Alan Stern 
Signed-off-by: Michal Nazarewicz 
Tested-by: Ivaylo Dimitrov 
Cc: Alan Stern 
Signed-off-by: Felipe Balbi 
[ kamal: backport to 4.2-stable: fsg_bind() decl 'common';
  no change to nokia.c (no fsg_opts) ]
Signed-off-by: Kamal Mostafa 

squash! 334f47b
---
 drivers/usb/gadget/function/f_mass_storage.c | 37 
 drivers/usb/gadget/function/f_mass_storage.h |  2 --
 drivers/usb/gadget/legacy/acm_ms.c   |  4 ---
 drivers/usb/gadget/legacy/mass_storage.c |  4 ---
 drivers/usb/gadget/legacy/multi.c| 12 -
 5 files changed, 16 insertions(+), 43 deletions(-)

diff --git a/drivers/usb/gadget/function/f_mass_storage.c 
b/drivers/usb/gadget/function/f_mass_storage.c
index eb80e97..74f8f36 100644
--- a/drivers/usb/gadget/function/f_mass_storage.c
+++ b/drivers/usb/gadget/function/f_mass_storage.c
@@ -3037,25 +3037,6 @@ void fsg_common_set_inquiry_string(struct fsg_common 
*common, const char *vn,
 }
 EXPORT_SYMBOL_GPL(fsg_common_set_inquiry_string);
 
-int fsg_common_run_thread(struct fsg_common *common)
-{
-   common->state = FSG_STATE_IDLE;
-   /* Tell the thread to start working */
-   common->thread_task =
-   kthread_create(fsg_main_thread, common, "file-storage");
-   if (IS_ERR(common->thread_task)) {
-   common->state = FSG_STATE_TERMINATED;
-   return PTR_ERR(common->thread_task);
-   }
-
-   DBG(common, "I/O thread pid: %d\n", task_pid_nr(common->thread_task));
-
-   wake_up_process(common->thread_task);
-
-   return 0;
-}
-EXPORT_SYMBOL_GPL(fsg_common_run_thread);
-
 static void fsg_common_release(struct kref *ref)
 {
struct fsg_common *common = container_of(ref, struct fsg_common, ref);
@@ -3064,6 +3045,7 @@ static void fsg_common_release(struct kref *ref)
if (common->state != FSG_STATE_TERMINATED) {
raise_exception(common, FSG_STATE_EXIT);
wait_for_completion(&common->thread_notifier);
+   common->thread_task = NULL;
}
 
if (likely(common->luns)) {
@@ -3097,6 +3079,7 @@ static void fsg_common_release(struct kref *ref)
 static int fsg_bind(struct usb_configuration *c, struct usb_function *f)
 {
struct fsg_dev  *fsg = fsg_from_func(f);
+   struct fsg_common   *common = fsg->common;
struct usb_gadget   *gadget = c->cdev->gadget;
int i;
struct usb_ep   *ep;
@@ -3111,9 +3094,21 @@ static int fsg_bind(struct usb_configuration *c, struct 
usb_function *f)
if (ret)
return ret;
fsg_common_set_inquiry_string(fsg->common, NULL, NULL);
-   ret = fsg_common_run_thread(fsg->common);
-   if (ret)
+   }
+
+   if (!common->thread_task) {
+   common->state = FSG_STATE_IDLE;
+   common->thread_task =
+   kthread_create(fsg_main_thread, common, "file-storage");
+   if (IS_ERR(common->thread_task)) {
+   int ret = PTR_ERR(common->thread_task);
+   common->thread_task = NULL;
+   common->state = FSG_STATE_TERMINATED;
return ret;
+   }
+   DBG(common, "I/O thread pid: %d\n",
+   task_pid_nr(common->thread_task));
+   wake_up_process(common->thread_task);
}
 
fsg->gadget = gadget;
diff --git a/drivers/usb/

[PATCH 3.19.y-ckt 14/99] Bluetooth: vhci: Fix race at creating hci device

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Takashi Iwai 

commit c7c999cb18da88a881e10e07f0724ad0bfaff770 upstream.

hci_vhci driver creates a hci device object dynamically upon each
HCI_VENDOR_PKT write.  Although it checks the already created object
and returns an error, it's still racy and may build multiple hci_dev
objects concurrently when parallel writes are performed, as the device
tracks only a single hci_dev object.

This patch introduces a mutex to protect against the concurrent device
creations.

Signed-off-by: Takashi Iwai 
Signed-off-by: Marcel Holtmann 
Signed-off-by: Kamal Mostafa 
---
 drivers/bluetooth/hci_vhci.c | 23 +--
 1 file changed, 17 insertions(+), 6 deletions(-)

diff --git a/drivers/bluetooth/hci_vhci.c b/drivers/bluetooth/hci_vhci.c
index 5b9ac12..eaa646d 100644
--- a/drivers/bluetooth/hci_vhci.c
+++ b/drivers/bluetooth/hci_vhci.c
@@ -50,6 +50,7 @@ struct vhci_data {
wait_queue_head_t read_wait;
struct sk_buff_head readq;
 
+   struct mutex open_mutex;
struct delayed_work open_timeout;
 };
 
@@ -95,12 +96,15 @@ static int vhci_send_frame(struct hci_dev *hdev, struct 
sk_buff *skb)
return 0;
 }
 
-static int vhci_create_device(struct vhci_data *data, __u8 opcode)
+static int __vhci_create_device(struct vhci_data *data, __u8 opcode)
 {
struct hci_dev *hdev;
struct sk_buff *skb;
__u8 dev_type;
 
+   if (data->hdev)
+   return -EBADFD;
+
/* bits 0-1 are dev_type (BR/EDR or AMP) */
dev_type = opcode & 0x03;
 
@@ -159,6 +163,17 @@ static int vhci_create_device(struct vhci_data *data, __u8 
opcode)
return 0;
 }
 
+static int vhci_create_device(struct vhci_data *data, __u8 opcode)
+{
+   int err;
+
+   mutex_lock(&data->open_mutex);
+   err = __vhci_create_device(data, opcode);
+   mutex_unlock(&data->open_mutex);
+
+   return err;
+}
+
 static inline ssize_t vhci_get_user(struct vhci_data *data,
struct iov_iter *from)
 {
@@ -199,11 +214,6 @@ static inline ssize_t vhci_get_user(struct vhci_data *data,
case HCI_VENDOR_PKT:
cancel_delayed_work_sync(&data->open_timeout);
 
-   if (data->hdev) {
-   kfree_skb(skb);
-   return -EBADFD;
-   }
-
opcode = *((__u8 *) skb->data);
skb_pull(skb, 1);
 
@@ -328,6 +338,7 @@ static int vhci_open(struct inode *inode, struct file *file)
skb_queue_head_init(&data->readq);
init_waitqueue_head(&data->read_wait);
 
+   mutex_init(&data->open_mutex);
INIT_DELAYED_WORK(&data->open_timeout, vhci_open_timeout);
 
file->private_data = data;
-- 
2.7.4



[PATCH 3.19.y-ckt 19/99] ath9k: Fix LED polarity for some Mini PCI AR9220 MB92 cards.

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: "Vittorio Gambaletta (VittGam)" 

commit 0f9edcdd88a993914fa1d1dc369b35dc503979db upstream.

The Wistron DNMA-92 and Compex WLM200NX have inverted LED polarity
(active high instead of active low).

The same PCI Subsystem ID is used by both cards, which are based on
the same Atheros MB92 design.

Cc: 
Cc: 
Cc: 
Signed-off-by: Vittorio Gambaletta 
Signed-off-by: Kalle Valo 
Signed-off-by: Kamal Mostafa 
---
 drivers/net/wireless/ath/ath9k/pci.c | 10 ++
 1 file changed, 10 insertions(+)

diff --git a/drivers/net/wireless/ath/ath9k/pci.c 
b/drivers/net/wireless/ath/ath9k/pci.c
index f009b5b..b9ec8c7 100644
--- a/drivers/net/wireless/ath/ath9k/pci.c
+++ b/drivers/net/wireless/ath/ath9k/pci.c
@@ -28,6 +28,16 @@ static const struct pci_device_id ath_pci_id_table[] = {
{ PCI_VDEVICE(ATHEROS, 0x0024) }, /* PCI-E */
{ PCI_VDEVICE(ATHEROS, 0x0027) }, /* PCI   */
{ PCI_VDEVICE(ATHEROS, 0x0029) }, /* PCI   */
+
+#ifdef CONFIG_ATH9K_PCOEM
+   /* Mini PCI AR9220 MB92 cards: Compex WLM200NX, Wistron DNMA-92 */
+   { PCI_DEVICE_SUB(PCI_VENDOR_ID_ATHEROS,
+0x0029,
+PCI_VENDOR_ID_ATHEROS,
+0x2096),
+ .driver_data = ATH9K_PCI_LED_ACT_HI },
+#endif
+
{ PCI_VDEVICE(ATHEROS, 0x002A) }, /* PCI-E */
 
 #ifdef CONFIG_ATH9K_PCOEM
-- 
2.7.4



[PATCH 3.19.y-ckt 18/99] ath9k: Add a module parameter to invert LED polarity.

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: "Vittorio Gambaletta (VittGam)" 

commit cd84042ce9040ad038e958bc67a46fcfc015c736 upstream.

The LED can be active high instead of active low on some hardware.

Add the led_active_high module parameter. It defaults to -1 to obey
platform data as before.

Setting the parameter to 1 or 0 will force the LED respectively
active high or active low.

Cc: 
Cc: 
Cc: 
Signed-off-by: Vittorio Gambaletta 
Signed-off-by: Kalle Valo 
Signed-off-by: Kamal Mostafa 
---
 drivers/net/wireless/ath/ath9k/init.c | 7 +++
 1 file changed, 7 insertions(+)

diff --git a/drivers/net/wireless/ath/ath9k/init.c 
b/drivers/net/wireless/ath/ath9k/init.c
index a218a00..d7c1a02 100644
--- a/drivers/net/wireless/ath/ath9k/init.c
+++ b/drivers/net/wireless/ath/ath9k/init.c
@@ -49,6 +49,10 @@ int led_blink;
 module_param_named(blink, led_blink, int, 0444);
 MODULE_PARM_DESC(blink, "Enable LED blink on activity");
 
+static int ath9k_led_active_high = -1;
+module_param_named(led_active_high, ath9k_led_active_high, int, 0444);
+MODULE_PARM_DESC(led_active_high, "Invert LED polarity");
+
 static int ath9k_btcoex_enable;
 module_param_named(btcoex_enable, ath9k_btcoex_enable, int, 0444);
 MODULE_PARM_DESC(btcoex_enable, "Enable wifi-BT coexistence");
@@ -582,6 +586,9 @@ static int ath9k_init_softc(u16 devid, struct ath_softc *sc,
if (ret)
return ret;
 
+   if (ath9k_led_active_high != -1)
+   ah->config.led_active_high = ath9k_led_active_high == 1;
+
/*
 * Enable WLAN/BT RX Antenna diversity only when:
 *
-- 
2.7.4



[PATCH 3.19.y-ckt 11/99] scsi: Add intermediate STARGET_REMOVE state to scsi_target_state

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Johannes Thumshirn 

commit f05795d3d771f30a7bdc3a138bf714b06d42aa95 upstream.

Add intermediate STARGET_REMOVE state to scsi_target_state to avoid
running into the BUG_ON() in scsi_target_reap(). The STARGET_REMOVE
state is only valid in the path from scsi_remove_target() to
scsi_target_destroy() indicating this target is going to be removed.

This re-fixes the problem introduced in commits bc3f02a795d3 ("[SCSI]
scsi_remove_target: fix softlockup regression on hot remove") and
40998193560d ("scsi: restart list search after unlock in
scsi_remove_target") in a more comprehensive way.

[mkp: Included James' fix for scsi_target_destroy()]

Signed-off-by: Johannes Thumshirn 
Fixes: 40998193560dab6c3ce8d25f4fa58a23e252ef38
Reported-by: Sergey Senozhatsky 
Tested-by: Sergey Senozhatsky 
Reviewed-by: Ewan D. Milne 
Reviewed-by: Hannes Reinecke 
Reviewed-by: James Bottomley 
Signed-off-by: Martin K. Petersen 
Signed-off-by: Kamal Mostafa 
---
 drivers/scsi/scsi_scan.c   | 1 +
 drivers/scsi/scsi_sysfs.c  | 2 ++
 include/scsi/scsi_device.h | 1 +
 3 files changed, 4 insertions(+)

diff --git a/drivers/scsi/scsi_scan.c b/drivers/scsi/scsi_scan.c
index cc662c9..2255b3a 100644
--- a/drivers/scsi/scsi_scan.c
+++ b/drivers/scsi/scsi_scan.c
@@ -325,6 +325,7 @@ static void scsi_target_destroy(struct scsi_target *starget)
struct Scsi_Host *shost = dev_to_shost(dev->parent);
unsigned long flags;
 
+   BUG_ON(starget->state == STARGET_DEL);
starget->state = STARGET_DEL;
transport_destroy_device(dev);
spin_lock_irqsave(shost->host_lock, flags);
diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c
index 168a509..c6126e0 100644
--- a/drivers/scsi/scsi_sysfs.c
+++ b/drivers/scsi/scsi_sysfs.c
@@ -1155,11 +1155,13 @@ restart:
spin_lock_irqsave(shost->host_lock, flags);
list_for_each_entry(starget, &shost->__targets, siblings) {
if (starget->state == STARGET_DEL ||
+   starget->state == STARGET_REMOVE ||
starget == last_target)
continue;
if (starget->dev.parent == dev || &starget->dev == dev) {
kref_get(&starget->reap_ref);
last_target = starget;
+   starget->state = STARGET_REMOVE;
spin_unlock_irqrestore(shost->host_lock, flags);
__scsi_remove_target(starget);
scsi_target_reap(starget);
diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h
index 3a4edd1..faa527d 100644
--- a/include/scsi/scsi_device.h
+++ b/include/scsi/scsi_device.h
@@ -263,6 +263,7 @@ struct scsi_dh_data {
 enum scsi_target_state {
STARGET_CREATED = 1,
STARGET_RUNNING,
+   STARGET_REMOVE,
STARGET_DEL,
 };
 
-- 
2.7.4



[PATCH 3.19.y-ckt 32/99] USB: leave LPM alone if possible when binding/unbinding interface drivers

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Alan Stern 

commit 6fb650d43da3e7054984dc548eaa88765a94d49f upstream.

When a USB driver is bound to an interface (either through probing or
by claiming it) or is unbound from an interface, the USB core always
disables Link Power Management during the transition and then
re-enables it afterward.  The reason is because the driver might want
to prevent hub-initiated link power transitions, in which case the HCD
would have to recalculate the various LPM parameters.  This
recalculation takes place when LPM is re-enabled and the new
parameters are sent to the device and its parent hub.

However, if the driver does not want to prevent hub-initiated link
power transitions then none of this work is necessary.  The parameters
don't need to be recalculated, and LPM doesn't need to be disabled and
re-enabled.

It turns out that disabling and enabling LPM can be time-consuming,
enough so that it interferes with user programs that want to claim and
release interfaces rapidly via usbfs.  Since the usbfs kernel driver
doesn't set the disable_hub_initiated_lpm flag, we can speed things up
and get the user programs to work by leaving LPM alone whenever the
flag isn't set.

And while we're improving the way disable_hub_initiated_lpm gets used,
let's also fix its kerneldoc.

Signed-off-by: Alan Stern 
Tested-by: Matthew Giassa 
CC: Mathias Nyman 
Signed-off-by: Greg Kroah-Hartman 
Signed-off-by: Kamal Mostafa 
---
 drivers/usb/core/driver.c | 40 +++-
 include/linux/usb.h   |  2 +-
 2 files changed, 24 insertions(+), 18 deletions(-)

diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c
index 7792c0e..68323c2 100644
--- a/drivers/usb/core/driver.c
+++ b/drivers/usb/core/driver.c
@@ -283,7 +283,7 @@ static int usb_probe_interface(struct device *dev)
struct usb_device *udev = interface_to_usbdev(intf);
const struct usb_device_id *id;
int error = -ENODEV;
-   int lpm_disable_error;
+   int lpm_disable_error = -ENODEV;
 
dev_dbg(dev, "%s\n", __func__);
 
@@ -331,12 +331,14 @@ static int usb_probe_interface(struct device *dev)
 * setting during probe, that should also be fine.  usb_set_interface()
 * will attempt to disable LPM, and fail if it can't disable it.
 */
-   lpm_disable_error = usb_unlocked_disable_lpm(udev);
-   if (lpm_disable_error && driver->disable_hub_initiated_lpm) {
-   dev_err(&intf->dev, "%s Failed to disable LPM for driver %s\n.",
-   __func__, driver->name);
-   error = lpm_disable_error;
-   goto err;
+   if (driver->disable_hub_initiated_lpm) {
+   lpm_disable_error = usb_unlocked_disable_lpm(udev);
+   if (lpm_disable_error) {
+   dev_err(&intf->dev, "%s Failed to disable LPM for 
driver %s\n.",
+   __func__, driver->name);
+   error = lpm_disable_error;
+   goto err;
+   }
}
 
/* Carry out a deferred switch to altsetting 0 */
@@ -386,7 +388,8 @@ static int usb_unbind_interface(struct device *dev)
struct usb_interface *intf = to_usb_interface(dev);
struct usb_host_endpoint *ep, **eps = NULL;
struct usb_device *udev;
-   int i, j, error, r, lpm_disable_error;
+   int i, j, error, r;
+   int lpm_disable_error = -ENODEV;
 
intf->condition = USB_INTERFACE_UNBINDING;
 
@@ -394,12 +397,13 @@ static int usb_unbind_interface(struct device *dev)
udev = interface_to_usbdev(intf);
error = usb_autoresume_device(udev);
 
-   /* Hub-initiated LPM policy may change, so attempt to disable LPM until
+   /* If hub-initiated LPM policy may change, attempt to disable LPM until
 * the driver is unbound.  If LPM isn't disabled, that's fine because it
 * wouldn't be enabled unless all the bound interfaces supported
 * hub-initiated LPM.
 */
-   lpm_disable_error = usb_unlocked_disable_lpm(udev);
+   if (driver->disable_hub_initiated_lpm)
+   lpm_disable_error = usb_unlocked_disable_lpm(udev);
 
/*
 * Terminate all URBs for this interface unless the driver
@@ -502,7 +506,7 @@ int usb_driver_claim_interface(struct usb_driver *driver,
struct device *dev;
struct usb_device *udev;
int retval = 0;
-   int lpm_disable_error;
+   int lpm_disable_error = -ENODEV;
 
if (!iface)
return -ENODEV;
@@ -519,12 +523,14 @@ int usb_driver_claim_interface(struct usb_driver *driver,
 
iface->condition = USB_INTERFACE_BOUND;

[PATCH 3.19.y-ckt 25/99] aacraid: Relinquish CPU during timeout wait

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Raghava Aditya Renukunta 

commit 07beca2be24cc710461c0b131832524c9ee08910 upstream.

aac_fib_send has a special function case for initial commands during
driver initialization using wait < 0(pseudo sync mode). In this case,
the command does not sleep but rather spins checking for timeout.This
loop is calls cpu_relax() in an attempt to allow other processes/threads
to use the CPU, but this function does not relinquish the CPU and so the
command will hog the processor. This was observed in a KDUMP
"crashkernel" and that prevented the "command thread" (which is
responsible for completing the command from being timed out) from
starting because it could not get the CPU.

Fixed by replacing "cpu_relax()" call with "schedule()"
Signed-off-by: Raghava Aditya Renukunta 
Reviewed-by: Johannes Thumshirn 
Signed-off-by: Martin K. Petersen 
Signed-off-by: Kamal Mostafa 
---
 drivers/scsi/aacraid/commsup.c | 8 
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/scsi/aacraid/commsup.c b/drivers/scsi/aacraid/commsup.c
index 6b32ddc..06f73d2 100644
--- a/drivers/scsi/aacraid/commsup.c
+++ b/drivers/scsi/aacraid/commsup.c
@@ -590,10 +590,10 @@ int aac_fib_send(u16 command, struct fib *fibptr, 
unsigned long size,
}
return -EFAULT;
}
-   /* We used to udelay() here but that absorbed
-* a CPU when a timeout occured. Not very
-* useful. */
-   cpu_relax();
+   /*
+* Allow other processes / CPUS to use core
+*/
+   schedule();
}
} else if (down_interruptible(&fibptr->event_wait)) {
/* Do nothing ... satisfy
-- 
2.7.4



[PATCH 3.19.y-ckt 03/99] drm/i915: Fix race condition in intel_dp_destroy_mst_connector()

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Lyude 

commit 1f7717552ef1306be3b7ed28c66c6eff550e3a23 upstream.

After unplugging a DP MST display from the system, we have to go through
and destroy all of the DRM connectors associated with it since none of
them are valid anymore. Unfortunately, intel_dp_destroy_mst_connector()
doesn't do a good enough job of ensuring that throughout the destruction
process that no modesettings can be done with the connectors. As it is
right now, intel_dp_destroy_mst_connector() works like this:

* Take all modeset locks
* Clear the configuration of the crtc on the connector, if there is one
* Drop all modeset locks, this is required because of circular
  dependency issues that arise with trying to remove the connector from
  sysfs with modeset locks held
* Unregister the connector
* Take all modeset locks, again
* Do the rest of the required cleaning for destroying the connector
* Finally drop all modeset locks for good

This only works sometimes. During the destruction process, it's very
possible that a userspace application will attempt to do a modesetting
using the connector. When we drop the modeset locks, an ioctl handler
such as drm_mode_setcrtc has the oppurtunity to take all of the modeset
locks from us. When this happens, one thing leads to another and
eventually we end up committing a mode with the non-existent connector:

[drm:intel_dp_link_training_clock_recovery [i915]] *ERROR* failed to 
enable link training
[drm:intel_dp_aux_ch] dp_aux_ch timeout status 0x7cf0001f
[drm:intel_dp_start_link_train [i915]] *ERROR* failed to start channel 
equalization
[drm:intel_dp_aux_ch] dp_aux_ch timeout status 0x7cf0001f
[drm:intel_mst_pre_enable_dp [i915]] *ERROR* failed to allocate vcpi

And in some cases, such as with the T460s using an MST dock, this
results in breaking modesetting and/or panicking the system.

To work around this, we now unregister the connector at the very
beginning of intel_dp_destroy_mst_connector(), grab all the modesetting
locks, and then hold them until we finish the rest of the function.

Signed-off-by: Lyude 
Signed-off-by: Rob Clark 
Reviewed-by: Ville Syrjälä 
Signed-off-by: Daniel Vetter 
Link: 
http://patchwork.freedesktop.org/patch/msgid/1458155884-13877-1-git-send-email-cp...@redhat.com
[ kamal: backport to 4.2-stable: context ]
Signed-off-by: Kamal Mostafa 
---
 drivers/gpu/drm/i915/intel_dp_mst.c | 7 +++
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c 
b/drivers/gpu/drm/i915/intel_dp_mst.c
index 7f8c6a6..8e3f113 100644
--- a/drivers/gpu/drm/i915/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/intel_dp_mst.c
@@ -430,14 +430,13 @@ static void intel_dp_destroy_mst_connector(struct 
drm_dp_mst_topology_mgr *mgr,
 {
struct intel_connector *intel_connector = to_intel_connector(connector);
struct drm_device *dev = connector->dev;
-   /* need to nuke the connector */
-   mutex_lock(&dev->mode_config.mutex);
-   intel_connector_dpms(connector, DRM_MODE_DPMS_OFF);
-   mutex_unlock(&dev->mode_config.mutex);
 
intel_connector->unregister(intel_connector);
 
+   /* need to nuke the connector */
mutex_lock(&dev->mode_config.mutex);
+   intel_connector_dpms(connector, DRM_MODE_DPMS_OFF);
+
intel_connector_remove_from_fbdev(intel_connector);
drm_connector_cleanup(connector);
mutex_unlock(&dev->mode_config.mutex);
-- 
2.7.4



[PATCH 3.19.y-ckt 37/99] USB: serial: cp210x: fix hardware flow-control disable

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Konstantin Shkolnyy 

commit a377f9e906af4df9071ba8ddba60188cb4013d93 upstream.

A bug in the CRTSCTS handling caused RTS to alternate between

CRTSCTS=0 => "RTS is transmit active signal" and
CRTSCTS=1 => "RTS is used for receive flow control"

instead of

CRTSCTS=0 => "RTS is statically active" and
CRTSCTS=1 => "RTS is used for receive flow control"

This only happened after first having enabled CRTSCTS.

Signed-off-by: Konstantin Shkolnyy 
Fixes: 39a66b8d22a3 ("[PATCH] USB: CP2101 Add support for flow control")
[johan: reword commit message ]
Signed-off-by: Johan Hovold 
[ kamal: backport to 4.2-stable: context ]
Signed-off-by: Kamal Mostafa 
---
 drivers/usb/serial/cp210x.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/usb/serial/cp210x.c b/drivers/usb/serial/cp210x.c
index a2b43a6..c33dfff 100644
--- a/drivers/usb/serial/cp210x.c
+++ b/drivers/usb/serial/cp210x.c
@@ -784,7 +784,7 @@ static void cp210x_set_termios(struct tty_struct *tty,
} else {
modem_ctl[0] &= ~0x7B;
modem_ctl[0] |= 0x01;
-   modem_ctl[1] |= 0x40;
+   modem_ctl[1] = 0x40;
dev_dbg(dev, "%s - flow control = NONE\n", __func__);
}
 
-- 
2.7.4



[PATCH 3.19.y-ckt 39/99] ext4: address UBSAN warning in mb_find_order_for_block()

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Nicolai Stange 

commit b5cb316cdf3a3f5f6125412b0f6065185240cfdc upstream.

Currently, in mb_find_order_for_block(), there's a loop like the following:

  while (order <= e4b->bd_blkbits + 1) {
...
bb += 1 << (e4b->bd_blkbits - order);
  }

Note that the updated bb is used in the loop's next iteration only.

However, at the last iteration, that is at order == e4b->bd_blkbits + 1,
the shift count becomes negative (c.f. C99 6.5.7(3)) and UBSAN reports

  UBSAN: Undefined behaviour in fs/ext4/mballoc.c:1281:11
  shift exponent -1 is negative
  [...]
  Call Trace:
   [] dump_stack+0xbc/0x117
   [] ? _atomic_dec_and_lock+0x169/0x169
   [] ubsan_epilogue+0xd/0x4e
   [] __ubsan_handle_shift_out_of_bounds+0x1fb/0x254
   [] ? __ubsan_handle_load_invalid_value+0x158/0x158
   [] ? ext4_mb_generate_from_pa+0x590/0x590
   [] ? ext4_read_block_bitmap_nowait+0x598/0xe80
   [] mb_find_order_for_block+0x1ce/0x240
   [...]

Unless compilers start to do some fancy transformations (which at least
GCC 6.0.0 doesn't currently do), the issue is of cosmetic nature only: the
such calculated value of bb is never used again.

Silence UBSAN by introducing another variable, bb_incr, holding the next
increment to apply to bb and adjust that one by right shifting it by one
position per loop iteration.

Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=114701
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=112161

Signed-off-by: Nicolai Stange 
Signed-off-by: Theodore Ts'o 
Signed-off-by: Kamal Mostafa 
---
 fs/ext4/mballoc.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
index 4126048..900500c 100644
--- a/fs/ext4/mballoc.c
+++ b/fs/ext4/mballoc.c
@@ -1248,6 +1248,7 @@ static void ext4_mb_unload_buddy(struct ext4_buddy *e4b)
 static int mb_find_order_for_block(struct ext4_buddy *e4b, int block)
 {
int order = 1;
+   int bb_incr = 1 << (e4b->bd_blkbits - 1);
void *bb;
 
BUG_ON(e4b->bd_bitmap == e4b->bd_buddy);
@@ -1260,7 +1261,8 @@ static int mb_find_order_for_block(struct ext4_buddy 
*e4b, int block)
/* this block is part of buddy of order 'order' */
return order;
}
-   bb += 1 << (e4b->bd_blkbits - order);
+   bb += bb_incr;
+   bb_incr >>= 1;
order++;
}
return 0;
-- 
2.7.4



[PATCH 3.19.y-ckt 34/99] USB: serial: option: add more ZTE device ids

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: lei liu 

commit f0d09463c59c2d764a6c6d492cbe6d2c77f27153 upstream.

More ZTE device ids.

Signed-off-by: lei liu 
[properly sort them - gregkh]
Signed-off-by: Greg Kroah-Hartman 
Signed-off-by: Johan Hovold 
Signed-off-by: Kamal Mostafa 
---
 drivers/usb/serial/option.c | 75 -
 1 file changed, 74 insertions(+), 1 deletion(-)

diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
index cda2fe3..7cac76e 100644
--- a/drivers/usb/serial/option.c
+++ b/drivers/usb/serial/option.c
@@ -1630,7 +1630,79 @@ static const struct usb_device_id option_ids[] = {
.driver_info = (kernel_ulong_t)&net_intf3_blacklist },
{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0178, 0xff, 0xff, 
0xff),
.driver_info = (kernel_ulong_t)&net_intf3_blacklist },
-   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffe9, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff42, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff43, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff44, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff45, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff46, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff47, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff48, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff49, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff4a, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff4b, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff4c, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff4d, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff4e, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff4f, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff50, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff51, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff52, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff53, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff54, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff55, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff56, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff57, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff58, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff59, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff5a, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff5b, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff5c, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff5d, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff5e, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff5f, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff60, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff61, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff62, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff63, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff64, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff65, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff66, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff67, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff68, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff69, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff6a, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff6b, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff6c, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff6d, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff6e, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff6f, 0xff, 

[PATCH 3.19.y-ckt 41/99] arm64: Ensure pmd_present() returns false after pmd_mknotpresent()

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Catalin Marinas 

commit 5bb1cc0ff9a6b68871970737e6c4c16919928d8b upstream.

Currently, pmd_present() only checks for a non-zero value, returning
true even after pmd_mknotpresent() (which only clears the type bits).
This patch converts pmd_present() to using pte_present(), similar to the
other pmd_*() checks. As a side effect, it will return true for
PROT_NONE mappings, though they are not yet used by the kernel with
transparent huge pages.

For consistency, also change pmd_mknotpresent() to only clear the
PMD_SECT_VALID bit, even though the PMD_TABLE_BIT is already 0 for block
mappings (no functional change). The unused PMD_SECT_PROT_NONE
definition is removed as transparent huge pages use the pte page prot
values.

Fixes: 9c7e535fcc17 ("arm64: mm: Route pmd thp functions through pte 
equivalents")
Reviewed-by: Will Deacon 
Signed-off-by: Catalin Marinas 
Signed-off-by: Will Deacon 
Signed-off-by: Kamal Mostafa 
---
 arch/arm64/include/asm/pgtable-hwdef.h | 1 -
 arch/arm64/include/asm/pgtable.h   | 4 ++--
 2 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/arch/arm64/include/asm/pgtable-hwdef.h 
b/arch/arm64/include/asm/pgtable-hwdef.h
index 88174e0..31e6b04 100644
--- a/arch/arm64/include/asm/pgtable-hwdef.h
+++ b/arch/arm64/include/asm/pgtable-hwdef.h
@@ -77,7 +77,6 @@
  * Section
  */
 #define PMD_SECT_VALID (_AT(pmdval_t, 1) << 0)
-#define PMD_SECT_PROT_NONE (_AT(pmdval_t, 1) << 58)
 #define PMD_SECT_USER  (_AT(pmdval_t, 1) << 6) /* AP[1] */
 #define PMD_SECT_RDONLY(_AT(pmdval_t, 1) << 7) /* 
AP[2] */
 #define PMD_SECT_S (_AT(pmdval_t, 3) << 8)
diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h
index 210d632..6e2a33e 100644
--- a/arch/arm64/include/asm/pgtable.h
+++ b/arch/arm64/include/asm/pgtable.h
@@ -279,6 +279,7 @@ void pmdp_splitting_flush(struct vm_area_struct *vma, 
unsigned long address,
 #endif /* CONFIG_HAVE_RCU_TABLE_FREE */
 #endif /* CONFIG_TRANSPARENT_HUGEPAGE */
 
+#define pmd_present(pmd)   pte_present(pmd_pte(pmd))
 #define pmd_dirty(pmd) pte_dirty(pmd_pte(pmd))
 #define pmd_young(pmd) pte_young(pmd_pte(pmd))
 #define pmd_wrprotect(pmd) pte_pmd(pte_wrprotect(pmd_pte(pmd)))
@@ -287,7 +288,7 @@ void pmdp_splitting_flush(struct vm_area_struct *vma, 
unsigned long address,
 #define pmd_mkwrite(pmd)   pte_pmd(pte_mkwrite(pmd_pte(pmd)))
 #define pmd_mkdirty(pmd)   pte_pmd(pte_mkdirty(pmd_pte(pmd)))
 #define pmd_mkyoung(pmd)   pte_pmd(pte_mkyoung(pmd_pte(pmd)))
-#define pmd_mknotpresent(pmd)  (__pmd(pmd_val(pmd) & ~PMD_TYPE_MASK))
+#define pmd_mknotpresent(pmd)  (__pmd(pmd_val(pmd) & ~PMD_SECT_VALID))
 
 #define __HAVE_ARCH_PMD_WRITE
 #define pmd_write(pmd) pte_write(pmd_pte(pmd))
@@ -326,7 +327,6 @@ extern pgprot_t phys_mem_access_prot(struct file *file, 
unsigned long pfn,
 unsigned long size, pgprot_t vma_prot);
 
 #define pmd_none(pmd)  (!pmd_val(pmd))
-#define pmd_present(pmd)   (pmd_val(pmd))
 
 #define pmd_bad(pmd)   (!(pmd_val(pmd) & 2))
 
-- 
2.7.4



[PATCH 3.19.y-ckt 28/99] MIPS: ath79: make bootconsole wait for both THRE and TEMT

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Matthias Schiffer 

commit f5b556c94c8490d42fea79d7b4ae0ecbc291e69d upstream.

This makes the ath79 bootconsole behave the same way as the generic 8250
bootconsole.

Also waiting for TEMT (transmit buffer is empty) instead of just THRE
(transmit buffer is not full) ensures that all characters have been
transmitted before the real serial driver starts reconfiguring the serial
controller (which would sometimes result in garbage being transmitted.)
This change does not cause a visible performance loss.

In addition, this seems to fix a hang observed in certain configurations on
many AR7xxx/AR9xxx SoCs during autoconfig of the real serial driver.

A more complete follow-up patch will disable 8250 autoconfig for ath79
altogether (the serial controller is detected as a 16550A, which is not
fully compatible with the ath79 serial, and the autoconfig may lead to
undefined behavior on ath79.)

Signed-off-by: Matthias Schiffer 
Signed-off-by: Greg Kroah-Hartman 
Signed-off-by: Kamal Mostafa 
---
 arch/mips/ath79/early_printk.c | 6 --
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/arch/mips/ath79/early_printk.c b/arch/mips/ath79/early_printk.c
index b955faf..d1adc59 100644
--- a/arch/mips/ath79/early_printk.c
+++ b/arch/mips/ath79/early_printk.c
@@ -31,13 +31,15 @@ static inline void prom_putchar_wait(void __iomem *reg, u32 
mask, u32 val)
} while (1);
 }
 
+#define BOTH_EMPTY (UART_LSR_TEMT | UART_LSR_THRE)
+
 static void prom_putchar_ar71xx(unsigned char ch)
 {
void __iomem *base = (void __iomem *)(KSEG1ADDR(AR71XX_UART_BASE));
 
-   prom_putchar_wait(base + UART_LSR * 4, UART_LSR_THRE, UART_LSR_THRE);
+   prom_putchar_wait(base + UART_LSR * 4, BOTH_EMPTY, BOTH_EMPTY);
__raw_writel(ch, base + UART_TX * 4);
-   prom_putchar_wait(base + UART_LSR * 4, UART_LSR_THRE, UART_LSR_THRE);
+   prom_putchar_wait(base + UART_LSR * 4, BOTH_EMPTY, BOTH_EMPTY);
 }
 
 static void prom_putchar_ar933x(unsigned char ch)
-- 
2.7.4



[PATCH 3.19.y-ckt 22/99] usb: core: hub: hub_port_init lock controller instead of bus

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Chris Bainbridge 

commit feb26ac31a2a5cb88d86680d9a94916a6343e9e6 upstream.

The XHCI controller presents two USB buses to the system - one for USB2
and one for USB3. The hub init code (hub_port_init) is reentrant but
only locks one bus per thread, leading to a race condition failure when
two threads attempt to simultaneously initialise a USB2 and USB3 device:

[8.034843] xhci_hcd :00:14.0: Timeout while waiting for setup device 
command
[   13.183701] usb 3-3: device descriptor read/all, error -110

On a test system this failure occurred on 6% of all boots.

The call traces at the point of failure are:

Call Trace:
 [] schedule+0x37/0x90
 [] usb_kill_urb+0x8d/0xd0
 [] ? wake_up_atomic_t+0x30/0x30
 [] usb_start_wait_urb+0xbe/0x150
 [] usb_control_msg+0xbc/0xf0
 [] hub_port_init+0x51e/0xb70
 [] hub_event+0x817/0x1570
 [] process_one_work+0x1ff/0x620
 [] ? process_one_work+0x15f/0x620
 [] worker_thread+0x64/0x4b0
 [] ? rescuer_thread+0x390/0x390
 [] kthread+0x105/0x120
 [] ? kthread_create_on_node+0x200/0x200
 [] ret_from_fork+0x3f/0x70
 [] ? kthread_create_on_node+0x200/0x200

Call Trace:
 [] xhci_setup_device+0x53d/0xa40
 [] xhci_address_device+0xe/0x10
 [] hub_port_init+0x1bf/0xb70
 [] ? trace_hardirqs_on+0xd/0x10
 [] hub_event+0x817/0x1570
 [] process_one_work+0x1ff/0x620
 [] ? process_one_work+0x15f/0x620
 [] worker_thread+0x64/0x4b0
 [] ? rescuer_thread+0x390/0x390
 [] kthread+0x105/0x120
 [] ? kthread_create_on_node+0x200/0x200
 [] ret_from_fork+0x3f/0x70
 [] ? kthread_create_on_node+0x200/0x200

Which results from the two call chains:

hub_port_init
 usb_get_device_descriptor
  usb_get_descriptor
   usb_control_msg
usb_internal_control_msg
 usb_start_wait_urb
  usb_submit_urb / wait_for_completion_timeout / usb_kill_urb

hub_port_init
 hub_set_address
  xhci_address_device
   xhci_setup_device

Mathias Nyman explains the current behaviour violates the XHCI spec:

 hub_port_reset() will end up moving the corresponding xhci device slot
 to default state.

 As hub_port_reset() is called several times in hub_port_init() it
 sounds reasonable that we could end up with two threads having their
 xhci device slots in default state at the same time, which according to
 xhci 4.5.3 specs still is a big no no:

 "Note: Software shall not transition more than one Device Slot to the
  Default State at a time"

 So both threads fail at their next task after this.
 One fails to read the descriptor, and the other fails addressing the
 device.

Fix this in hub_port_init by locking the USB controller (instead of an
individual bus) to prevent simultaneous initialisation of both buses.

Fixes: 638139eb95d2 ("usb: hub: allow to process more usb hub events in 
parallel")
Link: https://lkml.org/lkml/2016/2/8/312
Link: https://lkml.org/lkml/2016/2/4/748
Signed-off-by: Chris Bainbridge 
Acked-by: Mathias Nyman 
Signed-off-by: Greg Kroah-Hartman 
Signed-off-by: Kamal Mostafa 
---
 drivers/usb/core/hcd.c  | 15 +--
 drivers/usb/core/hub.c  |  8 
 include/linux/usb.h |  3 +--
 include/linux/usb/hcd.h |  1 +
 4 files changed, 19 insertions(+), 8 deletions(-)

diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
index 1c1385e..e47cfcd 100644
--- a/drivers/usb/core/hcd.c
+++ b/drivers/usb/core/hcd.c
@@ -915,7 +915,7 @@ static void usb_bus_init (struct usb_bus *bus)
bus->bandwidth_allocated = 0;
bus->bandwidth_int_reqs  = 0;
bus->bandwidth_isoc_reqs = 0;
-   mutex_init(&bus->usb_address0_mutex);
+   mutex_init(&bus->devnum_next_mutex);
 
INIT_LIST_HEAD (&bus->bus_list);
 }
@@ -2446,6 +2446,14 @@ struct usb_hcd *usb_create_shared_hcd(const struct 
hc_driver *driver,
return NULL;
}
if (primary_hcd == NULL) {
+   hcd->address0_mutex = kmalloc(sizeof(*hcd->address0_mutex),
+   GFP_KERNEL);
+   if (!hcd->address0_mutex) {
+   kfree(hcd);
+   dev_dbg(dev, "hcd address0 mutex alloc failed\n");
+   return NULL;
+   }
+   mutex_init(hcd->address0_mutex);
hcd->bandwidth_mutex = kmalloc(sizeof(*hcd->bandwidth_mutex),
GFP_KERNEL);
if (!hcd->bandwidth_mutex) {
@@ -2457,6 +2465,7 @@ struct usb_hcd *usb_create_shared_hcd(const struct 
hc_driver *driver,
dev_set_drvdata(dev, hcd);
} else {
mutex_lock(&usb_port_peer_mutex);
+   hcd->address0_mutex = primary_hcd->address0_mutex;
hcd->bandwidth_mutex = primary_hcd->bandwidth_mutex;
hcd->primary_hcd = primary_hcd;
p

[PATCH 3.19.y-ckt 30/99] thunderbolt: Fix double free of drom buffer

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Andreas Noever 

commit 2ffa9a5d76a75abbc1f95c17959fced666095bdd upstream.

If tb_drom_read() fails, sw->drom is freed but not set to NULL.  sw->drom
is then freed again in the error path of tb_switch_alloc().

The bug can be triggered by unplugging a thunderbolt device shortly after
it is detected by the thunderbolt driver.

Clear sw->drom if tb_drom_read() fails.

[bhelgaas: add Fixes:, stable versions of interest]
Fixes: 343fcb8c70d7 ("thunderbolt: Fix nontrivial endpoint devices.")
Signed-off-by: Andreas Noever 
Signed-off-by: Bjorn Helgaas 
CC: Lukas Wunner 
Signed-off-by: Kamal Mostafa 
---
 drivers/thunderbolt/eeprom.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/thunderbolt/eeprom.c b/drivers/thunderbolt/eeprom.c
index 0dde34e..545c60c 100644
--- a/drivers/thunderbolt/eeprom.c
+++ b/drivers/thunderbolt/eeprom.c
@@ -444,6 +444,7 @@ int tb_drom_read(struct tb_switch *sw)
return tb_drom_parse_entries(sw);
 err:
kfree(sw->drom);
+   sw->drom = NULL;
return -EIO;
 
 }
-- 
2.7.4



[PATCH 3.19.y-ckt 10/99] [media] media: v4l2-compat-ioctl32: fix missing reserved field copy in put_v4l2_create32

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Tiffany Lin 

commit baf43c6eace43868e490f18560287fa3481b2159 upstream.

In v4l2-compliance utility, test VIDIOC_CREATE_BUFS will check whether reserved
filed of v4l2_create_buffers filled with zero
Reserved field is filled with zero in v4l_create_bufs.
This patch copy reserved field of v4l2_create_buffer from kernel space to user
space

Signed-off-by: Tiffany Lin 
Signed-off-by: Hans Verkuil 
Signed-off-by: Mauro Carvalho Chehab 
Signed-off-by: Kamal Mostafa 
---
 drivers/media/v4l2-core/v4l2-compat-ioctl32.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c 
b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
index 73138a3..da9883a 100644
--- a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
+++ b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
@@ -259,7 +259,8 @@ static int put_v4l2_format32(struct v4l2_format *kp, struct 
v4l2_format32 __user
 static int put_v4l2_create32(struct v4l2_create_buffers *kp, struct 
v4l2_create_buffers32 __user *up)
 {
if (!access_ok(VERIFY_WRITE, up, sizeof(struct v4l2_create_buffers32)) 
||
-   copy_to_user(up, kp, offsetof(struct v4l2_create_buffers32, 
format)))
+   copy_to_user(up, kp, offsetof(struct v4l2_create_buffers32, 
format)) ||
+   copy_to_user(up->reserved, kp->reserved, sizeof(kp->reserved)))
return -EFAULT;
return __put_v4l2_format32(&kp->format, &up->format);
 }
-- 
2.7.4



[PATCH 3.19.y-ckt 40/99] ext4: silence UBSAN in ext4_mb_init()

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Nicolai Stange 

commit 935244cd54b86ca46e69bc6604d2adfb1aec2d42 upstream.

Currently, in ext4_mb_init(), there's a loop like the following:

  do {
...
offset += 1 << (sb->s_blocksize_bits - i);
i++;
  } while (i <= sb->s_blocksize_bits + 1);

Note that the updated offset is used in the loop's next iteration only.

However, at the last iteration, that is at i == sb->s_blocksize_bits + 1,
the shift count becomes equal to (unsigned)-1 > 31 (c.f. C99 6.5.7(3))
and UBSAN reports

  UBSAN: Undefined behaviour in fs/ext4/mballoc.c:2621:15
  shift exponent 4294967295 is too large for 32-bit type 'int'
  [...]
  Call Trace:
   [] dump_stack+0xbc/0x117
   [] ? _atomic_dec_and_lock+0x169/0x169
   [] ubsan_epilogue+0xd/0x4e
   [] __ubsan_handle_shift_out_of_bounds+0x1fb/0x254
   [] ? __ubsan_handle_load_invalid_value+0x158/0x158
   [] ? kmem_cache_alloc+0x101/0x390
   [] ? ext4_mb_init+0x13b/0xfd0
   [] ? create_cache+0x57/0x1f0
   [] ? create_cache+0x11a/0x1f0
   [] ? mutex_lock+0x38/0x60
   [] ? mutex_unlock+0x1b/0x50
   [] ? put_online_mems+0x5b/0xc0
   [] ? kmem_cache_create+0x117/0x2c0
   [] ext4_mb_init+0xc49/0xfd0
   [...]

Observe that the mentioned shift exponent, 4294967295, equals (unsigned)-1.

Unless compilers start to do some fancy transformations (which at least
GCC 6.0.0 doesn't currently do), the issue is of cosmetic nature only: the
such calculated value of offset is never used again.

Silence UBSAN by introducing another variable, offset_incr, holding the
next increment to apply to offset and adjust that one by right shifting it
by one position per loop iteration.

Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=114701
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=112161

Signed-off-by: Nicolai Stange 
Signed-off-by: Theodore Ts'o 
Signed-off-by: Kamal Mostafa 
---
 fs/ext4/mballoc.c | 6 --
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
index 900500c..5b58e26 100644
--- a/fs/ext4/mballoc.c
+++ b/fs/ext4/mballoc.c
@@ -2555,7 +2555,7 @@ int ext4_mb_init(struct super_block *sb)
 {
struct ext4_sb_info *sbi = EXT4_SB(sb);
unsigned i, j;
-   unsigned offset;
+   unsigned offset, offset_incr;
unsigned max;
int ret;
 
@@ -2584,11 +2584,13 @@ int ext4_mb_init(struct super_block *sb)
 
i = 1;
offset = 0;
+   offset_incr = 1 << (sb->s_blocksize_bits - 1);
max = sb->s_blocksize << 2;
do {
sbi->s_mb_offsets[i] = offset;
sbi->s_mb_maxs[i] = max;
-   offset += 1 << (sb->s_blocksize_bits - i);
+   offset += offset_incr;
+   offset_incr = offset_incr >> 1;
max = max >> 1;
i++;
} while (i <= sb->s_blocksize_bits + 1);
-- 
2.7.4



[PATCH 3.19.y-ckt 38/99] ext4: fix oops on corrupted filesystem

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Jan Kara 

commit 74177f55b70e2f2be770dd28684dd6d17106a4ba upstream.

When filesystem is corrupted in the right way, it can happen
ext4_mark_iloc_dirty() in ext4_orphan_add() returns error and we
subsequently remove inode from the in-memory orphan list. However this
deletion is done with list_del(&EXT4_I(inode)->i_orphan) and thus we
leave i_orphan list_head with a stale content. Later we can look at this
content causing list corruption, oops, or other issues. The reported
trace looked like:

WARNING: CPU: 0 PID: 46 at lib/list_debug.c:53 __list_del_entry+0x6b/0x100()
list_del corruption, 61c1d6e0->next is LIST_POISON1
00100100)
CPU: 0 PID: 46 Comm: ext4.exe Not tainted 4.1.0-rc4+ #250
Stack:
 60462947 62219960 602ede24 62219960
 602ede24 603ca293 622198f0 602f02eb
 62219950 6002c12c 62219900 601b4d6b
Call Trace:
 [<6005769c>] ? vprintk_emit+0x2dc/0x5c0
 [<602ede24>] ? printk+0x0/0x94
 [<600190bc>] show_stack+0xdc/0x1a0
 [<602ede24>] ? printk+0x0/0x94
 [<602ede24>] ? printk+0x0/0x94
 [<602f02eb>] dump_stack+0x2a/0x2c
 [<6002c12c>] warn_slowpath_common+0x9c/0xf0
 [<601b4d6b>] ? __list_del_entry+0x6b/0x100
 [<6002c254>] warn_slowpath_fmt+0x94/0xa0
 [<602f4d09>] ? __mutex_lock_slowpath+0x239/0x3a0
 [<6002c1c0>] ? warn_slowpath_fmt+0x0/0xa0
 [<60023ebf>] ? set_signals+0x3f/0x50
 [<600a205a>] ? kmem_cache_free+0x10a/0x180
 [<602f4e88>] ? mutex_lock+0x18/0x30
 [<601b4d6b>] __list_del_entry+0x6b/0x100
 [<601177ec>] ext4_orphan_del+0x22c/0x2f0
 [<6012f27c>] ? __ext4_journal_start_sb+0x2c/0xa0
 [<6010b973>] ? ext4_truncate+0x383/0x390
 [<6010bc8b>] ext4_write_begin+0x30b/0x4b0
 [<6001bb50>] ? copy_from_user+0x0/0xb0
 [<601aa840>] ? iov_iter_fault_in_readable+0xa0/0xc0
 [<60072c4f>] generic_perform_write+0xaf/0x1e0
 [<600c4166>] ? file_update_time+0x46/0x110
 [<60072f0f>] __generic_file_write_iter+0x18f/0x1b0
 [<6010030f>] ext4_file_write_iter+0x15f/0x470
 [<60094e10>] ? unlink_file_vma+0x0/0x70
 [<6009b180>] ? unlink_anon_vmas+0x0/0x260
 [<6008f169>] ? free_pgtables+0xb9/0x100
 [<600a6030>] __vfs_write+0xb0/0x130
 [<600a61d5>] vfs_write+0xa5/0x170
 [<600a63d6>] SyS_write+0x56/0xe0
 [<6029fcb0>] ? __libc_waitpid+0x0/0xa0
 [<6001b698>] handle_syscall+0x68/0x90
 [<6002633d>] userspace+0x4fd/0x600
 [<6002274f>] ? save_registers+0x1f/0x40
 [<60028bd7>] ? arch_prctl+0x177/0x1b0
 [<60017bd5>] fork_handler+0x85/0x90

Fix the problem by using list_del_init() as we always should with
i_orphan list.

Reported-by: Vegard Nossum 
Signed-off-by: Jan Kara 
Signed-off-by: Theodore Ts'o 
Signed-off-by: Kamal Mostafa 
---
 fs/ext4/namei.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c
index 5e8ae78..56ff014 100644
--- a/fs/ext4/namei.c
+++ b/fs/ext4/namei.c
@@ -2598,7 +2598,7 @@ int ext4_orphan_add(handle_t *handle, struct inode *inode)
 * list entries can cause panics at unmount time.
 */
mutex_lock(&sbi->s_orphan_lock);
-   list_del(&EXT4_I(inode)->i_orphan);
+   list_del_init(&EXT4_I(inode)->i_orphan);
mutex_unlock(&sbi->s_orphan_lock);
}
}
-- 
2.7.4



[PATCH 3.19.y-ckt 23/99] TTY: n_gsm, fix false positive WARN_ON

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Jiri Slaby 

commit d175feca89a1c162f60f4e3560ca7bc9437c65eb upstream.

Dmitry reported, that the current cleanup code in n_gsm can trigger a
warning:
WARNING: CPU: 2 PID: 24238 at drivers/tty/n_gsm.c:2048 
gsm_cleanup_mux+0x166/0x6b0()
...
Call Trace:
...
 [] warn_slowpath_null+0x29/0x30 kernel/panic.c:490
 [] gsm_cleanup_mux+0x166/0x6b0 drivers/tty/n_gsm.c:2048
 [] gsmld_open+0x5b7/0x7a0 drivers/tty/n_gsm.c:2386
 [] tty_ldisc_open.isra.2+0x78/0xd0 
drivers/tty/tty_ldisc.c:447
 [] tty_set_ldisc+0x1ca/0xa70 drivers/tty/tty_ldisc.c:567
 [< inline >] tiocsetd drivers/tty/tty_io.c:2650
 [] tty_ioctl+0xb2a/0x2140 drivers/tty/tty_io.c:2883
...

But this is a legal path when open fails to find a space in the
gsm_mux array and tries to clean up. So make it a standard test
instead of a warning.

Reported-by: "Dmitry Vyukov" 
Cc: Alan Cox 
Link: 
http://lkml.kernel.org/r/cact4y+bhqbab68vfi7romcs-z9zw3kqrvcq+bvhh1oa5nca...@mail.gmail.com
Fixes: 5a640967 ("tty/n_gsm.c: fix a memory leak in gsmld_open()")
Signed-off-by: Jiri Slaby 
Signed-off-by: Greg Kroah-Hartman 
Signed-off-by: Kamal Mostafa 
---
 drivers/tty/n_gsm.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c
index bce16e4..db37ee4 100644
--- a/drivers/tty/n_gsm.c
+++ b/drivers/tty/n_gsm.c
@@ -2045,7 +2045,9 @@ static void gsm_cleanup_mux(struct gsm_mux *gsm)
}
}
spin_unlock(&gsm_mux_lock);
-   WARN_ON(i == MAX_MUX);
+   /* open failed before registering => nothing to do */
+   if (i == MAX_MUX)
+   return;
 
/* In theory disconnecting DLCI 0 is sufficient but for some
   modems this is apparently not the case. */
-- 
2.7.4



[PATCH 3.19.y-ckt 21/99] btrfs: bugfix: handle FS_IOC32_{GETFLAGS,SETFLAGS,GETVERSION} in btrfs_ioctl

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Luke Dashjr 

commit 4c63c2454eff996c5e27991221106eb511f7db38 upstream.

32-bit ioctl uses these rather than the regular FS_IOC_* versions. They can
be handled in btrfs using the same code. Without this, 32-bit {ch,ls}attr
fail.

Signed-off-by: Luke Dashjr 
Reviewed-by: Josef Bacik 
Reviewed-by: David Sterba 
Signed-off-by: David Sterba 
Signed-off-by: Kamal Mostafa 
---
 fs/btrfs/ctree.h |  1 +
 fs/btrfs/file.c  |  2 +-
 fs/btrfs/inode.c |  2 +-
 fs/btrfs/ioctl.c | 21 +
 4 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h
index 0b18070..e958c24 100644
--- a/fs/btrfs/ctree.h
+++ b/fs/btrfs/ctree.h
@@ -3931,6 +3931,7 @@ extern const struct dentry_operations 
btrfs_dentry_operations;
 
 /* ioctl.c */
 long btrfs_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
+long btrfs_compat_ioctl(struct file *file, unsigned int cmd, unsigned long 
arg);
 void btrfs_update_iflags(struct inode *inode);
 void btrfs_inherit_iflags(struct inode *inode, struct inode *dir);
 int btrfs_is_empty_uuid(u8 *uuid);
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
index 1e54adf..fa408ea 100644
--- a/fs/btrfs/file.c
+++ b/fs/btrfs/file.c
@@ -2807,7 +2807,7 @@ const struct file_operations btrfs_file_operations = {
.fallocate  = btrfs_fallocate,
.unlocked_ioctl = btrfs_ioctl,
 #ifdef CONFIG_COMPAT
-   .compat_ioctl   = btrfs_ioctl,
+   .compat_ioctl   = btrfs_compat_ioctl,
 #endif
 };
 
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index b89c8b7..508a4ca 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -9622,7 +9622,7 @@ static const struct file_operations 
btrfs_dir_file_operations = {
.iterate= btrfs_real_readdir,
.unlocked_ioctl = btrfs_ioctl,
 #ifdef CONFIG_COMPAT
-   .compat_ioctl   = btrfs_ioctl,
+   .compat_ioctl   = btrfs_compat_ioctl,
 #endif
.release= btrfs_release_file,
.fsync  = btrfs_sync_file,
diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
index 230e205..cca16fb 100644
--- a/fs/btrfs/ioctl.c
+++ b/fs/btrfs/ioctl.c
@@ -5472,3 +5472,24 @@ long btrfs_ioctl(struct file *file, unsigned int
 
return -ENOTTY;
 }
+
+#ifdef CONFIG_COMPAT
+long btrfs_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
+{
+   switch (cmd) {
+   case FS_IOC32_GETFLAGS:
+   cmd = FS_IOC_GETFLAGS;
+   break;
+   case FS_IOC32_SETFLAGS:
+   cmd = FS_IOC_SETFLAGS;
+   break;
+   case FS_IOC32_GETVERSION:
+   cmd = FS_IOC_GETVERSION;
+   break;
+   default:
+   return -ENOIOCTLCMD;
+   }
+
+   return btrfs_ioctl(file, cmd, (unsigned long) compat_ptr(arg));
+}
+#endif
-- 
2.7.4



[PATCH 3.19.y-ckt 31/99] USB: serial: option: add support for Cinterion PH8 and AHxx

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Schemmel Hans-Christoph 

commit 444f94e9e625f6ec6bbe2cb232a6451c637f35a3 upstream.

Added support for Gemalto's Cinterion PH8 and AHxx products
with 2 RmNet Interfaces and products with 1 RmNet + 1 USB Audio interface.

In addition some minor renaming and formatting.

Signed-off-by: Hans-Christoph Schemmel 
[johan: sort current entries and trim trailing whitespace ]
Signed-off-by: Johan Hovold 
Signed-off-by: Kamal Mostafa 
---
 drivers/usb/serial/option.c | 26 --
 1 file changed, 20 insertions(+), 6 deletions(-)

diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
index 58ba560..cda2fe3 100644
--- a/drivers/usb/serial/option.c
+++ b/drivers/usb/serial/option.c
@@ -378,18 +378,22 @@ static void option_instat_callback(struct urb *urb);
 #define HAIER_PRODUCT_CE81B0x10f8
 #define HAIER_PRODUCT_CE1000x2009
 
-/* Cinterion (formerly Siemens) products */
-#define SIEMENS_VENDOR_ID  0x0681
-#define CINTERION_VENDOR_ID0x1e2d
+/* Gemalto's Cinterion products (formerly Siemens) */
+#define SIEMENS_VENDOR_ID  0x0681
+#define CINTERION_VENDOR_ID0x1e2d
+#define CINTERION_PRODUCT_HC25_MDMNET  0x0040
 #define CINTERION_PRODUCT_HC25_MDM 0x0047
-#define CINTERION_PRODUCT_HC25_MDMNET  0x0040
+#define CINTERION_PRODUCT_HC28_MDMNET  0x004A /* same for HC28J */
 #define CINTERION_PRODUCT_HC28_MDM 0x004C
-#define CINTERION_PRODUCT_HC28_MDMNET  0x004A /* same for HC28J */
 #define CINTERION_PRODUCT_EU3_E0x0051
 #define CINTERION_PRODUCT_EU3_P0x0052
 #define CINTERION_PRODUCT_PH8  0x0053
 #define CINTERION_PRODUCT_AHXX 0x0055
 #define CINTERION_PRODUCT_PLXX 0x0060
+#define CINTERION_PRODUCT_PH8_2RMNET   0x0082
+#define CINTERION_PRODUCT_PH8_AUDIO0x0083
+#define CINTERION_PRODUCT_AHXX_2RMNET  0x0084
+#define CINTERION_PRODUCT_AHXX_AUDIO   0x0085
 
 /* Olivetti products */
 #define OLIVETTI_VENDOR_ID 0x0b3c
@@ -649,6 +653,10 @@ static const struct option_blacklist_info 
telit_le922_blacklist_usbcfg3 = {
.reserved = BIT(1) | BIT(2) | BIT(3),
 };
 
+static const struct option_blacklist_info cinterion_rmnet2_blacklist = {
+   .reserved = BIT(4) | BIT(5),
+};
+
 static const struct usb_device_id option_ids[] = {
{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) },
{ USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) },
@@ -1732,7 +1740,13 @@ static const struct usb_device_id option_ids[] = {
{ USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, 
CINTERION_PRODUCT_AHXX, 0xff) },
{ USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_PLXX),
.driver_info = (kernel_ulong_t)&net_intf4_blacklist },
-   { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_HC28_MDM) }, 
+   { USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, 
CINTERION_PRODUCT_PH8_2RMNET, 0xff),
+   .driver_info = (kernel_ulong_t)&cinterion_rmnet2_blacklist },
+   { USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, 
CINTERION_PRODUCT_PH8_AUDIO, 0xff),
+   .driver_info = (kernel_ulong_t)&net_intf4_blacklist },
+   { USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, 
CINTERION_PRODUCT_AHXX_2RMNET, 0xff) },
+   { USB_DEVICE_INTERFACE_CLASS(CINTERION_VENDOR_ID, 
CINTERION_PRODUCT_AHXX_AUDIO, 0xff) },
+   { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_HC28_MDM) },
{ USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_HC28_MDMNET) },
{ USB_DEVICE(SIEMENS_VENDOR_ID, CINTERION_PRODUCT_HC25_MDM) },
{ USB_DEVICE(SIEMENS_VENDOR_ID, CINTERION_PRODUCT_HC25_MDMNET) },
-- 
2.7.4



[PATCH 3.19.y-ckt 26/99] aacraid: Fix for aac_command_thread hang

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Raghava Aditya Renukunta 

commit fc4bf75ea300a5e62a2419f89dd0e22189dd7ab7 upstream.

Typically under error conditions, it is possible for aac_command_thread()
to miss the wakeup from kthread_stop() and go back to sleep, causing it
to hang aac_shutdown.

In the observed scenario, the adapter is not functioning correctly and so
aac_fib_send() never completes (or time-outs depending on how it was
called). Shortly after aac_command_thread() starts it performs
aac_fib_send(SendHostTime) which hangs. When aac_probe_one
/aac_get_adapter_info send time outs, kthread_stop is called which breaks
the command thread out of it's hang.

The code will still go back to sleep in schedule_timeout() without
checking kthread_should_stop() so it causes aac_probe_one to hang until
the schedule_timeout() which is 30 minutes.

Fixed by: Adding another kthread_should_stop() before schedule_timeout()
Signed-off-by: Raghava Aditya Renukunta 
Reviewed-by: Johannes Thumshirn 
Signed-off-by: Martin K. Petersen 
Signed-off-by: Kamal Mostafa 
---
 drivers/scsi/aacraid/commsup.c | 4 
 1 file changed, 4 insertions(+)

diff --git a/drivers/scsi/aacraid/commsup.c b/drivers/scsi/aacraid/commsup.c
index 06f73d2..ce177a5 100644
--- a/drivers/scsi/aacraid/commsup.c
+++ b/drivers/scsi/aacraid/commsup.c
@@ -1921,6 +1921,10 @@ int aac_command_thread(void *data)
if (difference <= 0)
difference = 1;
set_current_state(TASK_INTERRUPTIBLE);
+
+   if (kthread_should_stop())
+   break;
+
schedule_timeout(difference);
 
if (kthread_should_stop())
-- 
2.7.4



[PATCH 3.19.y-ckt 24/99] arm/arm64: KVM: Enforce Break-Before-Make on Stage-2 page tables

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Marc Zyngier 

commit d4b9e0790aa764c0b01e18d4e8d33e93ba36d51f upstream.

The ARM architecture mandates that when changing a page table entry
from a valid entry to another valid entry, an invalid entry is first
written, TLB invalidated, and only then the new entry being written.

The current code doesn't respect this, directly writing the new
entry and only then invalidating TLBs. Let's fix it up.

Reported-by: Christoffer Dall 
Signed-off-by: Marc Zyngier 
Signed-off-by: Christoffer Dall 
Signed-off-by: Kamal Mostafa 
---
 arch/arm/kvm/mmu.c | 17 +++--
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/arch/arm/kvm/mmu.c b/arch/arm/kvm/mmu.c
index 966f8d2..b4c2d43 100644
--- a/arch/arm/kvm/mmu.c
+++ b/arch/arm/kvm/mmu.c
@@ -845,11 +845,14 @@ static int stage2_set_pmd_huge(struct kvm *kvm, struct 
kvm_mmu_memory_cache
VM_BUG_ON(pmd_present(*pmd) && pmd_pfn(*pmd) != pmd_pfn(*new_pmd));
 
old_pmd = *pmd;
-   kvm_set_pmd(pmd, *new_pmd);
-   if (pmd_present(old_pmd))
+   if (pmd_present(old_pmd)) {
+   pmd_clear(pmd);
kvm_tlb_flush_vmid_ipa(kvm, addr);
-   else
+   } else {
get_page(virt_to_page(pmd));
+   }
+
+   kvm_set_pmd(pmd, *new_pmd);
return 0;
 }
 
@@ -886,12 +889,14 @@ static int stage2_set_pte(struct kvm *kvm, struct 
kvm_mmu_memory_cache *cache,
 
/* Create 2nd stage page table mapping - Level 3 */
old_pte = *pte;
-   kvm_set_pte(pte, *new_pte);
-   if (pte_present(old_pte))
+   if (pte_present(old_pte)) {
+   kvm_set_pte(pte, __pte(0));
kvm_tlb_flush_vmid_ipa(kvm, addr);
-   else
+   } else {
get_page(virt_to_page(pte));
+   }
 
+   kvm_set_pte(pte, *new_pte);
return 0;
 }
 
-- 
2.7.4



[PATCH 3.19.y-ckt 17/99] crypto: s5p-sss - Fix missed interrupts when working with 8 kB blocks

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Krzysztof Kozlowski 

commit 79152e8d085fd64484afd473ef6830b45518acba upstream.

The tcrypt testing module on Exynos5422-based Odroid XU3/4 board failed on
testing 8 kB size blocks:

$ sudo modprobe tcrypt sec=1 mode=500
testing speed of async ecb(aes) (ecb-aes-s5p) encryption
test 0 (128 bit key, 16 byte blocks): 21971 operations in 1 seconds 
(351536 bytes)
test 1 (128 bit key, 64 byte blocks): 21731 operations in 1 seconds 
(1390784 bytes)
test 2 (128 bit key, 256 byte blocks): 21932 operations in 1 seconds 
(5614592 bytes)
test 3 (128 bit key, 1024 byte blocks): 21685 operations in 1 seconds 
(22205440 bytes)
test 4 (128 bit key, 8192 byte blocks):

This was caused by a race issue of missed BRDMA_DONE ("Block cipher
Receiving DMA") interrupt. Device starts processing the data in DMA mode
immediately after setting length of DMA block: receiving (FCBRDMAL) or
transmitting (FCBTDMAL). The driver sets these lengths from interrupt
handler through s5p_set_dma_indata() function (or xxx_setdata()).

However the interrupt handler was first dealing with receive buffer
(dma-unmap old, dma-map new, set receive block length which starts the
operation), then with transmit buffer and finally was clearing pending
interrupts (FCINTPEND). Because of the time window between setting
receive buffer length and clearing pending interrupts, the operation on
receive buffer could end already and driver would miss new interrupt.

User manual for Exynos5422 confirms in example code that setting DMA
block lengths should be the last operation.

The tcrypt hang could be also observed in following blocked-task dmesg:

INFO: task modprobe:258 blocked for more than 120 seconds.
  Not tainted 4.6.0-rc4-next-20160419-5-g9eac8b7b7753-dirty #42
"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
modprobeD c06b09d8 0   258256 0x
[] (__schedule) from [] (schedule+0x40/0xac)
[] (schedule) from [] (schedule_timeout+0x124/0x178)
[] (schedule_timeout) from [] (wait_for_common+0xb8/0x144)
[] (wait_for_common) from [] 
(test_acipher_speed+0x49c/0x740 [tcrypt])
[] (test_acipher_speed [tcrypt]) from [] 
(do_test+0x2240/0x30ec [tcrypt])
[] (do_test [tcrypt]) from [] (tcrypt_mod_init+0x48/0xa4 
[tcrypt])
[] (tcrypt_mod_init [tcrypt]) from [] 
(do_one_initcall+0x3c/0x16c)
[] (do_one_initcall) from [] (do_init_module+0x5c/0x1ac)
[] (do_init_module) from [] (load_module+0x1a30/0x1d08)
[] (load_module) from [] (SyS_finit_module+0x8c/0x98)
[] (SyS_finit_module) from [] (ret_fast_syscall+0x0/0x3c)

Fixes: a49e490c7a8a ("crypto: s5p-sss - add S5PV210 advanced crypto engine 
support")
Signed-off-by: Krzysztof Kozlowski 
Tested-by: Marek Szyprowski 
Signed-off-by: Herbert Xu 
[ kamal: backport to 4.2-stable: context ]
Signed-off-by: Kamal Mostafa 
---
 drivers/crypto/s5p-sss.c | 53 +++-
 1 file changed, 39 insertions(+), 14 deletions(-)

diff --git a/drivers/crypto/s5p-sss.c b/drivers/crypto/s5p-sss.c
index f214a87..8a9256b 100644
--- a/drivers/crypto/s5p-sss.c
+++ b/drivers/crypto/s5p-sss.c
@@ -313,43 +313,55 @@ static int s5p_set_indata(struct s5p_aes_dev *dev, struct 
scatterlist *sg)
return err;
 }
 
-static void s5p_aes_tx(struct s5p_aes_dev *dev)
+/*
+ * Returns true if new transmitting (output) data is ready and its
+ * address+length have to be written to device (by calling
+ * s5p_set_dma_outdata()). False otherwise.
+ */
+static bool s5p_aes_tx(struct s5p_aes_dev *dev)
 {
int err = 0;
+   bool ret = false;
 
s5p_unset_outdata(dev);
 
if (!sg_is_last(dev->sg_dst)) {
err = s5p_set_outdata(dev, sg_next(dev->sg_dst));
-   if (err) {
+   if (err)
s5p_aes_complete(dev, err);
-   return;
-   }
-
-   s5p_set_dma_outdata(dev, dev->sg_dst);
+   else
+   ret = true;
} else {
s5p_aes_complete(dev, err);
 
dev->busy = true;
tasklet_schedule(&dev->tasklet);
}
+
+   return ret;
 }
 
-static void s5p_aes_rx(struct s5p_aes_dev *dev)
+/*
+ * Returns true if new receiving (input) data is ready and its
+ * address+length have to be written to device (by calling
+ * s5p_set_dma_indata()). False otherwise.
+ */
+static bool s5p_aes_rx(struct s5p_aes_dev *dev)
 {
int err;
+   bool ret = false;
 
s5p_unset_indata(dev);
 
if (!sg_is_last(dev->sg_src)) {
err = s5p_set_indata(dev, sg_next(dev->sg_src));
-   if (err) {
+   if (err)
 

[PATCH 3.19.y-ckt 27/99] ext4: fix hang when processing corrupted orphaned inode list

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Theodore Ts'o 

commit c9eb13a9105e2e418f72e46a2b6da3f49e696902 upstream.

If the orphaned inode list contains inode #5, ext4_iget() returns a
bad inode (since the bootloader inode should never be referenced
directly).  Because of the bad inode, we end up processing the inode
repeatedly and this hangs the machine.

This can be reproduced via:

   mke2fs -t ext4 /tmp/foo.img 100
   debugfs -w -R "ssv last_orphan 5" /tmp/foo.img
   mount -o loop /tmp/foo.img /mnt

(But don't do this if you are using an unpatched kernel if you care
about the system staying functional.  :-)

This bug was found by the port of American Fuzzy Lop into the kernel
to find file system problems[1].  (Since it *only* happens if inode #5
shows up on the orphan list --- 3, 7, 8, etc. won't do it, it's not
surprising that AFL needed two hours before it found it.)

[1] 
http://events.linuxfoundation.org/sites/events/files/slides/AFL%20filesystem%20fuzzing%2C%20Vault%202016_0.pdf

Reported by: Vegard Nossum 
Signed-off-by: Theodore Ts'o 
Signed-off-by: Kamal Mostafa 
---
 fs/ext4/ialloc.c | 10 ++
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/fs/ext4/ialloc.c b/fs/ext4/ialloc.c
index ac644c3..cb6166a 100644
--- a/fs/ext4/ialloc.c
+++ b/fs/ext4/ialloc.c
@@ -1120,11 +1120,13 @@ struct inode *ext4_orphan_get(struct super_block *sb, 
unsigned long ino)
goto iget_failed;
 
/*
-* If the orphans has i_nlinks > 0 then it should be able to be
-* truncated, otherwise it won't be removed from the orphan list
-* during processing and an infinite loop will result.
+* If the orphans has i_nlinks > 0 then it should be able to
+* be truncated, otherwise it won't be removed from the orphan
+* list during processing and an infinite loop will result.
+* Similarly, it must not be a bad inode.
 */
-   if (inode->i_nlink && !ext4_can_truncate(inode))
+   if ((inode->i_nlink && !ext4_can_truncate(inode)) ||
+   is_bad_inode(inode))
goto bad_orphan;
 
if (NEXT_ORPHAN(inode) > max_ino)
-- 
2.7.4



[PATCH 3.19.y-ckt 29/99] QE-UART: add "fsl,t1040-ucc-uart" to of_device_id

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Zhao Qiang 

commit 11ca2b7ab432eb90906168c327733575e68d388f upstream.

New bindings use "fsl,t1040-ucc-uart" as the compatible for qe-uart.
So add it.

Signed-off-by: Zhao Qiang 
Signed-off-by: Greg Kroah-Hartman 
Signed-off-by: Kamal Mostafa 
---
 drivers/tty/serial/ucc_uart.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/tty/serial/ucc_uart.c b/drivers/tty/serial/ucc_uart.c
index 14d10fc..eb12cbe 100644
--- a/drivers/tty/serial/ucc_uart.c
+++ b/drivers/tty/serial/ucc_uart.c
@@ -1478,6 +1478,9 @@ static struct of_device_id ucc_uart_match[] = {
.type = "serial",
.compatible = "ucc_uart",
},
+   {
+   .compatible = "fsl,t1040-ucc-uart",
+   },
{},
 };
 MODULE_DEVICE_TABLE(of, ucc_uart_match);
-- 
2.7.4



[PATCH 3.19.y-ckt 68/99] mmc: mmc: Fix partition switch timeout for some eMMCs

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Adrian Hunter 

commit 1c447116d017a98c90f8f71c8c5a611e0aa42178 upstream.

Some eMMCs set the partition switch timeout too low.

Now typically eMMCs are considered a critical component (e.g. because
they store the root file system) and consequently are expected to be
reliable.  Thus we can neglect the use case where eMMCs can't switch
reliably and we might want a lower timeout to facilitate speedy
recovery.

Although we could employ a quirk for the cards that are affected (if
we could identify them all), as described above, there is little
benefit to having a low timeout, so instead simply set a minimum
timeout.

The minimum is set to 300ms somewhat arbitrarily - the examples that
have been seen had a timeout of 10ms but were sometimes taking 60-70ms.

Signed-off-by: Adrian Hunter 
Signed-off-by: Ulf Hansson 
Signed-off-by: Kamal Mostafa 
---
 drivers/mmc/core/mmc.c | 7 +++
 1 file changed, 7 insertions(+)

diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
index 7466ce0..acba480 100644
--- a/drivers/mmc/core/mmc.c
+++ b/drivers/mmc/core/mmc.c
@@ -329,6 +329,9 @@ static void mmc_manage_gp_partitions(struct mmc_card *card, 
u8 *ext_csd)
}
 }
 
+/* Minimum partition switch timeout in milliseconds */
+#define MMC_MIN_PART_SWITCH_TIME   300
+
 /*
  * Decode extended CSD.
  */
@@ -386,6 +389,10 @@ static int mmc_decode_ext_csd(struct mmc_card *card, u8 
*ext_csd)
 
/* EXT_CSD value is in units of 10ms, but we store in ms */
card->ext_csd.part_time = 10 * 
ext_csd[EXT_CSD_PART_SWITCH_TIME];
+   /* Some eMMC set the value too low so set a minimum */
+   if (card->ext_csd.part_time &&
+   card->ext_csd.part_time < MMC_MIN_PART_SWITCH_TIME)
+   card->ext_csd.part_time = MMC_MIN_PART_SWITCH_TIME;
 
/* Sleep / awake timeout in 100ns units */
if (sa_shift > 0 && sa_shift <= 0x17)
-- 
2.7.4



[PATCH 3.19.y-ckt 50/99] USB: serial: io_edgeport: fix memory leaks in probe error path

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Johan Hovold 

commit c8d62957d450cc1a22ce3242908709fe367ddc8e upstream.

URBs and buffers allocated in attach for Epic devices would never be
deallocated in case of a later probe error (e.g. failure to allocate
minor numbers) as disconnect is then never called.

Fix by moving deallocation to release and making sure that the
URBs are first unlinked.

Fixes: f9c99bb8b3a1 ("USB: usb-serial: replace shutdown with disconnect,
release")
Signed-off-by: Johan Hovold 
Acked-by: Greg Kroah-Hartman 
Signed-off-by: Kamal Mostafa 
---
 drivers/usb/serial/io_edgeport.c | 17 ++---
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/drivers/usb/serial/io_edgeport.c b/drivers/usb/serial/io_edgeport.c
index 1106e7d..1947ea0 100644
--- a/drivers/usb/serial/io_edgeport.c
+++ b/drivers/usb/serial/io_edgeport.c
@@ -2966,16 +2966,9 @@ static void edge_disconnect(struct usb_serial *serial)
 {
struct edgeport_serial *edge_serial = usb_get_serial_data(serial);
 
-   /* stop reads and writes on all ports */
-   /* free up our endpoint stuff */
if (edge_serial->is_epic) {
usb_kill_urb(edge_serial->interrupt_read_urb);
-   usb_free_urb(edge_serial->interrupt_read_urb);
-   kfree(edge_serial->interrupt_in_buffer);
-
usb_kill_urb(edge_serial->read_urb);
-   usb_free_urb(edge_serial->read_urb);
-   kfree(edge_serial->bulk_in_buffer);
}
 }
 
@@ -2988,6 +2981,16 @@ static void edge_release(struct usb_serial *serial)
 {
struct edgeport_serial *edge_serial = usb_get_serial_data(serial);
 
+   if (edge_serial->is_epic) {
+   usb_kill_urb(edge_serial->interrupt_read_urb);
+   usb_free_urb(edge_serial->interrupt_read_urb);
+   kfree(edge_serial->interrupt_in_buffer);
+
+   usb_kill_urb(edge_serial->read_urb);
+   usb_free_urb(edge_serial->read_urb);
+   kfree(edge_serial->bulk_in_buffer);
+   }
+
kfree(edge_serial);
 }
 
-- 
2.7.4



[PATCH 3.19.y-ckt 42/99] can: fix handling of unmodifiable configuration options

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Oliver Hartkopp 

commit bb208f144cf3f59d8f89a09a80efd04389718907 upstream.

As described in 'can: m_can: tag current CAN FD controllers as non-ISO'
(6cfda7fbebe) it is possible to define fixed configuration options by
setting the according bit in 'ctrlmode' and clear it in 'ctrlmode_supported'.
This leads to the incovenience that the fixed configuration bits can not be
passed by netlink even when they have the correct values (e.g. non-ISO, FD).

This patch fixes that issue and not only allows fixed set bit values to be set
again but now requires(!) to provide these fixed values at configuration time.
A valid CAN FD configuration consists of a nominal/arbitration bittiming, a
data bittiming and a control mode with CAN_CTRLMODE_FD set - which is now
enforced by a new can_validate() function. This fix additionally removed the
inconsistency that was prohibiting the support of 'CANFD-only' controller
drivers, like the RCar CAN FD.

For this reason a new helper can_set_static_ctrlmode() has been introduced to
provide a proper interface to handle static enabled CAN controller options.

Reported-by: Ramesh Shanmugasundaram 
Signed-off-by: Oliver Hartkopp 
Reviewed-by: Ramesh Shanmugasundaram  
Signed-off-by: Marc Kleine-Budde 
Signed-off-by: Kamal Mostafa 
---
 drivers/net/can/dev.c | 56 +++
 drivers/net/can/m_can/m_can.c |  2 +-
 include/linux/can/dev.h   | 22 +++--
 3 files changed, 73 insertions(+), 7 deletions(-)

diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c
index 8202ab3..8fa4d9e 100644
--- a/drivers/net/can/dev.c
+++ b/drivers/net/can/dev.c
@@ -693,11 +693,17 @@ int can_change_mtu(struct net_device *dev, int new_mtu)
/* allow change of MTU according to the CANFD ability of the device */
switch (new_mtu) {
case CAN_MTU:
+   /* 'CANFD-only' controllers can not switch to CAN_MTU */
+   if (priv->ctrlmode_static & CAN_CTRLMODE_FD)
+   return -EINVAL;
+
priv->ctrlmode &= ~CAN_CTRLMODE_FD;
break;
 
case CANFD_MTU:
-   if (!(priv->ctrlmode_supported & CAN_CTRLMODE_FD))
+   /* check for potential CANFD ability */
+   if (!(priv->ctrlmode_supported & CAN_CTRLMODE_FD) &&
+   !(priv->ctrlmode_static & CAN_CTRLMODE_FD))
return -EINVAL;
 
priv->ctrlmode |= CAN_CTRLMODE_FD;
@@ -779,6 +785,35 @@ static const struct nla_policy can_policy[IFLA_CAN_MAX + 
1] = {
= { .len = sizeof(struct can_bittiming_const) },
 };
 
+static int can_validate(struct nlattr *tb[], struct nlattr *data[])
+{
+   bool is_can_fd = false;
+
+   /* Make sure that valid CAN FD configurations always consist of
+* - nominal/arbitration bittiming
+* - data bittiming
+* - control mode with CAN_CTRLMODE_FD set
+*/
+
+   if (data[IFLA_CAN_CTRLMODE]) {
+   struct can_ctrlmode *cm = nla_data(data[IFLA_CAN_CTRLMODE]);
+
+   is_can_fd = cm->flags & cm->mask & CAN_CTRLMODE_FD;
+   }
+
+   if (is_can_fd) {
+   if (!data[IFLA_CAN_BITTIMING] || !data[IFLA_CAN_DATA_BITTIMING])
+   return -EOPNOTSUPP;
+   }
+
+   if (data[IFLA_CAN_DATA_BITTIMING]) {
+   if (!is_can_fd || !data[IFLA_CAN_BITTIMING])
+   return -EOPNOTSUPP;
+   }
+
+   return 0;
+}
+
 static int can_changelink(struct net_device *dev,
  struct nlattr *tb[], struct nlattr *data[])
 {
@@ -810,19 +845,31 @@ static int can_changelink(struct net_device *dev,
 
if (data[IFLA_CAN_CTRLMODE]) {
struct can_ctrlmode *cm;
+   u32 ctrlstatic;
+   u32 maskedflags;
 
/* Do not allow changing controller mode while running */
if (dev->flags & IFF_UP)
return -EBUSY;
cm = nla_data(data[IFLA_CAN_CTRLMODE]);
+   ctrlstatic = priv->ctrlmode_static;
+   maskedflags = cm->flags & cm->mask;
+
+   /* check whether provided bits are allowed to be passed */
+   if (cm->mask & ~(priv->ctrlmode_supported | ctrlstatic))
+   return -EOPNOTSUPP;
+
+   /* do not check for static fd-non-iso if 'fd' is disabled */
+   if (!(maskedflags & CAN_CTRLMODE_FD))
+   ctrlstatic &= ~CAN_CTRLMODE_FD_NON_ISO;
 
-   /* check whether changed bits are allowed to be modified */
-   if (cm->mask &a

[PATCH 3.19.y-ckt 72/99] drm/fb_helper: Fix references to dev->mode_config.num_connector

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Lyude 

commit 255f0e7c418ad95a4baeda017ae6182ba9b3c423 upstream.

During boot, MST hotplugs are generally expected (even if no physical
hotplugging occurs) and result in DRM's connector topology changing.
This means that using num_connector from the current mode configuration
can lead to the number of connectors changing under us. This can lead to
some nasty scenarios in fbcon:

- We allocate an array to the size of dev->mode_config.num_connectors.
- MST hotplug occurs, dev->mode_config.num_connectors gets incremented.
- We try to loop through each element in the array using the new value
  of dev->mode_config.num_connectors, and end up going out of bounds
  since dev->mode_config.num_connectors is now larger then the array we
  allocated.

fb_helper->connector_count however, will always remain consistent while
we do a modeset in fb_helper.

Note: This is just polish for 4.7, Dave Airlie's drm_connector
refcounting fixed these bugs for real. But it's good enough duct-tape
for stable kernel backporting, since backporting the refcounting
changes is way too invasive.

Signed-off-by: Lyude 
[danvet: Clarify why we need this. Also remove the now unused "dev"
local variable to appease gcc.]
Signed-off-by: Daniel Vetter 
Link: 
http://patchwork.freedesktop.org/patch/msgid/1463065021-18280-3-git-send-email-cp...@redhat.com
Signed-off-by: Kamal Mostafa 
---
 drivers/gpu/drm/drm_fb_helper.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
index dc386eb..5149726 100644
--- a/drivers/gpu/drm/drm_fb_helper.c
+++ b/drivers/gpu/drm/drm_fb_helper.c
@@ -1527,7 +1527,6 @@ static int drm_pick_crtcs(struct drm_fb_helper *fb_helper,
  int n, int width, int height)
 {
int c, o;
-   struct drm_device *dev = fb_helper->dev;
struct drm_connector *connector;
struct drm_connector_helper_funcs *connector_funcs;
struct drm_encoder *encoder;
@@ -1546,7 +1545,7 @@ static int drm_pick_crtcs(struct drm_fb_helper *fb_helper,
if (modes[n] == NULL)
return best_score;
 
-   crtcs = kzalloc(dev->mode_config.num_connector *
+   crtcs = kzalloc(fb_helper->connector_count *
sizeof(struct drm_fb_helper_crtc *), GFP_KERNEL);
if (!crtcs)
return best_score;
@@ -1592,7 +1591,7 @@ static int drm_pick_crtcs(struct drm_fb_helper *fb_helper,
if (score > best_score) {
best_score = score;
memcpy(best_crtcs, crtcs,
-  dev->mode_config.num_connector *
+  fb_helper->connector_count *
   sizeof(struct drm_fb_helper_crtc *));
}
}
-- 
2.7.4



[PATCH 3.19.y-ckt 48/99] mfd: omap-usb-tll: Fix scheduling while atomic BUG

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Roger Quadros 

commit b49b927f16acee626c56a1af4ab4cb062f75b5df upstream.

We shouldn't be calling clk_prepare_enable()/clk_prepare_disable()
in an atomic context.

Fixes the following issue:

[5.830970] ehci-omap: OMAP-EHCI Host Controller driver
[5.830974] driver_register 'ehci-omap'
[5.895849] driver_register 'wl1271_sdio'
[5.896870] BUG: scheduling while atomic: udevd/994/0x0002
[5.896876] 4 locks held by udevd/994:
[5.896904]  #0:  (&dev->mutex){..}, at: [] 
__driver_attach+0x60/0xac
[5.896923]  #1:  (&dev->mutex){..}, at: [] 
__driver_attach+0x70/0xac
[5.896946]  #2:  (tll_lock){+.+...}, at: [] 
omap_tll_enable+0x2c/0xd0
[5.896966]  #3:  (prepare_lock){+.+...}, at: [] 
clk_prepare_lock+0x48/0xe0
[5.897042] Modules linked in: wlcore_sdio(+) ehci_omap(+) dwc3_omap 
snd_soc_ts3a225e leds_is31fl319x bq27xxx_battery_i2c tsc2007 bq27xxx_battery 
bq2429x_charger ina2xx tca8418_keypad as5013 leds_tca6507 twl6040_vibra 
gpio_twl6040 bmp085_i2c(+) palmas_gpadc usb3503 palmas_pwrbutton bmg160_i2c(+) 
bmp085 bma150(+) bmg160_core bmp280 input_polldev snd_soc_omap_mcbsp 
snd_soc_omap_mcpdm snd_soc_omap snd_pcm_dmaengine
[5.897048] Preemption disabled at:[<  (null)>]   (null)
[5.897051]
[5.897059] CPU: 0 PID: 994 Comm: udevd Not tainted 4.6.0-rc5-letux+ #233
[5.897062] Hardware name: Generic OMAP5 (Flattened Device Tree)
[5.897076] [] (unwind_backtrace) from [] 
(show_stack+0x10/0x14)
[5.897087] [] (show_stack) from [] 
(dump_stack+0x88/0xc0)
[5.897099] [] (dump_stack) from [] 
(__schedule_bug+0xac/0xd0)
[5.897111] [] (__schedule_bug) from [] 
(__schedule+0x88/0x7e4)
[5.897120] [] (__schedule) from [] (schedule+0x9c/0xc0)
[5.897129] [] (schedule) from [] 
(schedule_preempt_disabled+0x14/0x20)
[5.897140] [] (schedule_preempt_disabled) from [] 
(mutex_lock_nested+0x258/0x43c)
[5.897150] [] (mutex_lock_nested) from [] 
(clk_prepare_lock+0x48/0xe0)
[5.897160] [] (clk_prepare_lock) from [] 
(clk_prepare+0x10/0x28)
[5.897169] [] (clk_prepare) from [] 
(omap_tll_enable+0x64/0xd0)
[5.897180] [] (omap_tll_enable) from [] 
(usbhs_runtime_resume+0x18/0x17c)
[5.897192] [] (usbhs_runtime_resume) from [] 
(pm_generic_runtime_resume+0x2c/0x40)
[5.897202] [] (pm_generic_runtime_resume) from [] 
(__rpm_callback+0x38/0x68)
[5.897210] [] (__rpm_callback) from [] 
(rpm_callback+0x70/0x88)
[5.897218] [] (rpm_callback) from [] 
(rpm_resume+0x4ec/0x7ec)
[5.897227] [] (rpm_resume) from [] 
(__pm_runtime_resume+0x4c/0x64)
[5.897236] [] (__pm_runtime_resume) from [] 
(driver_probe_device+0x30/0x70)
[5.897246] [] (driver_probe_device) from [] 
(__driver_attach+0x88/0xac)
[5.897256] [] (__driver_attach) from [] 
(bus_for_each_dev+0x50/0x84)
[5.897267] [] (bus_for_each_dev) from [] 
(bus_add_driver+0xcc/0x1e4)
[5.897276] [] (bus_add_driver) from [] 
(driver_register+0xac/0xf4)
[5.897286] [] (driver_register) from [] 
(do_one_initcall+0x100/0x1b8)
[5.897296] [] (do_one_initcall) from [] 
(do_init_module+0x58/0x1c0)
[5.897304] [] (do_init_module) from [] 
(SyS_finit_module+0x88/0x90)
[5.897313] [] (SyS_finit_module) from [] 
(ret_fast_syscall+0x0/0x1c)
[5.912697] [ cut here ]
[5.912711] WARNING: CPU: 0 PID: 994 at kernel/sched/core.c:2996 
_raw_spin_unlock+0x28/0x58
[5.912717] DEBUG_LOCKS_WARN_ON(val > preempt_count())

Reported-by: H. Nikolaus Schaller 
Tested-by: H. Nikolaus Schaller 
Signed-off-by: Roger Quadros 
Signed-off-by: Lee Jones 
Signed-off-by: Kamal Mostafa 
---
 drivers/mfd/omap-usb-tll.c | 13 +
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/drivers/mfd/omap-usb-tll.c b/drivers/mfd/omap-usb-tll.c
index b7b3e8e..c30290f 100644
--- a/drivers/mfd/omap-usb-tll.c
+++ b/drivers/mfd/omap-usb-tll.c
@@ -269,6 +269,8 @@ static int usbtll_omap_probe(struct platform_device *pdev)
 
if (IS_ERR(tll->ch_clk[i]))
dev_dbg(dev, "can't get clock : %s\n", clkname);
+   else
+   clk_prepare(tll->ch_clk[i]);
}
 
pm_runtime_put_sync(dev);
@@ -301,9 +303,12 @@ static int usbtll_omap_remove(struct platform_device *pdev)
tll_dev = NULL;
spin_unlock(&tll_lock);
 
-   for (i = 0; i < tll->nch; i++)
-   if (!IS_ERR(tll->ch_clk[i]))
+   for (i = 0; i < tll->nch; i++) {
+   if (!IS_ERR(tll->ch_clk[i])) {
+   clk_unprepare(tll->ch_clk[i]);
clk_put(tll->ch_clk[i]);
+   }
+   }
 
pm_runtime_disable(&pdev->dev);
return 0;
@@ -420,7 +425,7 @@ i

[PATCH 3.19.y-ckt 52/99] USB: serial: mxuport: fix use-after-free in probe error path

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Johan Hovold 

commit 9e45284984096314994777f27e1446dfbfd2f0d7 upstream.

The interface read and event URBs are submitted in attach, but were
never explicitly unlinked by the driver. Instead the URBs would have
been killed by usb-serial core on disconnect.

In case of a late probe error (e.g. due to failed minor allocation),
disconnect is never called and we could end up with active URBs for an
unbound interface. This in turn could lead to deallocated memory being
dereferenced in the completion callbacks.

Fixes: ee467a1f2066 ("USB: serial: add Moxa UPORT 12XX/14XX/16XX
driver")
Signed-off-by: Johan Hovold 
Acked-by: Greg Kroah-Hartman 
Signed-off-by: Kamal Mostafa 
---
 drivers/usb/serial/mxuport.c | 10 ++
 1 file changed, 10 insertions(+)

diff --git a/drivers/usb/serial/mxuport.c b/drivers/usb/serial/mxuport.c
index 460a406..d029b2f 100644
--- a/drivers/usb/serial/mxuport.c
+++ b/drivers/usb/serial/mxuport.c
@@ -1263,6 +1263,15 @@ static int mxuport_attach(struct usb_serial *serial)
return 0;
 }
 
+static void mxuport_release(struct usb_serial *serial)
+{
+   struct usb_serial_port *port0 = serial->port[0];
+   struct usb_serial_port *port1 = serial->port[1];
+
+   usb_serial_generic_close(port1);
+   usb_serial_generic_close(port0);
+}
+
 static int mxuport_open(struct tty_struct *tty, struct usb_serial_port *port)
 {
struct mxuport_port *mxport = usb_get_serial_port_data(port);
@@ -1365,6 +1374,7 @@ static struct usb_serial_driver mxuport_device = {
.probe  = mxuport_probe,
.port_probe = mxuport_port_probe,
.attach = mxuport_attach,
+   .release= mxuport_release,
.calc_num_ports = mxuport_calc_num_ports,
.open   = mxuport_open,
.close  = mxuport_close,
-- 
2.7.4



[PATCH 3.19.y-ckt 51/99] USB: serial: keyspan: fix use-after-free in probe error path

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Johan Hovold 

commit 35be1a71d70775e7bd7e45fa6d2897342ff4c9d2 upstream.

The interface instat and indat URBs were submitted in attach, but never
unlinked in release before deallocating the corresponding transfer
buffers.

In the case of a late probe error (e.g. due to failed minor allocation),
disconnect would not have been called before release, causing the
buffers to be freed while the URBs are still in use. We'd also end up
with active URBs for an unbound interface.

Fixes: f9c99bb8b3a1 ("USB: usb-serial: replace shutdown with disconnect,
release")
Signed-off-by: Johan Hovold 
Acked-by: Greg Kroah-Hartman 
Signed-off-by: Kamal Mostafa 
---
 drivers/usb/serial/keyspan.c | 4 
 1 file changed, 4 insertions(+)

diff --git a/drivers/usb/serial/keyspan.c b/drivers/usb/serial/keyspan.c
index e07b15e..7faa901 100644
--- a/drivers/usb/serial/keyspan.c
+++ b/drivers/usb/serial/keyspan.c
@@ -2376,6 +2376,10 @@ static void keyspan_release(struct usb_serial *serial)
 
s_priv = usb_get_serial_data(serial);
 
+   /* Make sure to unlink the URBs submitted in attach. */
+   usb_kill_urb(s_priv->instat_urb);
+   usb_kill_urb(s_priv->indat_urb);
+
usb_free_urb(s_priv->instat_urb);
usb_free_urb(s_priv->indat_urb);
usb_free_urb(s_priv->glocont_urb);
-- 
2.7.4



[PATCH 3.19.y-ckt 35/99] USB: serial: option: add even more ZTE device ids

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Lei Liu 

commit 74d2a91aec97ab832790c9398d320413ad185321 upstream.

Add even more ZTE device ids.

Signed-off-by: lei liu 
[johan: rebase and replace commit message ]
Signed-off-by: Johan Hovold 
Signed-off-by: Kamal Mostafa 
---
 drivers/usb/serial/option.c | 54 +
 1 file changed, 54 insertions(+)

diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
index 7cac76e..ab72ce3 100644
--- a/drivers/usb/serial/option.c
+++ b/drivers/usb/serial/option.c
@@ -1713,6 +1713,60 @@ static const struct usb_device_id option_ids[] = {
{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff92, 0xff, 0xff, 
0xff) },
{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff93, 0xff, 0xff, 
0xff) },
{ USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff94, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xff9f, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffa0, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffa1, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffa2, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffa3, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffa4, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffa5, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffa6, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffa7, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffa8, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffa9, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffaa, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffab, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffac, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffae, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffaf, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffb0, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffb1, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffb2, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffb3, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffb4, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffb5, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffb6, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffb7, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffb8, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffb9, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffba, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffbb, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffbc, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffbd, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffbe, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffbf, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffc0, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffc1, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffc2, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffc3, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffc4, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffc5, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffc6, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffc7, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffc8, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffc9, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffca, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffcb, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffcc, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffcd, 0xff, 0xff, 
0xff) },
+   { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffce, 0xff, 0xff, 
0

[PATCH 3.19.y-ckt 33/99] mcb: Fixed bar number assignment for the gdd

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Andreas Werner 

commit f75564d343010b025301d9548f2304f48eb25f01 upstream.

The bar number is found in reg2 within the gdd. Therefore
we need to change the assigment from reg1 to reg2 which
is the correct location.

Signed-off-by: Andreas Werner 
Fixes: '3764e82e5' drivers: Introduce MEN Chameleon Bus
Signed-off-by: Johannes Thumshirn 
Signed-off-by: Greg Kroah-Hartman 
Signed-off-by: Kamal Mostafa 
---
 drivers/mcb/mcb-parse.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/mcb/mcb-parse.c b/drivers/mcb/mcb-parse.c
index 0049269..b0155b0 100644
--- a/drivers/mcb/mcb-parse.c
+++ b/drivers/mcb/mcb-parse.c
@@ -57,7 +57,7 @@ static int chameleon_parse_gdd(struct mcb_bus *bus,
mdev->id = GDD_DEV(reg1);
mdev->rev = GDD_REV(reg1);
mdev->var = GDD_VAR(reg1);
-   mdev->bar = GDD_BAR(reg1);
+   mdev->bar = GDD_BAR(reg2);
mdev->group = GDD_GRP(reg2);
mdev->inst = GDD_INS(reg2);
 
-- 
2.7.4



[PATCH 3.19.y-ckt 46/99] MIPS: Reserve nosave data for hibernation

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Huacai Chen 

commit a95d069204e178f18476f5499abab0d0d9cbc32c upstream.

After commit 92923ca3aacef63c92d ("mm: meminit: only set page reserved
in the memblock region"), the MIPS hibernation is broken. Because pages
in nosave data section should be "reserved", but currently they aren't
set to "reserved" at initialization. This patch makes hibernation work
again.

Signed-off-by: Huacai Chen 
Cc: Aurelien Jarno 
Cc: Steven J . Hill 
Cc: Fuxin Zhang 
Cc: Zhangjin Wu 
Cc: linux-m...@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/12888/
Signed-off-by: Ralf Baechle 
Signed-off-by: Kamal Mostafa 
---
 arch/mips/kernel/setup.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/arch/mips/kernel/setup.c b/arch/mips/kernel/setup.c
index 0589290..c7d9271 100644
--- a/arch/mips/kernel/setup.c
+++ b/arch/mips/kernel/setup.c
@@ -685,6 +685,9 @@ static void __init arch_mem_init(char **cmdline_p)
for_each_memblock(reserved, reg)
if (reg->size != 0)
reserve_bootmem(reg->base, reg->size, BOOTMEM_DEFAULT);
+
+   reserve_bootmem_region(__pa_symbol(&__nosave_begin),
+   __pa_symbol(&__nosave_end)); /* Reserve for hibernation 
*/
 }
 
 static void __init resource_init(void)
-- 
2.7.4



[PATCH 3.19.y-ckt 49/99] USB: serial: io_edgeport: fix memory leaks in attach error path

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Johan Hovold 

commit c5c0c55598cefc826d6cfb0a417eeaee3631715c upstream.

Private data, URBs and buffers allocated for Epic devices during
attach were never released on errors (e.g. missing endpoints).

Fixes: 6e8cf7751f9f ("USB: add EPIC support to the io_edgeport driver")
Signed-off-by: Johan Hovold 
Acked-by: Greg Kroah-Hartman 
Signed-off-by: Kamal Mostafa 
---
 drivers/usb/serial/io_edgeport.c | 39 ---
 1 file changed, 28 insertions(+), 11 deletions(-)

diff --git a/drivers/usb/serial/io_edgeport.c b/drivers/usb/serial/io_edgeport.c
index c086697..1106e7d 100644
--- a/drivers/usb/serial/io_edgeport.c
+++ b/drivers/usb/serial/io_edgeport.c
@@ -2856,14 +2856,16 @@ static int edge_startup(struct usb_serial *serial)
/* not set up yet, so do it now */
edge_serial->interrupt_read_urb =
usb_alloc_urb(0, GFP_KERNEL);
-   if (!edge_serial->interrupt_read_urb)
-   return -ENOMEM;
+   if (!edge_serial->interrupt_read_urb) {
+   response = -ENOMEM;
+   break;
+   }
 
edge_serial->interrupt_in_buffer =
kmalloc(buffer_size, GFP_KERNEL);
if (!edge_serial->interrupt_in_buffer) {
-   
usb_free_urb(edge_serial->interrupt_read_urb);
-   return -ENOMEM;
+   response = -ENOMEM;
+   break;
}
edge_serial->interrupt_in_endpoint =
endpoint->bEndpointAddress;
@@ -2891,14 +2893,16 @@ static int edge_startup(struct usb_serial *serial)
/* not set up yet, so do it now */
edge_serial->read_urb =
usb_alloc_urb(0, GFP_KERNEL);
-   if (!edge_serial->read_urb)
-   return -ENOMEM;
+   if (!edge_serial->read_urb) {
+   response = -ENOMEM;
+   break;
+   }
 
edge_serial->bulk_in_buffer =
kmalloc(buffer_size, GFP_KERNEL);
if (!edge_serial->bulk_in_buffer) {
-   usb_free_urb(edge_serial->read_urb);
-   return -ENOMEM;
+   response = -ENOMEM;
+   break;
}
edge_serial->bulk_in_endpoint =
endpoint->bEndpointAddress;
@@ -2924,9 +2928,22 @@ static int edge_startup(struct usb_serial *serial)
}
}
 
-   if (!interrupt_in_found || !bulk_in_found || !bulk_out_found) {
-   dev_err(ddev, "Error - the proper endpoints were not 
found!\n");
-   return -ENODEV;
+   if (response || !interrupt_in_found || !bulk_in_found ||
+   !bulk_out_found) {
+   if (!response) {
+   dev_err(ddev, "expected endpoints not found\n");
+   response = -ENODEV;
+   }
+
+   usb_free_urb(edge_serial->interrupt_read_urb);
+   kfree(edge_serial->interrupt_in_buffer);
+
+   usb_free_urb(edge_serial->read_urb);
+   kfree(edge_serial->bulk_in_buffer);
+
+   kfree(edge_serial);
+
+   return response;
}
 
/* start interrupt read for this edgeport this interrupt will
-- 
2.7.4



[PATCH 3.19.y-ckt 53/99] USB: serial: quatech2: fix use-after-free in probe error path

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Johan Hovold 

commit 028c49f5e02a257c94129cd815f7c8485f51d4ef upstream.

The interface read URB is submitted in attach, but was only unlinked by
the driver at disconnect.

In case of a late probe error (e.g. due to failed minor allocation),
disconnect is never called and we would end up with active URBs for an
unbound interface. This in turn could lead to deallocated memory being
dereferenced in the completion callback.

Fixes: f7a33e608d9a ("USB: serial: add quatech2 usb to serial driver")
Signed-off-by: Johan Hovold 
Acked-by: Greg Kroah-Hartman 
Signed-off-by: Kamal Mostafa 
---
 drivers/usb/serial/quatech2.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/usb/serial/quatech2.c b/drivers/usb/serial/quatech2.c
index 504f5bf..b18974c 100644
--- a/drivers/usb/serial/quatech2.c
+++ b/drivers/usb/serial/quatech2.c
@@ -141,6 +141,7 @@ static void qt2_release(struct usb_serial *serial)
 
serial_priv = usb_get_serial_data(serial);
 
+   usb_kill_urb(serial_priv->read_urb);
usb_free_urb(serial_priv->read_urb);
kfree(serial_priv->read_buffer);
kfree(serial_priv);
-- 
2.7.4



[PATCH 3.19.y-ckt 59/99] arm64: cpuinfo: Missing NULL terminator in compat_hwcap_str

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Julien Grall 

commit f228b494e56d949be8d8ea09d4f973d1979201bf upstream.

The loop that browses the array compat_hwcap_str will stop when a NULL
is encountered, however NULL is missing at the end of array. This will
lead to overrun until a NULL is found somewhere in the following memory.
In reality, this works out because the compat_hwcap2_str array tends to
follow immediately in memory, and that *is* terminated correctly.
Furthermore, the unsigned int compat_elf_hwcap is checked before
printing each capability, so we end up doing the right thing because
the size of the two arrays is less than 32. Still, this is an obvious
mistake and should be fixed.

Note for backporting: commit 12d11817eaafa414 ("arm64: Move
/proc/cpuinfo handling code") moved this code in v4.4. Prior to that
commit, the same change should be made in arch/arm64/kernel/setup.c.

Fixes: 44b82b7700d0 "arm64: Fix up /proc/cpuinfo"
Signed-off-by: Julien Grall 
Signed-off-by: Will Deacon 
[ kamal: backport to 4.2-stable: applied to setup.c ]
Signed-off-by: Kamal Mostafa 
---
 arch/arm64/kernel/setup.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/arch/arm64/kernel/setup.c b/arch/arm64/kernel/setup.c
index 386acb8..07df3f7 100644
--- a/arch/arm64/kernel/setup.c
+++ b/arch/arm64/kernel/setup.c
@@ -491,7 +491,8 @@ static const char *compat_hwcap_str[] = {
"idivt",
"vfpd32",
"lpae",
-   "evtstrm"
+   "evtstrm",
+   NULL
 };
 
 static const char *compat_hwcap2_str[] = {
-- 
2.7.4



[PATCH 3.19.y-ckt 80/99] xfs: fix inode validity check in xfs_iflush_cluster

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Dave Chinner 

commit 51b07f30a71c27405259a0248206ed4e22adbee2 upstream.

Some careless idiot(*) wrote crap code in commit 1a3e8f3 ("xfs:
convert inode cache lookups to use RCU locking") back in late 2010,
and so xfs_iflush_cluster checks the wrong inode for whether it is
still valid under RCU protection. Fix it to lock and check the
correct inode.

(*) Careless-idiot: Dave Chinner 

Discovered-by: Brain Foster 
Signed-off-by: Dave Chinner 
Reviewed-by: Christoph Hellwig 
Signed-off-by: Dave Chinner 
Signed-off-by: Kamal Mostafa 
---
 fs/xfs/xfs_inode.c | 8 
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c
index 484c569..f037fe7 100644
--- a/fs/xfs/xfs_inode.c
+++ b/fs/xfs/xfs_inode.c
@@ -2956,13 +2956,13 @@ xfs_iflush_cluster(
 * We need to check under the i_flags_lock for a valid inode
 * here. Skip it if it is not valid or the wrong inode.
 */
-   spin_lock(&ip->i_flags_lock);
-   if (!ip->i_ino ||
+   spin_lock(&iq->i_flags_lock);
+   if (!iq->i_ino ||
(XFS_INO_TO_AGINO(mp, iq->i_ino) & mask) != first_index) {
-   spin_unlock(&ip->i_flags_lock);
+   spin_unlock(&iq->i_flags_lock);
continue;
}
-   spin_unlock(&ip->i_flags_lock);
+   spin_unlock(&iq->i_flags_lock);
 
/*
 * Do an un-protected check to see if the inode is dirty and
-- 
2.7.4



[PATCH 3.19.y-ckt 78/99] cpuidle: Fix cpuidle_state_is_coupled() argument in cpuidle_enter()

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Daniel Lezcano 

commit e7387da52028b072489c45efeb7a916c0205ebd2 upstream.

Commit 0b89e9aa2856 (cpuidle: delay enabling interrupts until all
coupled CPUs leave idle) rightfully fixed a regression by letting
the coupled idle state framework to handle local interrupt enabling
when the CPU is exiting an idle state.

The current code checks if the idle state is coupled and, if so, it
will let the coupled code to enable interrupts. This way, it can
decrement the ready-count before handling the interrupt. This
mechanism prevents the other CPUs from waiting for a CPU which is
handling interrupts.

But the check is done against the state index returned by the back
end driver's ->enter functions which could be different from the
initial index passed as parameter to the cpuidle_enter_state()
function.

 entered_state = target_state->enter(dev, drv, index);

 [ ... ]

 if (!cpuidle_state_is_coupled(drv, entered_state))
local_irq_enable();

 [ ... ]

If the 'index' is referring to a coupled idle state but the
'entered_state' is *not* coupled, then the interrupts are enabled
again. All CPUs blocked on the sync barrier may busy loop longer
if the CPU has interrupts to handle before decrementing the
ready-count. That's consuming more energy than saving.

Fixes: 0b89e9aa2856 (cpuidle: delay enabling interrupts until all coupled CPUs 
leave idle)
Signed-off-by: Daniel Lezcano 
[ rjw: Subject & changelog ]
Signed-off-by: Rafael J. Wysocki 
[ kamal: backport to 3.19-stable: context ]
Signed-off-by: Kamal Mostafa 
---
 drivers/cpuidle/cpuidle.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c
index 5a4ff9c..59dc6db 100644
--- a/drivers/cpuidle/cpuidle.c
+++ b/drivers/cpuidle/cpuidle.c
@@ -127,7 +127,7 @@ int cpuidle_enter_state(struct cpuidle_device *dev, struct 
cpuidle_driver *drv,
time_end = ktime_get();
trace_cpu_idle_rcuidle(PWR_EVENT_EXIT, dev->cpu);
 
-   if (!cpuidle_state_is_coupled(dev, drv, entered_state))
+   if (!cpuidle_state_is_coupled(dev, drv, index))
local_irq_enable();
 
diff = ktime_to_us(ktime_sub(time_end, time_start));
-- 
2.7.4



[PATCH 3.19.y-ckt 96/99] hpfs: implement the show_options method

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Mikulas Patocka 

commit 037369b872940cd923835a0a589763180c4a36bc upstream.

The HPFS filesystem used generic_show_options to produce string that is
displayed in /proc/mounts.  However, there is a problem that the options
may disappear after remount.  If we mount the filesystem with option1
and then remount it with option2, /proc/mounts should show both option1
and option2, however it only shows option2 because the whole option
string is replaced with replace_mount_options in hpfs_remount_fs.

To fix this bug, implement the hpfs_show_options function that prints
options that are currently selected.

Signed-off-by: Mikulas Patocka 
Signed-off-by: Linus Torvalds 
Signed-off-by: Kamal Mostafa 
---
 fs/hpfs/super.c | 43 ---
 1 file changed, 32 insertions(+), 11 deletions(-)

diff --git a/fs/hpfs/super.c b/fs/hpfs/super.c
index 03b2c9c..bc6e5c5 100644
--- a/fs/hpfs/super.c
+++ b/fs/hpfs/super.c
@@ -15,6 +15,7 @@
 #include 
 #include 
 #include 
+#include 
 
 /* Mark the filesystem dirty, so that chkdsk checks it when os/2 booted */
 
@@ -426,10 +427,6 @@ static int hpfs_remount_fs(struct super_block *s, int 
*flags, char *data)
int lowercase, eas, chk, errs, chkdsk, timeshift;
int o;
struct hpfs_sb_info *sbi = hpfs_sb(s);
-   char *new_opts = kstrdup(data, GFP_KERNEL);
-
-   if (data && !new_opts)
-   return -ENOMEM;
 
sync_filesystem(s);
 
@@ -466,18 +463,44 @@ static int hpfs_remount_fs(struct super_block *s, int 
*flags, char *data)
 
if (!(*flags & MS_RDONLY)) mark_dirty(s, 1);
 
-   if (new_opts)
-   replace_mount_options(s, new_opts);
-
hpfs_unlock(s);
return 0;
 
 out_err:
hpfs_unlock(s);
-   kfree(new_opts);
return -EINVAL;
 }
 
+static int hpfs_show_options(struct seq_file *seq, struct dentry *root)
+{
+   struct hpfs_sb_info *sbi = hpfs_sb(root->d_sb);
+
+   seq_printf(seq, ",uid=%u", from_kuid_munged(&init_user_ns, 
sbi->sb_uid));
+   seq_printf(seq, ",gid=%u", from_kgid_munged(&init_user_ns, 
sbi->sb_gid));
+   seq_printf(seq, ",umask=%03o", (~sbi->sb_mode & 0777));
+   if (sbi->sb_lowercase)
+   seq_printf(seq, ",case=lower");
+   if (!sbi->sb_chk)
+   seq_printf(seq, ",check=none");
+   if (sbi->sb_chk == 2)
+   seq_printf(seq, ",check=strict");
+   if (!sbi->sb_err)
+   seq_printf(seq, ",errors=continue");
+   if (sbi->sb_err == 2)
+   seq_printf(seq, ",errors=panic");
+   if (!sbi->sb_chkdsk)
+   seq_printf(seq, ",chkdsk=no");
+   if (sbi->sb_chkdsk == 2)
+   seq_printf(seq, ",chkdsk=always");
+   if (!sbi->sb_eas)
+   seq_printf(seq, ",eas=no");
+   if (sbi->sb_eas == 1)
+   seq_printf(seq, ",eas=ro");
+   if (sbi->sb_timeshift)
+   seq_printf(seq, ",timeshift=%d", sbi->sb_timeshift);
+   return 0;
+}
+
 /* Super operations */
 
 static const struct super_operations hpfs_sops =
@@ -488,7 +511,7 @@ static const struct super_operations hpfs_sops =
.put_super  = hpfs_put_super,
.statfs = hpfs_statfs,
.remount_fs = hpfs_remount_fs,
-   .show_options   = generic_show_options,
+   .show_options   = hpfs_show_options,
 };
 
 static int hpfs_fill_super(struct super_block *s, void *options, int silent)
@@ -511,8 +534,6 @@ static int hpfs_fill_super(struct super_block *s, void 
*options, int silent)
 
int o;
 
-   save_mount_options(s, options);
-
sbi = kzalloc(sizeof(*sbi), GFP_KERNEL);
if (!sbi) {
return -ENOMEM;
-- 
2.7.4



[PATCH 3.19.y-ckt 76/99] fs/cifs: correctly to anonymous authentication for the NTLM(v2) authentication

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Stefan Metzmacher 

commit 1a967d6c9b39c226be1b45f13acd4d8a5ab3dc44 upstream.

Only server which map unknown users to guest will allow
access using a non-null NTLMv2_Response.

For Samba it's the "map to guest = bad user" option.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=11913

Signed-off-by: Stefan Metzmacher 
Signed-off-by: Steve French 
Signed-off-by: Kamal Mostafa 
---
 fs/cifs/sess.c | 32 ++--
 1 file changed, 18 insertions(+), 14 deletions(-)

diff --git a/fs/cifs/sess.c b/fs/cifs/sess.c
index a58b100..8ffda50 100644
--- a/fs/cifs/sess.c
+++ b/fs/cifs/sess.c
@@ -895,22 +895,26 @@ sess_auth_ntlmv2(struct sess_data *sess_data)
/* LM2 password would be here if we supported it */
pSMB->req_no_secext.CaseInsensitivePasswordLength = 0;
 
-   /* calculate nlmv2 response and session key */
-   rc = setup_ntlmv2_rsp(ses, sess_data->nls_cp);
-   if (rc) {
-   cifs_dbg(VFS, "Error %d during NTLMv2 authentication\n", rc);
-   goto out;
-   }
+   if (ses->user_name != NULL) {
+   /* calculate nlmv2 response and session key */
+   rc = setup_ntlmv2_rsp(ses, sess_data->nls_cp);
+   if (rc) {
+   cifs_dbg(VFS, "Error %d during NTLMv2 
authentication\n", rc);
+   goto out;
+   }
 
-   memcpy(bcc_ptr, ses->auth_key.response + CIFS_SESS_KEY_SIZE,
-   ses->auth_key.len - CIFS_SESS_KEY_SIZE);
-   bcc_ptr += ses->auth_key.len - CIFS_SESS_KEY_SIZE;
+   memcpy(bcc_ptr, ses->auth_key.response + CIFS_SESS_KEY_SIZE,
+   ses->auth_key.len - CIFS_SESS_KEY_SIZE);
+   bcc_ptr += ses->auth_key.len - CIFS_SESS_KEY_SIZE;
 
-   /* set case sensitive password length after tilen may get
-* assigned, tilen is 0 otherwise.
-*/
-   pSMB->req_no_secext.CaseSensitivePasswordLength =
-   cpu_to_le16(ses->auth_key.len - CIFS_SESS_KEY_SIZE);
+   /* set case sensitive password length after tilen may get
+* assigned, tilen is 0 otherwise.
+*/
+   pSMB->req_no_secext.CaseSensitivePasswordLength =
+   cpu_to_le16(ses->auth_key.len - CIFS_SESS_KEY_SIZE);
+   } else {
+   pSMB->req_no_secext.CaseSensitivePasswordLength = 0;
+   }
 
if (ses->capabilities & CAP_UNICODE) {
if (sess_data->iov[0].iov_len % 2) {
-- 
2.7.4



[PATCH 3.19.y-ckt 47/99] usb: host: xhci-rcar: Avoid long wait in xhci_reset()

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Yoshihiro Shimoda 

commit f879fc32aa0c96fbac261b3d857a1239d554ad01 upstream.

The firmware of R-Car USB 3.0 host controller will control the reset.
So, if the xhci driver doesn't do firmware downloading (e.g. kernel
configuration is CONFIG_USB_XHCI_PLATFORM=y and CONFIG_USB_XHCI_RCAR
is not set), the reset of USB 3.0 host controller doesn't work
correctly. Then, the host controller will cause long wait in
xhci_reset() because the CMD_RESET bit of op_regs->command is not
cleared for 10 seconds.

So, this patch modifies the Kconfig to enable both CONFIG_USB_XHCI_PLATFORM
and CONFIG_USB_XHCI_RCAR.

Fixes: 4ac8918f3a7 (usb: host: xhci-plat: add support for the R-Car H2 and M2 
xHCI controllers)
Signed-off-by: Yoshihiro Shimoda 
Reviewed-by: Felipe Balbi 
Signed-off-by: Greg Kroah-Hartman 
[ kamal: backport to 4.2-stable: s/ARCH_RENESAS/ARCH_SHMOBILE/ ]
Signed-off-by: Kamal Mostafa 
---
 drivers/usb/host/Kconfig | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/usb/host/Kconfig b/drivers/usb/host/Kconfig
index c87e6e7..0321587 100644
--- a/drivers/usb/host/Kconfig
+++ b/drivers/usb/host/Kconfig
@@ -33,6 +33,7 @@ config USB_XHCI_PCI
 
 config USB_XHCI_PLATFORM
tristate
+   select USB_XHCI_RCAR if ARCH_SHMOBILE
 
 config USB_XHCI_MVEBU
tristate "xHCI support for Marvell Armada 375/38x"
@@ -44,7 +45,7 @@ config USB_XHCI_MVEBU
 
 config USB_XHCI_RCAR
tristate "xHCI support for Renesas R-Car SoCs"
-   select USB_XHCI_PLATFORM
+   depends on USB_XHCI_PLATFORM
depends on ARCH_SHMOBILE || COMPILE_TEST
---help---
  Say 'Y' to enable the support for the xHCI host controller
-- 
2.7.4



[PATCH 3.19.y-ckt 45/99] MIPS: Avoid using unwind_stack() with usermode

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: James Hogan 

commit 81a76d7119f63c359750e4adeff922a31ad1135f upstream.

When showing backtraces in response to traps, for example crashes and
address errors (usually unaligned accesses) when they are set in debugfs
to be reported, unwind_stack will be used if the PC was in the kernel
text address range. However since EVA it is possible for user and kernel
address ranges to overlap, and even without EVA userland can still
trigger an address error by jumping to a KSeg0 address.

Adjust the check to also ensure that it was running in kernel mode. I
don't believe any harm can come of this problem, since unwind_stack() is
sufficiently defensive, however it is only meant for unwinding kernel
code, so to be correct it should use the raw backtracing instead.

Signed-off-by: James Hogan 
Reviewed-by: Leonid Yegoshin 
Cc: linux-m...@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/11701/
Signed-off-by: Ralf Baechle 
(cherry picked from commit d2941a975ac745c607dfb590e92bb30bc352dad9)
Signed-off-by: Kamal Mostafa 
---
 arch/mips/kernel/traps.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c
index 7dd15e9..af1475f 100644
--- a/arch/mips/kernel/traps.c
+++ b/arch/mips/kernel/traps.c
@@ -141,7 +141,7 @@ static void show_backtrace(struct task_struct *task, const 
struct pt_regs *regs)
if (!task)
task = current;
 
-   if (raw_show_trace || !__kernel_text_address(pc)) {
+   if (raw_show_trace || user_mode(regs) || !__kernel_text_address(pc)) {
show_raw_backtrace(sp);
return;
}
-- 
2.7.4



[PATCH 3.19.y-ckt 55/99] MIPS: KVM: Fix timer IRQ race when freezing timer

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: James Hogan 

commit 4355c44f063d3de4f072d796604c7f4ba4085cc3 upstream.

There's a particularly narrow and subtle race condition when the
software emulated guest timer is frozen which can allow a guest timer
interrupt to be missed.

This happens due to the hrtimer expiry being inexact, so very
occasionally the freeze time will be after the moment when the emulated
CP0_Count transitions to the same value as CP0_Compare (so an IRQ should
be generated), but before the moment when the hrtimer is due to expire
(so no IRQ is generated). The IRQ won't be generated when the timer is
resumed either, since the resume CP0_Count will already match CP0_Compare.

With VZ guests in particular this is far more likely to happen, since
the soft timer may be frozen frequently in order to restore the timer
state to the hardware guest timer. This happens after 5-10 hours of
guest soak testing, resulting in an overflow in guest kernel timekeeping
calculations, hanging the guest. A more focussed test case to
intentionally hit the race (with the help of a new hypcall to cause the
timer state to migrated between hardware & software) hits the condition
fairly reliably within around 30 seconds.

Instead of relying purely on the inexact hrtimer expiry to determine
whether an IRQ should be generated, read the guest CP0_Compare and
directly check whether the freeze time is before or after it. Only if
CP0_Count is on or after CP0_Compare do we check the hrtimer expiry to
determine whether the last IRQ has already been generated (which will
have pushed back the expiry by one timer period).

Fixes: e30492bbe95a ("MIPS: KVM: Rewrite count/compare timer emulation")
Signed-off-by: James Hogan 
Cc: Paolo Bonzini 
Cc: "Radim Krčmář" 
Cc: Ralf Baechle 
Cc: linux-m...@linux-mips.org
Cc: k...@vger.kernel.org
Signed-off-by: Paolo Bonzini 
Signed-off-by: Kamal Mostafa 
---
 arch/mips/kvm/emulate.c | 28 +++-
 1 file changed, 23 insertions(+), 5 deletions(-)

diff --git a/arch/mips/kvm/emulate.c b/arch/mips/kvm/emulate.c
index 3d44b2d..3c73611 100644
--- a/arch/mips/kvm/emulate.c
+++ b/arch/mips/kvm/emulate.c
@@ -302,12 +302,31 @@ static inline ktime_t kvm_mips_count_time(struct kvm_vcpu 
*vcpu)
  */
 static uint32_t kvm_mips_read_count_running(struct kvm_vcpu *vcpu, ktime_t now)
 {
-   ktime_t expires;
+   struct mips_coproc *cop0 = vcpu->arch.cop0;
+   ktime_t expires, threshold;
+   uint32_t count, compare;
int running;
 
-   /* Is the hrtimer pending? */
+   /* Calculate the biased and scaled guest CP0_Count */
+   count = vcpu->arch.count_bias + kvm_mips_ktime_to_count(vcpu, now);
+   compare = kvm_read_c0_guest_compare(cop0);
+
+   /*
+* Find whether CP0_Count has reached the closest timer interrupt. If
+* not, we shouldn't inject it.
+*/
+   if ((int32_t)(count - compare) < 0)
+   return count;
+
+   /*
+* The CP0_Count we're going to return has already reached the closest
+* timer interrupt. Quickly check if it really is a new interrupt by
+* looking at whether the interval until the hrtimer expiry time is
+* less than 1/4 of the timer period.
+*/
expires = hrtimer_get_expires(&vcpu->arch.comparecount_timer);
-   if (ktime_compare(now, expires) >= 0) {
+   threshold = ktime_add_ns(now, vcpu->arch.count_period / 4);
+   if (ktime_before(expires, threshold)) {
/*
 * Cancel it while we handle it so there's no chance of
 * interference with the timeout handler.
@@ -329,8 +348,7 @@ static uint32_t kvm_mips_read_count_running(struct kvm_vcpu 
*vcpu, ktime_t now)
}
}
 
-   /* Return the biased and scaled guest CP0_Count */
-   return vcpu->arch.count_bias + kvm_mips_ktime_to_count(vcpu, now);
+   return count;
 }
 
 /**
-- 
2.7.4



[PATCH 3.19.y-ckt 58/99] irqchip/gic: Ensure ordering between read of INTACK and shared data

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Will Deacon 

commit f86c4fbd930ff6fecf3d8a1c313182bd0f49f496 upstream.

When an IPI is generated by a CPU, the pattern looks roughly like:

  
  smp_wmb();
  

On the receiving CPU we rely on the fact that, once we've taken the
interrupt, then the freshly written shared data must be visible to us.
Put another way, the CPU isn't going to speculate taking an interrupt.

Unfortunately, this assumption turns out to be broken.

Consider that CPUx wants to send an IPI to CPUy, which will cause CPUy
to read some shared_data. Before CPUx has done anything, a random
peripheral raises an IRQ to the GIC and the IRQ line on CPUy is raised.
CPUy then takes the IRQ and starts executing the entry code, heading
towards gic_handle_irq. Furthermore, let's assume that a bunch of the
previous interrupts handled by CPUy were SGIs, so the branch predictor
kicks in and speculates that irqnr will be <16 and we're likely to
head into handle_IPI. The prefetcher then grabs a speculative copy of
shared_data which contains a stale value.

Meanwhile, CPUx gets round to updating shared_data and asking the GIC
to send an SGI to CPUy. Internally, the GIC decides that the SGI is
more important than the peripheral interrupt (which hasn't yet been
ACKed) but doesn't need to do anything to CPUy, because the IRQ line
is already raised.

CPUy then reads the ACK register on the GIC, sees the SGI value which
confirms the branch prediction and we end up with a stale shared_data
value.

This patch fixes the problem by adding an smp_rmb() to the IPI entry
code in gic_handle_irq. As it turns out, the combination of a control
dependency and an ISB instruction from the EOI in the GICv3 driver is
enough to provide the ordering we need, so we add a comment there
justifying the absence of an explicit smp_rmb().

Signed-off-by: Will Deacon 
Signed-off-by: Marc Zyngier 
Signed-off-by: Kamal Mostafa 
---
 drivers/irqchip/irq-gic-v3.c | 7 +++
 drivers/irqchip/irq-gic.c| 8 
 2 files changed, 15 insertions(+)

diff --git a/drivers/irqchip/irq-gic-v3.c b/drivers/irqchip/irq-gic-v3.c
index 1a146cc..2d826a9 100644
--- a/drivers/irqchip/irq-gic-v3.c
+++ b/drivers/irqchip/irq-gic-v3.c
@@ -285,6 +285,13 @@ static asmlinkage void __exception_irq_entry 
gic_handle_irq(struct pt_regs *regs
if (irqnr < 16) {
gic_write_eoir(irqnr);
 #ifdef CONFIG_SMP
+   /*
+* Unlike GICv2, we don't need an smp_rmb() here.
+* The control dependency from gic_read_iar to
+* the ISB in gic_write_eoir is enough to ensure
+* that any shared data read by handle_IPI will
+* be read after the ACK.
+*/
handle_IPI(irqnr, regs);
 #else
WARN_ONCE(true, "Unexpected SGI received!\n");
diff --git a/drivers/irqchip/irq-gic.c b/drivers/irqchip/irq-gic.c
index d617ee5..121061a 100644
--- a/drivers/irqchip/irq-gic.c
+++ b/drivers/irqchip/irq-gic.c
@@ -276,6 +276,14 @@ static void __exception_irq_entry gic_handle_irq(struct 
pt_regs *regs)
if (irqnr < 16) {
writel_relaxed(irqstat, cpu_base + GIC_CPU_EOI);
 #ifdef CONFIG_SMP
+   /*
+* Ensure any shared data written by the CPU sending
+* the IPI is read after we've read the ACK register
+* on the GIC.
+*
+* Pairs with the write barrier in gic_raise_softirq
+*/
+   smp_rmb();
handle_IPI(irqnr, regs);
 #endif
continue;
-- 
2.7.4



[PATCH 3.19.y-ckt 66/99] ring-buffer: Use long for nr_pages to avoid overflow failures

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: "Steven Rostedt (Red Hat)" 

commit 9b94a8fba501f38368aef6ac1b30e7335252a220 upstream.

The size variable to change the ring buffer in ftrace is a long. The
nr_pages used to update the ring buffer based on the size is int. On 64 bit
machines this can cause an overflow problem.

For example, the following will cause the ring buffer to crash:

 # cd /sys/kernel/debug/tracing
 # echo 10 > buffer_size_kb
 # echo 8556384240 > buffer_size_kb

Then you get the warning of:

 WARNING: CPU: 1 PID: 318 at kernel/trace/ring_buffer.c:1527 
rb_update_pages+0x22f/0x260

Which is:

  RB_WARN_ON(cpu_buffer, nr_removed);

Note each ring buffer page holds 4080 bytes.

This is because:

 1) 10 causes the ring buffer to have 3 pages.
(10kb requires 3 * 4080 pages to hold)

 2) (2^31 / 2^10  + 1) * 4080 = 8556384240
The value written into buffer_size_kb is shifted by 10 and then passed
to ring_buffer_resize(). 8556384240 * 2^10 = 8761737461760

 3) The size passed to ring_buffer_resize() is then divided by BUF_PAGE_SIZE
which is 4080. 8761737461760 / 4080 = 2147484672

 4) nr_pages is subtracted from the current nr_pages (3) and we get:
2147484669. This value is saved in a signed integer nr_pages_to_update

 5) 2147484669 is greater than 2^31 but smaller than 2^32, a signed int
turns into the value of -2147482627

 6) As the value is a negative number, in update_pages_handler() it is
negated and passed to rb_remove_pages() and 2147482627 pages will
be removed, which is much larger than 3 and it causes the warning
because not all the pages asked to be removed were removed.

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

Fixes: 7a8e76a3829f1 ("tracing: unified trace buffer")
Reported-by: Hao Qin 
Signed-off-by: Steven Rostedt 
Signed-off-by: Kamal Mostafa 
---
 kernel/trace/ring_buffer.c | 26 ++
 1 file changed, 14 insertions(+), 12 deletions(-)

diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
index 3dd43de..8533ec9 100644
--- a/kernel/trace/ring_buffer.c
+++ b/kernel/trace/ring_buffer.c
@@ -463,7 +463,7 @@ struct ring_buffer_per_cpu {
raw_spinlock_t  reader_lock;/* serialize readers */
arch_spinlock_t lock;
struct lock_class_key   lock_key;
-   unsigned intnr_pages;
+   unsigned long   nr_pages;
struct list_head*pages;
struct buffer_page  *head_page; /* read from head */
struct buffer_page  *tail_page; /* write to tail */
@@ -483,7 +483,7 @@ struct ring_buffer_per_cpu {
u64 write_stamp;
u64 read_stamp;
/* ring buffer pages to update, > 0 to add, < 0 to remove */
-   int nr_pages_to_update;
+   longnr_pages_to_update;
struct list_headnew_pages; /* new pages to add */
struct work_struct  update_pages_work;
struct completion   update_done;
@@ -1162,10 +1162,10 @@ static int rb_check_pages(struct ring_buffer_per_cpu 
*cpu_buffer)
return 0;
 }
 
-static int __rb_allocate_pages(int nr_pages, struct list_head *pages, int cpu)
+static int __rb_allocate_pages(long nr_pages, struct list_head *pages, int cpu)
 {
-   int i;
struct buffer_page *bpage, *tmp;
+   long i;
 
for (i = 0; i < nr_pages; i++) {
struct page *page;
@@ -1202,7 +1202,7 @@ free_pages:
 }
 
 static int rb_allocate_pages(struct ring_buffer_per_cpu *cpu_buffer,
-unsigned nr_pages)
+unsigned long nr_pages)
 {
LIST_HEAD(pages);
 
@@ -1227,7 +1227,7 @@ static int rb_allocate_pages(struct ring_buffer_per_cpu 
*cpu_buffer,
 }
 
 static struct ring_buffer_per_cpu *
-rb_allocate_cpu_buffer(struct ring_buffer *buffer, int nr_pages, int cpu)
+rb_allocate_cpu_buffer(struct ring_buffer *buffer, long nr_pages, int cpu)
 {
struct ring_buffer_per_cpu *cpu_buffer;
struct buffer_page *bpage;
@@ -1327,8 +1327,9 @@ struct ring_buffer *__ring_buffer_alloc(unsigned long 
size, unsigned flags,
struct lock_class_key *key)
 {
struct ring_buffer *buffer;
+   long nr_pages;
int bsize;
-   int cpu, nr_pages;
+   int cpu;
 
/* keep it in its own cache line */
buffer = kzalloc(ALIGN(sizeof(*buffer), cache_line_size()),
@@ -1454,12 +1455,12 @@ static inline unsigned long rb_page_write(struct 
buffer_page *bpage)
 }
 
 static int
-rb_remove_pages(struct ring_buffer_per_cpu *cpu_buffer, unsigned int nr_pages)
+rb_r

[PATCH 3.19.y-ckt 82/99] KVM: MTRR: remove MSR 0x2f8

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Andy Honig 

commit 9842df62004f366b9fed2423e24df10542ee0dc5 upstream.

MSR 0x2f8 accessed the 124th Variable Range MTRR ever since MTRR support
was introduced by 9ba075a664df ("KVM: MTRR support").

0x2f8 became harmful when 910a6aae4e2e ("KVM: MTRR: exactly define the
size of variable MTRRs") shrinked the array of VR MTRRs from 256 to 8,
which made access to index 124 out of bounds.  The surrounding code only
WARNs in this situation, thus the guest gained a limited read/write
access to struct kvm_arch_vcpu.

0x2f8 is not a valid VR MTRR MSR, because KVM has/advertises only 16 VR
MTRR MSRs, 0x200-0x20f.  Every VR MTRR is set up using two MSRs, 0x2f8
was treated as a PHYSBASE and 0x2f9 would be its PHYSMASK, but 0x2f9 was
not implemented in KVM, therefore 0x2f8 could never do anything useful
and getting rid of it is safe.

This fixes CVE-2016-3713.

Fixes: 910a6aae4e2e ("KVM: MTRR: exactly define the size of variable MTRRs")
Reported-by: David Matlack 
Signed-off-by: Andy Honig 
Signed-off-by: Radim Krčmář 
Signed-off-by: Paolo Bonzini 
Signed-off-by: Kamal Mostafa 
---
 arch/x86/kvm/x86.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 18bfb6c..59e8b79 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -1742,8 +1742,6 @@ static bool msr_mtrr_valid(unsigned msr)
case MSR_MTRRdefType:
case MSR_IA32_CR_PAT:
return true;
-   case 0x2f8:
-   return true;
}
return false;
 }
-- 
2.7.4



[PATCH 3.19.y-ckt 63/99] powerpc/eeh: Don't report error in eeh_pe_reset_and_recover()

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Gavin Shan 

commit affeb0f2d3a9af419ad7ef4ac782e1540b2f7b28 upstream.

The function eeh_pe_reset_and_recover() is used to recover EEH
error when the passthrough device are transferred to guest and
backwards, meaning the device's driver is vfio-pci or none.
When the driver is vfio-pci that provides error_detected() error
handler only, the handler simply stops the guest and it's not
expected behaviour. On the other hand, no error handlers will
be called if we don't have a bound driver.

This ignores the error handler in eeh_pe_reset_and_recover()
that reports the error to device driver to avoid the exceptional
behaviour.

Fixes: 5cfb20b9 ("powerpc/eeh: Emulate EEH recovery for VFIO devices")
Signed-off-by: Gavin Shan 
Reviewed-by: Russell Currey 
Signed-off-by: Michael Ellerman 
Signed-off-by: Kamal Mostafa 
---
 arch/powerpc/kernel/eeh_driver.c | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/arch/powerpc/kernel/eeh_driver.c b/arch/powerpc/kernel/eeh_driver.c
index b17e793..0cc91d1 100644
--- a/arch/powerpc/kernel/eeh_driver.c
+++ b/arch/powerpc/kernel/eeh_driver.c
@@ -524,9 +524,6 @@ int eeh_pe_reset_and_recover(struct eeh_pe *pe)
/* Save states */
eeh_pe_dev_traverse(pe, eeh_dev_save_state, NULL);
 
-   /* Report error */
-   eeh_pe_dev_traverse(pe, eeh_report_error, &result);
-
/* Issue reset */
ret = eeh_reset_pe(pe);
if (ret) {
-- 
2.7.4



[PATCH 3.19.y-ckt 81/99] xfs: skip stale inodes in xfs_iflush_cluster

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Dave Chinner 

commit 7d3aa7fe970791f1a674b14572a411accf2f4d4e upstream.

We don't write back stale inodes so we should skip them in
xfs_iflush_cluster, too.

Signed-off-by: Dave Chinner 
Reviewed-by: Brian Foster 
Reviewed-by: Christoph Hellwig 
Signed-off-by: Dave Chinner 
Signed-off-by: Kamal Mostafa 
---
 fs/xfs/xfs_inode.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c
index f037fe7..5423dbe 100644
--- a/fs/xfs/xfs_inode.c
+++ b/fs/xfs/xfs_inode.c
@@ -2958,6 +2958,7 @@ xfs_iflush_cluster(
 */
spin_lock(&iq->i_flags_lock);
if (!iq->i_ino ||
+   __xfs_iflags_test(iq, XFS_ISTALE) ||
(XFS_INO_TO_AGINO(mp, iq->i_ino) & mask) != first_index) {
spin_unlock(&iq->i_flags_lock);
continue;
-- 
2.7.4



[PATCH 3.19.y-ckt 57/99] gcov: disable tree-loop-im to reduce stack usage

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Arnd Bergmann 

commit c87bf431448b404a6ef5fbabd74c0e3e42157a7f upstream.

Enabling CONFIG_GCOV_PROFILE_ALL produces us a lot of warnings like

lib/lz4/lz4hc_compress.c: In function 'lz4_compresshcctx':
lib/lz4/lz4hc_compress.c:514:1: warning: the frame size of 1504 bytes is larger 
than 1024 bytes [-Wframe-larger-than=]

After some investigation, I found that this behavior started with gcc-4.9,
and opened https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69702.
A suggested workaround for it is to use the -fno-tree-loop-im
flag that turns off one of the optimization stages in gcc, so the
code runs a little slower but does not use excessive amounts
of stack.

We could make this conditional on the gcc version, but I could not
find an easy way to do this in Kbuild and the benefit would be
fairly small, given that most of the gcc version in production are
affected now.

I'm marking this for 'stable' backports because it addresses a bug
with code generation in gcc that exists in all kernel versions
with the affected gcc releases.

Signed-off-by: Arnd Bergmann 
Acked-by: Peter Oberparleiter 
Signed-off-by: Michal Marek 
Signed-off-by: Kamal Mostafa 
---
 Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Makefile b/Makefile
index 6b72df3..d633ed1 100644
--- a/Makefile
+++ b/Makefile
@@ -376,7 +376,7 @@ AFLAGS_MODULE   =
 LDFLAGS_MODULE  =
 CFLAGS_KERNEL  =
 AFLAGS_KERNEL  =
-CFLAGS_GCOV= -fprofile-arcs -ftest-coverage
+CFLAGS_GCOV= -fprofile-arcs -ftest-coverage -fno-tree-loop-im
 
 
 # Use USERINCLUDE when you must reference the UAPI directories only.
-- 
2.7.4



[PATCH 3.19.y-ckt 54/99] crypto: caam - fix caam_jr_alloc() ret code

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Catalin Vasile 

commit e930c765ca5c6b039cd22ebfb4504ea7b5dab43d upstream.

caam_jr_alloc() used to return NULL if a JR device could not be
allocated for a session. In turn, every user of this function used
IS_ERR() function to verify if anything went wrong, which does NOT look
for NULL values. This made the kernel crash if the sanity check failed,
because the driver continued to think it had allocated a valid JR dev
instance to the session and at some point it tries to do a caam_jr_free()
on a NULL JR dev pointer.
This patch is a fix for this issue.

Signed-off-by: Catalin Vasile 
Signed-off-by: Herbert Xu 
Signed-off-by: Kamal Mostafa 
---
 drivers/crypto/caam/jr.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/crypto/caam/jr.c b/drivers/crypto/caam/jr.c
index 9b3ef1bc..29dccaa 100644
--- a/drivers/crypto/caam/jr.c
+++ b/drivers/crypto/caam/jr.c
@@ -241,7 +241,7 @@ static void caam_jr_dequeue(unsigned long devarg)
 struct device *caam_jr_alloc(void)
 {
struct caam_drv_private_jr *jrpriv, *min_jrpriv = NULL;
-   struct device *dev = NULL;
+   struct device *dev = ERR_PTR(-ENODEV);
int min_tfm_cnt = INT_MAX;
int tfm_cnt;
 
-- 
2.7.4



[PATCH 3.19.y-ckt 56/99] MIPS: KVM: Fix timer IRQ race when writing CP0_Compare

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: James Hogan 

commit b45bacd2d048f405c7760e5cc9b60dd67708734f upstream.

Writing CP0_Compare clears the timer interrupt pending bit
(CP0_Cause.TI), but this wasn't being done atomically. If a timer
interrupt raced with the write of the guest CP0_Compare, the timer
interrupt could end up being pending even though the new CP0_Compare is
nowhere near CP0_Count.

We were already updating the hrtimer expiry with
kvm_mips_update_hrtimer(), which used both kvm_mips_freeze_hrtimer() and
kvm_mips_resume_hrtimer(). Close the race window by expanding out
kvm_mips_update_hrtimer(), and clearing CP0_Cause.TI and setting
CP0_Compare between the freeze and resume. Since the pending timer
interrupt should not be cleared when CP0_Compare is written via the KVM
user API, an ack argument is added to distinguish the source of the
write.

Fixes: e30492bbe95a ("MIPS: KVM: Rewrite count/compare timer emulation")
Signed-off-by: James Hogan 
Cc: Paolo Bonzini 
Cc: "Radim Krčmář" 
Cc: Ralf Baechle 
Cc: linux-m...@linux-mips.org
Cc: k...@vger.kernel.org
Signed-off-by: Paolo Bonzini 
Signed-off-by: Kamal Mostafa 
---
 arch/mips/include/asm/kvm_host.h |  2 +-
 arch/mips/kvm/emulate.c  | 61 ++--
 arch/mips/kvm/trap_emul.c|  2 +-
 3 files changed, 29 insertions(+), 36 deletions(-)

diff --git a/arch/mips/include/asm/kvm_host.h b/arch/mips/include/asm/kvm_host.h
index 4e3205a..1616b56 100644
--- a/arch/mips/include/asm/kvm_host.h
+++ b/arch/mips/include/asm/kvm_host.h
@@ -717,7 +717,7 @@ extern enum emulation_result 
kvm_mips_complete_mmio_load(struct kvm_vcpu *vcpu,
 
 uint32_t kvm_mips_read_count(struct kvm_vcpu *vcpu);
 void kvm_mips_write_count(struct kvm_vcpu *vcpu, uint32_t count);
-void kvm_mips_write_compare(struct kvm_vcpu *vcpu, uint32_t compare);
+void kvm_mips_write_compare(struct kvm_vcpu *vcpu, uint32_t compare, bool ack);
 void kvm_mips_init_count(struct kvm_vcpu *vcpu);
 int kvm_mips_set_count_ctl(struct kvm_vcpu *vcpu, s64 count_ctl);
 int kvm_mips_set_count_resume(struct kvm_vcpu *vcpu, s64 count_resume);
diff --git a/arch/mips/kvm/emulate.c b/arch/mips/kvm/emulate.c
index 3c73611..73ad744 100644
--- a/arch/mips/kvm/emulate.c
+++ b/arch/mips/kvm/emulate.c
@@ -438,32 +438,6 @@ static void kvm_mips_resume_hrtimer(struct kvm_vcpu *vcpu,
 }
 
 /**
- * kvm_mips_update_hrtimer() - Update next expiry time of hrtimer.
- * @vcpu:  Virtual CPU.
- *
- * Recalculates and updates the expiry time of the hrtimer. This can be used
- * after timer parameters have been altered which do not depend on the time 
that
- * the change occurs (in those cases kvm_mips_freeze_hrtimer() and
- * kvm_mips_resume_hrtimer() are used directly).
- *
- * It is guaranteed that no timer interrupts will be lost in the process.
- *
- * Assumes !kvm_mips_count_disabled(@vcpu) (guest CP0_Count timer is running).
- */
-static void kvm_mips_update_hrtimer(struct kvm_vcpu *vcpu)
-{
-   ktime_t now;
-   uint32_t count;
-
-   /*
-* freeze_hrtimer takes care of a timer interrupts <= count, and
-* resume_hrtimer the hrtimer takes care of a timer interrupts > count.
-*/
-   now = kvm_mips_freeze_hrtimer(vcpu, &count);
-   kvm_mips_resume_hrtimer(vcpu, now, count);
-}
-
-/**
  * kvm_mips_write_count() - Modify the count and update timer.
  * @vcpu:  Virtual CPU.
  * @count: Guest CP0_Count value to set.
@@ -558,23 +532,42 @@ int kvm_mips_set_count_hz(struct kvm_vcpu *vcpu, s64 
count_hz)
  * kvm_mips_write_compare() - Modify compare and update timer.
  * @vcpu:  Virtual CPU.
  * @compare:   New CP0_Compare value.
+ * @ack:   Whether to acknowledge timer interrupt.
  *
  * Update CP0_Compare to a new value and update the timeout.
+ * If @ack, atomically acknowledge any pending timer interrupt, otherwise 
ensure
+ * any pending timer interrupt is preserved.
  */
-void kvm_mips_write_compare(struct kvm_vcpu *vcpu, uint32_t compare)
+void kvm_mips_write_compare(struct kvm_vcpu *vcpu, uint32_t compare, bool ack)
 {
struct mips_coproc *cop0 = vcpu->arch.cop0;
+   int dc;
+   u32 old_compare = kvm_read_c0_guest_compare(cop0);
+   ktime_t now;
+   uint32_t count;
 
/* if unchanged, must just be an ack */
-   if (kvm_read_c0_guest_compare(cop0) == compare)
+   if (old_compare == compare) {
+   if (!ack)
+   return;
+   kvm_mips_callbacks->dequeue_timer_int(vcpu);
+   kvm_write_c0_guest_compare(cop0, compare);
return;
+   }
+
+   /* freeze_hrtimer() takes care of timer interrupts <= count */
+   dc = kvm_mips_count_disabled(vcpu);
+   if (!dc)
+   now = kvm_mips_freeze_hrtimer(vcpu, &count);
+
+   if (ack)
+ 

[PATCH 3.19.y-ckt 62/99] rtlwifi: pci: use dev_kfree_skb_irq instead of kfree_skb in rtl_pci_reset_trx_ring

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: wang yanqing 

commit cf968937d27751296920e6b82ffa89735e3a0023 upstream.

We can't use kfree_skb in irq disable context, because spin_lock_irqsave
make sure we are always in irq disable context, use dev_kfree_skb_irq
instead of kfree_skb is better than dev_kfree_skb_any.

This patch fix below kernel warning:
[ 7612.095528] [ cut here ]
[ 7612.095546] WARNING: CPU: 3 PID: 4460 at kernel/softirq.c:150 
__local_bh_enable_ip+0x58/0x80()
[ 7612.095550] Modules linked in: rtl8723be x86_pkg_temp_thermal btcoexist 
rtl_pci rtlwifi rtl8723_common
[ 7612.095567] CPU: 3 PID: 4460 Comm: ifconfig Tainted: GW   4.4.0+ 
#4
[ 7612.095570] Hardware name: LENOVO 20DFA04FCD/20DFA04FCD, BIOS J5ET48WW (1.19 
) 08/27/2015
[ 7612.095574]    da37fc70 c12ce7c5  da37fca0 c104cc59 
c19d4454
[ 7612.095584]  0003 116c c19d4784 0096 c10508a8 c10508a8 0200 
c1b42400
[ 7612.095594]  f29be780 da37fcb0 c104ccad 0009  da37fcbc c10508a8 
f21f08b8
[ 7612.095604] Call Trace:
[ 7612.095614]  [] dump_stack+0x41/0x5c
[ 7612.095620]  [] warn_slowpath_common+0x89/0xc0
[ 7612.095628]  [] ? __local_bh_enable_ip+0x58/0x80
[ 7612.095634]  [] ? __local_bh_enable_ip+0x58/0x80
[ 7612.095640]  [] warn_slowpath_null+0x1d/0x20
[ 7612.095646]  [] __local_bh_enable_ip+0x58/0x80
[ 7612.095653]  [] destroy_conntrack+0x64/0xa0
[ 7612.095660]  [] nf_conntrack_destroy+0xf/0x20
[ 7612.095665]  [] skb_release_head_state+0x55/0xa0
[ 7612.095670]  [] skb_release_all+0xb/0x20
[ 7612.095674]  [] __kfree_skb+0xb/0x60
[ 7612.095679]  [] kfree_skb+0x30/0x70
[ 7612.095686]  [] ? rtl_pci_reset_trx_ring+0x22d/0x370 [rtl_pci]
[ 7612.095692]  [] rtl_pci_reset_trx_ring+0x22d/0x370 [rtl_pci]
[ 7612.095698]  [] rtl_pci_start+0x19/0x190 [rtl_pci]
[ 7612.095705]  [] rtl_op_start+0x56/0x90 [rtlwifi]
[ 7612.095712]  [] drv_start+0x36/0xc0
[ 7612.095717]  [] ieee80211_do_open+0x2d3/0x890
[ 7612.095725]  [] ? call_netdevice_notifiers_info+0x2e/0x60
[ 7612.095730]  [] ieee80211_open+0x4d/0x50
[ 7612.095736]  [] __dev_open+0xa3/0x130
[ 7612.095742]  [] ? _raw_spin_unlock_bh+0x13/0x20
[ 7612.095748]  [] __dev_change_flags+0x89/0x140
[ 7612.095753]  [] ? selinux_capable+0xd/0x10
[ 7612.095759]  [] dev_change_flags+0x29/0x60
[ 7612.095765]  [] devinet_ioctl+0x553/0x670
[ 7612.095772]  [] ? _copy_to_user+0x28/0x40
[ 7612.095777]  [] inet_ioctl+0x85/0xb0
[ 7612.095783]  [] sock_ioctl+0x67/0x260
[ 7612.095788]  [] ? sock_fasync+0x80/0x80
[ 7612.095795]  [] do_vfs_ioctl+0x6b/0x550
[ 7612.095800]  [] ? selinux_file_ioctl+0x102/0x1e0
[ 7612.095807]  [] ? timekeeping_suspend+0x294/0x320
[ 7612.095813]  [] ? __hrtimer_run_queues+0x14a/0x210
[ 7612.095820]  [] ? security_file_ioctl+0x34/0x50
[ 7612.095827]  [] SyS_ioctl+0x70/0x80
[ 7612.095832]  [] do_fast_syscall_32+0x84/0x120
[ 7612.095839]  [] sysenter_past_esp+0x36/0x55
[ 7612.095844] ---[ end trace 97e9c637a20e8348 ]---

Signed-off-by: Wang YanQing 
Acked-by: Larry Finger 
Signed-off-by: Kalle Valo 
[ kamal: backport to 4.2-stable: files moved ]
Signed-off-by: Kamal Mostafa 
---
 drivers/net/wireless/rtlwifi/pci.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/wireless/rtlwifi/pci.c 
b/drivers/net/wireless/rtlwifi/pci.c
index 348d5aec..2afe4cc 100644
--- a/drivers/net/wireless/rtlwifi/pci.c
+++ b/drivers/net/wireless/rtlwifi/pci.c
@@ -1573,7 +1573,7 @@ int rtl_pci_reset_trx_ring(struct ieee80211_hw *hw)
 true,
 HW_DESC_TXBUFF_ADDR),
 skb->len, PCI_DMA_TODEVICE);
-   kfree_skb(skb);
+   dev_kfree_skb_irq(skb);
ring->idx = (ring->idx + 1) % ring->entries;
}
ring->idx = 0;
-- 
2.7.4



[PATCH 3.19.y-ckt 75/99] fs/cifs: correctly to anonymous authentication for the NTLM(v1) authentication

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Stefan Metzmacher 

commit 777f69b8d26bf35ade4a76b08f203c11e048365d upstream.

Only server which map unknown users to guest will allow
access using a non-null NTChallengeResponse.

For Samba it's the "map to guest = bad user" option.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=11913

Signed-off-by: Stefan Metzmacher 
Signed-off-by: Steve French 
Signed-off-by: Kamal Mostafa 
---
 fs/cifs/sess.c | 41 +++--
 1 file changed, 23 insertions(+), 18 deletions(-)

diff --git a/fs/cifs/sess.c b/fs/cifs/sess.c
index 91dbaca..a58b100 100644
--- a/fs/cifs/sess.c
+++ b/fs/cifs/sess.c
@@ -781,26 +781,31 @@ sess_auth_ntlm(struct sess_data *sess_data)
capabilities = cifs_ssetup_hdr(ses, pSMB);
 
pSMB->req_no_secext.Capabilities = cpu_to_le32(capabilities);
-   pSMB->req_no_secext.CaseInsensitivePasswordLength =
-   cpu_to_le16(CIFS_AUTH_RESP_SIZE);
-   pSMB->req_no_secext.CaseSensitivePasswordLength =
-   cpu_to_le16(CIFS_AUTH_RESP_SIZE);
+   if (ses->user_name != NULL) {
+   pSMB->req_no_secext.CaseInsensitivePasswordLength =
+   cpu_to_le16(CIFS_AUTH_RESP_SIZE);
+   pSMB->req_no_secext.CaseSensitivePasswordLength =
+   cpu_to_le16(CIFS_AUTH_RESP_SIZE);
 
-   /* calculate ntlm response and session key */
-   rc = setup_ntlm_response(ses, sess_data->nls_cp);
-   if (rc) {
-   cifs_dbg(VFS, "Error %d during NTLM authentication\n",
-rc);
-   goto out;
-   }
+   /* calculate ntlm response and session key */
+   rc = setup_ntlm_response(ses, sess_data->nls_cp);
+   if (rc) {
+   cifs_dbg(VFS, "Error %d during NTLM authentication\n",
+rc);
+   goto out;
+   }
 
-   /* copy ntlm response */
-   memcpy(bcc_ptr, ses->auth_key.response + CIFS_SESS_KEY_SIZE,
-   CIFS_AUTH_RESP_SIZE);
-   bcc_ptr += CIFS_AUTH_RESP_SIZE;
-   memcpy(bcc_ptr, ses->auth_key.response + CIFS_SESS_KEY_SIZE,
-   CIFS_AUTH_RESP_SIZE);
-   bcc_ptr += CIFS_AUTH_RESP_SIZE;
+   /* copy ntlm response */
+   memcpy(bcc_ptr, ses->auth_key.response + CIFS_SESS_KEY_SIZE,
+   CIFS_AUTH_RESP_SIZE);
+   bcc_ptr += CIFS_AUTH_RESP_SIZE;
+   memcpy(bcc_ptr, ses->auth_key.response + CIFS_SESS_KEY_SIZE,
+   CIFS_AUTH_RESP_SIZE);
+   bcc_ptr += CIFS_AUTH_RESP_SIZE;
+   } else {
+   pSMB->req_no_secext.CaseInsensitivePasswordLength = 0;
+   pSMB->req_no_secext.CaseSensitivePasswordLength = 0;
+   }
 
if (ses->capabilities & CAP_UNICODE) {
/* unicode strings must be word aligned */
-- 
2.7.4



[PATCH 3.19.y-ckt 65/99] MIPS: math-emu: Fix jalr emulation when rd == $0

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Paul Burton 

commit ab4a92e66741b35ca12f8497896bafbe579c28a1 upstream.

When emulating a jalr instruction with rd == $0, the code in
isBranchInstr was incorrectly writing to GPR $0 which should actually
always remain zeroed. This would lead to any further instructions
emulated which use $0 operating on a bogus value until the task is next
context switched, at which point the value of $0 in the task context
would be restored to the correct zero by a store in SAVE_SOME. Fix this
by not writing to rd if it is $0.

Fixes: 102cedc32a6e ("MIPS: microMIPS: Floating point support.")
Signed-off-by: Paul Burton 
Cc: Maciej W. Rozycki 
Cc: James Hogan 
Cc: linux-m...@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/13160/
Signed-off-by: Ralf Baechle 
Signed-off-by: Kamal Mostafa 
---
 arch/mips/math-emu/cp1emu.c | 8 +---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/arch/mips/math-emu/cp1emu.c b/arch/mips/math-emu/cp1emu.c
index 9dfcd7f..862bc86 100644
--- a/arch/mips/math-emu/cp1emu.c
+++ b/arch/mips/math-emu/cp1emu.c
@@ -443,9 +443,11 @@ static int isBranchInstr(struct pt_regs *regs, struct 
mm_decoded_insn dec_insn,
case spec_op:
switch (insn.r_format.func) {
case jalr_op:
-   regs->regs[insn.r_format.rd] =
-   regs->cp0_epc + dec_insn.pc_inc +
-   dec_insn.next_pc_inc;
+   if (insn.r_format.rd != 0) {
+   regs->regs[insn.r_format.rd] =
+   regs->cp0_epc + dec_insn.pc_inc +
+   dec_insn.next_pc_inc;
+   }
/* Fall through */
case jr_op:
*contpc = regs->regs[insn.r_format.rs];
-- 
2.7.4



[PATCH 3.19.y-ckt 97/99] powerpc/iommu: Remove the dependency on EEH struct in DDW mechanism

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: "Guilherme G. Piccoli" 

commit 8445a87f7092bc8336ea1305be9306f26b846d93 upstream.

Commit 39baadbf36ce ("powerpc/eeh: Remove eeh information from pci_dn")
changed the pci_dn struct by removing its EEH-related members.
As part of this clean-up, DDW mechanism was modified to read the device
configuration address from eeh_dev struct.

As a consequence, now if we disable EEH mechanism on kernel command-line
for example, the DDW mechanism will fail, generating a kernel oops by
dereferencing a NULL pointer (which turns to be the eeh_dev pointer).

This patch just changes the configuration address calculation on DDW
functions to a manual calculation based on pci_dn members instead of
using eeh_dev-based address.

No functional changes were made. This was tested on pSeries, both
in PHyp and qemu guest.

Fixes: 39baadbf36ce ("powerpc/eeh: Remove eeh information from pci_dn")
Reviewed-by: Gavin Shan 
Signed-off-by: Guilherme G. Piccoli 
Signed-off-by: Michael Ellerman 
Signed-off-by: Kamal Mostafa 
---
 arch/powerpc/platforms/pseries/iommu.c | 24 
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/arch/powerpc/platforms/pseries/iommu.c 
b/arch/powerpc/platforms/pseries/iommu.c
index 7803a19..cad616e 100644
--- a/arch/powerpc/platforms/pseries/iommu.c
+++ b/arch/powerpc/platforms/pseries/iommu.c
@@ -824,7 +824,8 @@ machine_arch_initcall(pseries, find_existing_ddw_windows);
 static int query_ddw(struct pci_dev *dev, const u32 *ddw_avail,
struct ddw_query_response *query)
 {
-   struct eeh_dev *edev;
+   struct device_node *dn;
+   struct pci_dn *pdn;
u32 cfg_addr;
u64 buid;
int ret;
@@ -835,11 +836,10 @@ static int query_ddw(struct pci_dev *dev, const u32 
*ddw_avail,
 * Retrieve them from the pci device, not the node with the
 * dma-window property
 */
-   edev = pci_dev_to_eeh_dev(dev);
-   cfg_addr = edev->config_addr;
-   if (edev->pe_config_addr)
-   cfg_addr = edev->pe_config_addr;
-   buid = edev->phb->buid;
+   dn = pci_device_to_OF_node(dev);
+   pdn = PCI_DN(dn);
+   buid = pdn->phb->buid;
+   cfg_addr = (pdn->busno << 8) | pdn->devfn;
 
ret = rtas_call(ddw_avail[0], 3, 5, (u32 *)query,
  cfg_addr, BUID_HI(buid), BUID_LO(buid));
@@ -853,7 +853,8 @@ static int create_ddw(struct pci_dev *dev, const u32 
*ddw_avail,
struct ddw_create_response *create, int page_shift,
int window_shift)
 {
-   struct eeh_dev *edev;
+   struct device_node *dn;
+   struct pci_dn *pdn;
u32 cfg_addr;
u64 buid;
int ret;
@@ -864,11 +865,10 @@ static int create_ddw(struct pci_dev *dev, const u32 
*ddw_avail,
 * Retrieve them from the pci device, not the node with the
 * dma-window property
 */
-   edev = pci_dev_to_eeh_dev(dev);
-   cfg_addr = edev->config_addr;
-   if (edev->pe_config_addr)
-   cfg_addr = edev->pe_config_addr;
-   buid = edev->phb->buid;
+   dn = pci_device_to_OF_node(dev);
+   pdn = PCI_DN(dn);
+   buid = pdn->phb->buid;
+   cfg_addr = (pdn->busno << 8) | pdn->devfn;
 
do {
/* extra outputs are LIOBN and dma-addr (hi, lo) */
-- 
2.7.4



[PATCH 3.19.y-ckt 64/99] powerpc/eeh: Restore initial state in eeh_pe_reset_and_recover()

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Gavin Shan 

commit 5a0cdbfd17b90a89c64a71d8aec9773ecdb20d0d upstream.

The function eeh_pe_reset_and_recover() is used to recover EEH
error when the passthrou device are transferred to guest and
backwards. The content in the device's config space will be lost
on PE reset issued in the middle of the recovery. The function
saves/restores it before/after the reset. However, config access
to some adapters like Broadcom BCM5719 at this point will causes
fenced PHB. The config space is always blocked and we save 0xFF's
that are restored at late point. The memory BARs are totally
corrupted, causing another EEH error upon access to one of the
memory BARs.

This restores the config space on those adapters like BCM5719
from the content saved to the EEH device when it's populated,
to resolve above issue.

Fixes: 5cfb20b9 ("powerpc/eeh: Emulate EEH recovery for VFIO devices")
Signed-off-by: Gavin Shan 
Reviewed-by: Russell Currey 
Signed-off-by: Michael Ellerman 
Signed-off-by: Kamal Mostafa 
---
 arch/powerpc/kernel/eeh_driver.c | 23 +++
 1 file changed, 23 insertions(+)

diff --git a/arch/powerpc/kernel/eeh_driver.c b/arch/powerpc/kernel/eeh_driver.c
index 0cc91d1..c38d7f7 100644
--- a/arch/powerpc/kernel/eeh_driver.c
+++ b/arch/powerpc/kernel/eeh_driver.c
@@ -188,6 +188,16 @@ static void *eeh_dev_save_state(void *data, void *userdata)
if (!edev)
return NULL;
 
+   /*
+* We cannot access the config space on some adapters.
+* Otherwise, it will cause fenced PHB. We don't save
+* the content in their config space and will restore
+* from the initial config space saved when the EEH
+* device is created.
+*/
+   if (edev->pe && (edev->pe->state & EEH_PE_CFG_RESTRICTED))
+   return NULL;
+
pdev = eeh_dev_to_pci_dev(edev);
if (!pdev)
return NULL;
@@ -327,6 +337,19 @@ static void *eeh_dev_restore_state(void *data, void 
*userdata)
if (!edev)
return NULL;
 
+   /*
+* The content in the config space isn't saved because
+* the blocked config space on some adapters. We have
+* to restore the initial saved config space when the
+* EEH device is created.
+*/
+   if (edev->pe && (edev->pe->state & EEH_PE_CFG_RESTRICTED)) {
+   if (list_is_last(&edev->list, &edev->pe->edevs))
+   eeh_pe_restore_bars(edev->pe);
+
+   return NULL;
+   }
+
pdev = eeh_dev_to_pci_dev(edev);
if (!pdev)
return NULL;
-- 
2.7.4



[PATCH 3.19.y-ckt 70/99] MIPS: MSA: Fix a link error on `_init_msa_upper' with older GCC

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: "Maciej W. Rozycki" 

commit e49d38488515057dba8f0c2ba4cfde5be4a7281f upstream.

Fix a build regression from commit c9017757c532 ("MIPS: init upper 64b
of vector registers when MSA is first used"):

arch/mips/built-in.o: In function `enable_restore_fp_context':
traps.c:(.text+0xbb90): undefined reference to `_init_msa_upper'
traps.c:(.text+0xbb90): relocation truncated to fit: R_MIPS_26 against 
`_init_msa_upper'
traps.c:(.text+0xbef0): undefined reference to `_init_msa_upper'
traps.c:(.text+0xbef0): relocation truncated to fit: R_MIPS_26 against 
`_init_msa_upper'

to !CONFIG_CPU_HAS_MSA configurations with older GCC versions, which are
unable to figure out that calls to `_init_msa_upper' are indeed dead.
Of the many ways to tackle this failure choose the approach we have
already taken in `thread_msa_context_live'.

[r...@linux-mips.org: Drop patch segment to junk file.]

Signed-off-by: Maciej W. Rozycki 
Cc: linux-m...@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/13271/
Signed-off-by: Ralf Baechle 
Signed-off-by: Kamal Mostafa 
---
 arch/mips/include/asm/msa.h | 13 +
 arch/mips/kernel/traps.c|  6 +++---
 2 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/arch/mips/include/asm/msa.h b/arch/mips/include/asm/msa.h
index af5638b..38bbeda 100644
--- a/arch/mips/include/asm/msa.h
+++ b/arch/mips/include/asm/msa.h
@@ -67,6 +67,19 @@ static inline void restore_msa(struct task_struct *t)
_restore_msa(t);
 }
 
+static inline void init_msa_upper(void)
+{
+   /*
+* Check cpu_has_msa only if it's a constant. This will allow the
+* compiler to optimise out code for CPUs without MSA without adding
+* an extra redundant check for CPUs with MSA.
+*/
+   if (__builtin_constant_p(cpu_has_msa) && !cpu_has_msa)
+   return;
+
+   _init_msa_upper();
+}
+
 #ifdef TOOLCHAIN_SUPPORTS_MSA
 
 #define __BUILD_MSA_CTL_REG(name, cs)  \
diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c
index af1475f..e3b5fe1 100644
--- a/arch/mips/kernel/traps.c
+++ b/arch/mips/kernel/traps.c
@@ -1150,7 +1150,7 @@ static int enable_restore_fp_context(int msa)
err = init_fpu();
if (msa && !err) {
enable_msa();
-   _init_msa_upper();
+   init_msa_upper();
set_thread_flag(TIF_USEDMSA);
set_thread_flag(TIF_MSA_CTX_LIVE);
}
@@ -1213,7 +1213,7 @@ static int enable_restore_fp_context(int msa)
 */
prior_msa = test_and_set_thread_flag(TIF_MSA_CTX_LIVE);
if (!prior_msa && was_fpu_owner) {
-   _init_msa_upper();
+   init_msa_upper();
 
goto out;
}
@@ -1230,7 +1230,7 @@ static int enable_restore_fp_context(int msa)
 * of each vector register such that it cannot see data left
 * behind by another task.
 */
-   _init_msa_upper();
+   init_msa_upper();
} else {
/* We need to restore the vector context. */
restore_msa(current);
-- 
2.7.4



[PATCH 3.19.y-ckt 60/99] kbuild: move -Wunused-const-variable to W=1 warning level

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Arnd Bergmann 

commit c9c6837d39311b0cc14cdbe7c18e815ab44aefb1 upstream.

gcc-6 started warning by default about variables that are not
used anywhere and that are marked 'const', generating many
false positives in an allmodconfig build, e.g.:

arch/arm/mach-davinci/board-da830-evm.c:282:20: warning: 
'da830_evm_emif25_pins' defined but not used [-Wunused-const-variable=]
arch/arm/plat-omap/dmtimer.c:958:34: warning: 'omap_timer_match' defined but 
not used [-Wunused-const-variable=]
drivers/bluetooth/hci_bcm.c:625:39: warning: 'acpi_bcm_default_gpios' defined 
but not used [-Wunused-const-variable=]
drivers/char/hw_random/omap-rng.c:92:18: warning: 'reg_map_omap4' defined but 
not used [-Wunused-const-variable=]
drivers/devfreq/exynos/exynos5_bus.c:381:32: warning: 'exynos5_busfreq_int_pm' 
defined but not used [-Wunused-const-variable=]
drivers/dma/mv_xor.c:1139:34: warning: 'mv_xor_dt_ids' defined but not used 
[-Wunused-const-variable=]

This is similar to the existing -Wunused-but-set-variable warning
that was added in an earlier release and that we disable by default
now and only enable when W=1 is set, so it makes sense to do
the same here. Once we have eliminated the majority of the
warnings for both, we can put them back into the default list.

We probably want this in backport kernels as well, to allow building
them with gcc-6 without introducing extra warnings.

Signed-off-by: Arnd Bergmann 
Acked-by: Olof Johansson 
Acked-by: Lee Jones 
Signed-off-by: Michal Marek 
Signed-off-by: Kamal Mostafa 
---
 Makefile   | 5 +++--
 scripts/Makefile.extrawarn | 1 +
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/Makefile b/Makefile
index d633ed1..d96177d 100644
--- a/Makefile
+++ b/Makefile
@@ -688,9 +688,10 @@ KBUILD_CFLAGS += $(call cc-option, -mno-global-merge,)
 KBUILD_CFLAGS += $(call cc-option, -fcatch-undefined-behavior)
 else
 
-# This warning generated too much noise in a regular build.
-# Use make W=1 to enable this warning (see scripts/Makefile.build)
+# These warnings generated too much noise in a regular build.
+# Use make W=1 to enable them (see scripts/Makefile.build)
 KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable)
+KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable)
 endif
 
 ifdef CONFIG_FRAME_POINTER
diff --git a/scripts/Makefile.extrawarn b/scripts/Makefile.extrawarn
index 0f8ba77..7339c39 100644
--- a/scripts/Makefile.extrawarn
+++ b/scripts/Makefile.extrawarn
@@ -24,6 +24,7 @@ warning-1 += $(call cc-option, -Wmissing-prototypes)
 warning-1 += -Wold-style-definition
 warning-1 += $(call cc-option, -Wmissing-include-dirs)
 warning-1 += $(call cc-option, -Wunused-but-set-variable)
+warning-1 += $(call cc-option, -Wunused-const-variable)
 warning-1 += $(call cc-disable-warning, missing-field-initializers)
 warning-1 += $(call cc-disable-warning, sign-compare)
 
-- 
2.7.4



[PATCH 3.19.y-ckt 71/99] drm/i915/fbdev: Fix num_connector references in intel_fb_initial_config()

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Lyude 

commit 14a3842a1d5945067d1dd0788f314e14d5b18e5b upstream.

During boot time, MST devices usually send a ton of hotplug events
irregardless of whether or not any physical hotplugs actually occurred.
Hotplugs mean connectors being created/destroyed, and the number of DRM
connectors changing under us. This isn't a problem if we use
fb_helper->connector_count since we only set it once in the code,
however if we use num_connector from struct drm_mode_config we risk it's
value changing under us. On top of that, there's even a chance that
dev->mode_config.num_connector != fb_helper->connector_count. If the
number of connectors happens to increase under us, we'll end up using
the wrong array size for memcpy and start writing beyond the actual
length of the array, occasionally resulting in kernel panics.

Note: This is just polish for 4.7, Dave Airlie's drm_connector
refcounting fixed these bugs for real. But it's good enough duct-tape
for stable kernel backporting, since backporting the refcounting
changes is way too invasive.

Signed-off-by: Lyude 
[danvet: Clarify why we need this.]
Signed-off-by: Daniel Vetter 
Link: 
http://patchwork.freedesktop.org/patch/msgid/1463065021-18280-2-git-send-email-cp...@redhat.com
Signed-off-by: Kamal Mostafa 
---
 drivers/gpu/drm/i915/intel_fbdev.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_fbdev.c 
b/drivers/gpu/drm/i915/intel_fbdev.c
index 850cf7d..f6a76a5 100644
--- a/drivers/gpu/drm/i915/intel_fbdev.c
+++ b/drivers/gpu/drm/i915/intel_fbdev.c
@@ -336,12 +336,12 @@ static bool intel_fb_initial_config(struct drm_fb_helper 
*fb_helper,
uint64_t conn_configured = 0, mask;
int pass = 0;
 
-   save_enabled = kcalloc(dev->mode_config.num_connector, sizeof(bool),
+   save_enabled = kcalloc(fb_helper->connector_count, sizeof(bool),
   GFP_KERNEL);
if (!save_enabled)
return false;
 
-   memcpy(save_enabled, enabled, dev->mode_config.num_connector);
+   memcpy(save_enabled, enabled, fb_helper->connector_count);
mask = (1 << fb_helper->connector_count) - 1;
 retry:
for (i = 0; i < fb_helper->connector_count; i++) {
@@ -480,7 +480,7 @@ retry:
if (fallback) {
 bail:
DRM_DEBUG_KMS("Not using firmware configuration\n");
-   memcpy(enabled, save_enabled, dev->mode_config.num_connector);
+   memcpy(enabled, save_enabled, fb_helper->connector_count);
kfree(save_enabled);
return false;
}
-- 
2.7.4



[PATCH 3.19.y-ckt 73/99] fs/cifs: correctly to anonymous authentication via NTLMSSP

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Stefan Metzmacher 

commit cfda35d98298131bf38fbad3ce4cd5ecb3cf18db upstream.

See [MS-NLMP] 3.2.5.1.2 Server Receives an AUTHENTICATE_MESSAGE from the Client:

   ...
   Set NullSession to FALSE
   If (AUTHENTICATE_MESSAGE.UserNameLen == 0 AND
  AUTHENTICATE_MESSAGE.NtChallengeResponse.Length == 0 AND
  (AUTHENTICATE_MESSAGE.LmChallengeResponse == Z(1)
   OR
   AUTHENTICATE_MESSAGE.LmChallengeResponse.Length == 0))
   -- Special case: client requested anonymous authentication
   Set NullSession to TRUE
   ...

Only server which map unknown users to guest will allow
access using a non-null NTChallengeResponse.

For Samba it's the "map to guest = bad user" option.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=11913

Signed-off-by: Stefan Metzmacher 
Signed-off-by: Steve French 
Signed-off-by: Kamal Mostafa 
---
 fs/cifs/sess.c | 32 
 1 file changed, 20 insertions(+), 12 deletions(-)

diff --git a/fs/cifs/sess.c b/fs/cifs/sess.c
index bce6fdc..abaeeab 100644
--- a/fs/cifs/sess.c
+++ b/fs/cifs/sess.c
@@ -400,19 +400,27 @@ int build_ntlmssp_auth_blob(unsigned char *pbuffer,
sec_blob->LmChallengeResponse.MaximumLength = 0;
 
sec_blob->NtChallengeResponse.BufferOffset = cpu_to_le32(tmp - pbuffer);
-   rc = setup_ntlmv2_rsp(ses, nls_cp);
-   if (rc) {
-   cifs_dbg(VFS, "Error %d during NTLMSSP authentication\n", rc);
-   goto setup_ntlmv2_ret;
+   if (ses->user_name != NULL) {
+   rc = setup_ntlmv2_rsp(ses, nls_cp);
+   if (rc) {
+   cifs_dbg(VFS, "Error %d during NTLMSSP 
authentication\n", rc);
+   goto setup_ntlmv2_ret;
+   }
+   memcpy(tmp, ses->auth_key.response + CIFS_SESS_KEY_SIZE,
+   ses->auth_key.len - CIFS_SESS_KEY_SIZE);
+   tmp += ses->auth_key.len - CIFS_SESS_KEY_SIZE;
+
+   sec_blob->NtChallengeResponse.Length =
+   cpu_to_le16(ses->auth_key.len - 
CIFS_SESS_KEY_SIZE);
+   sec_blob->NtChallengeResponse.MaximumLength =
+   cpu_to_le16(ses->auth_key.len - 
CIFS_SESS_KEY_SIZE);
+   } else {
+   /*
+* don't send an NT Response for anonymous access
+*/
+   sec_blob->NtChallengeResponse.Length = 0;
+   sec_blob->NtChallengeResponse.MaximumLength = 0;
}
-   memcpy(tmp, ses->auth_key.response + CIFS_SESS_KEY_SIZE,
-   ses->auth_key.len - CIFS_SESS_KEY_SIZE);
-   tmp += ses->auth_key.len - CIFS_SESS_KEY_SIZE;
-
-   sec_blob->NtChallengeResponse.Length =
-   cpu_to_le16(ses->auth_key.len - CIFS_SESS_KEY_SIZE);
-   sec_blob->NtChallengeResponse.MaximumLength =
-   cpu_to_le16(ses->auth_key.len - CIFS_SESS_KEY_SIZE);
 
if (ses->domainName == NULL) {
sec_blob->DomainName.BufferOffset = cpu_to_le32(tmp - pbuffer);
-- 
2.7.4



[PATCH 3.19.y-ckt 67/99] ring-buffer: Prevent overflow of size in ring_buffer_resize()

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: "Steven Rostedt (Red Hat)" 

commit 59643d1535eb220668692a5359de22545af579f6 upstream.

If the size passed to ring_buffer_resize() is greater than MAX_LONG - 
BUF_PAGE_SIZE
then the DIV_ROUND_UP() will return zero.

Here's the details:

  # echo 18014398509481980 > /sys/kernel/debug/tracing/buffer_size_kb

tracing_entries_write() processes this and converts kb to bytes.

 18014398509481980 << 10 = 18446744073709547520

and this is passed to ring_buffer_resize() as unsigned long size.

 size = DIV_ROUND_UP(size, BUF_PAGE_SIZE);

Where DIV_ROUND_UP(a, b) is (a + b - 1)/b

BUF_PAGE_SIZE is 4080 and here

 18446744073709547520 + 4080 - 1 = 18446744073709551599

where 18446744073709551599 is still smaller than 2^64

 2^64 - 18446744073709551599 = 17

But now 18446744073709551599 / 4080 = 4521260802379792

and size = size * 4080 = 18446744073709551360

This is checked to make sure its still greater than 2 * 4080,
which it is.

Then we convert to the number of buffer pages needed.

 nr_page = DIV_ROUND_UP(size, BUF_PAGE_SIZE)

but this time size is 18446744073709551360 and

 2^64 - (18446744073709551360 + 4080 - 1) = -3823

Thus it overflows and the resulting number is less than 4080, which makes

  3823 / 4080 = 0

an nr_pages is set to this. As we already checked against the minimum that
nr_pages may be, this causes the logic to fail as well, and we crash the
kernel.

There's no reason to have the two DIV_ROUND_UP() (that's just result of
historical code changes), clean up the code and fix this bug.

Fixes: 83f40318dab00 ("ring-buffer: Make removal of ring buffer pages atomic")
Signed-off-by: Steven Rostedt 
Signed-off-by: Kamal Mostafa 
---
 kernel/trace/ring_buffer.c | 9 -
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
index 8533ec9..56607e9 100644
--- a/kernel/trace/ring_buffer.c
+++ b/kernel/trace/ring_buffer.c
@@ -1691,14 +1691,13 @@ int ring_buffer_resize(struct ring_buffer *buffer, 
unsigned long size,
!cpumask_test_cpu(cpu_id, buffer->cpumask))
return size;
 
-   size = DIV_ROUND_UP(size, BUF_PAGE_SIZE);
-   size *= BUF_PAGE_SIZE;
+   nr_pages = DIV_ROUND_UP(size, BUF_PAGE_SIZE);
 
/* we need a minimum of two pages */
-   if (size < BUF_PAGE_SIZE * 2)
-   size = BUF_PAGE_SIZE * 2;
+   if (nr_pages < 2)
+   nr_pages = 2;
 
-   nr_pages = DIV_ROUND_UP(size, BUF_PAGE_SIZE);
+   size = nr_pages * BUF_PAGE_SIZE;
 
/*
 * Don't succeed if resizing is disabled, as a reader might be
-- 
2.7.4



[PATCH 3.19.y-ckt 61/99] rtlwifi: Fix logic error in enter/exit power-save mode

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: wang yanqing 

commit 873ffe154ae074c46ed2d72dbd9a2a99f06f55b4 upstream.

In commit a269913c52ad ("rtlwifi: Rework rtl_lps_leave() and
rtl_lps_enter() to use work queue"), the tests for enter/exit
power-save mode were inverted. With this change applied, the
wifi connection becomes much more stable.

Fixes: a269913c52ad ("rtlwifi: Rework rtl_lps_leave() and rtl_lps_enter() to 
use work queue")
Signed-off-by: Wang YanQing 
Acked-by: Larry Finger 
Signed-off-by: Kalle Valo 
[ kamal: backport to 4.2-stable: files moved ]
Signed-off-by: Kamal Mostafa 
---
 drivers/net/wireless/rtlwifi/base.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/rtlwifi/base.c 
b/drivers/net/wireless/rtlwifi/base.c
index af24869..339f94e 100644
--- a/drivers/net/wireless/rtlwifi/base.c
+++ b/drivers/net/wireless/rtlwifi/base.c
@@ -1587,9 +1587,9 @@ void rtl_watchdog_wq_callback(void *data)
if (((rtlpriv->link_info.num_rx_inperiod +
  rtlpriv->link_info.num_tx_inperiod) > 8) ||
(rtlpriv->link_info.num_rx_inperiod > 2))
-   rtl_lps_enter(hw);
-   else
rtl_lps_leave(hw);
+   else
+   rtl_lps_enter(hw);
}
 
rtlpriv->link_info.num_rx_inperiod = 0;
-- 
2.7.4



[PATCH 3.19.y-ckt 83/99] ASoC: ak4642: Enable cache usage to fix crashes on resume

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Mark Brown 

commit d3030d11961a8c103cf07aed59905276ddfc06c2 upstream.

The ak4642 driver is using a regmap cache sync to restore the
configuration of the chip on resume but (as Peter observed) does not
actually define a register cache which means that the resume is never
going to work and we trigger asserts in regmap.  Fix this by enabling
caching.

Reported-by: Geert Uytterhoeven 
Reported-by: Peter Ujfalusi 
Tested-by: Geert Uytterhoeven 
Signed-off-by: Mark Brown 
[ kamal: backport to 4.2-stable: no separate ak4643_regmap ]
Signed-off-by: Kamal Mostafa 
---
 sound/soc/codecs/ak4642.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/sound/soc/codecs/ak4642.c b/sound/soc/codecs/ak4642.c
index dde8b49..dd2a554 100644
--- a/sound/soc/codecs/ak4642.c
+++ b/sound/soc/codecs/ak4642.c
@@ -508,6 +508,7 @@ static const struct regmap_config ak4642_regmap = {
.max_register   = ARRAY_SIZE(ak4642_reg) + 1,
.reg_defaults   = ak4642_reg,
.num_reg_defaults   = ARRAY_SIZE(ak4642_reg),
+   .cache_type = REGCACHE_RBTREE,
 };
 
 static const struct regmap_config ak4648_regmap = {
@@ -516,6 +517,7 @@ static const struct regmap_config ak4648_regmap = {
.max_register   = ARRAY_SIZE(ak4648_reg) + 1,
.reg_defaults   = ak4648_reg,
.num_reg_defaults   = ARRAY_SIZE(ak4648_reg),
+   .cache_type = REGCACHE_RBTREE,
 };
 
 static const struct ak4642_drvdata ak4642_drvdata = {
-- 
2.7.4



[PATCH 3.19.y-ckt 86/99] mmc: longer timeout for long read time quirk

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Matt Gumbel 

commit 32ecd320db39bcb007679ed42f283740641b81ea upstream.

008GE0 Toshiba mmc in some Intel Baytrail tablets responds to
MMC_SEND_EXT_CSD in 450-600ms.

This patch will...

() Increase the long read time quirk timeout from 300ms to 600ms. Original
   author of that quirk says 300ms was only a guess and that the number
   may need to be raised in the future.

() Add this specific MMC to the quirk

Signed-off-by: Matt Gumbel 
Signed-off-by: Adrian Hunter 
Signed-off-by: Ulf Hansson 
Signed-off-by: Kamal Mostafa 
---
 drivers/mmc/card/block.c | 5 +++--
 drivers/mmc/core/core.c  | 4 ++--
 2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
index d1e2d3b..7d676d3 100644
--- a/drivers/mmc/card/block.c
+++ b/drivers/mmc/card/block.c
@@ -2400,11 +2400,12 @@ static const struct mmc_fixup blk_fixups[] =
  MMC_QUIRK_BLK_NO_CMD23),
 
/*
-* Some Micron MMC cards needs longer data read timeout than
-* indicated in CSD.
+* Some MMC cards need longer data read timeout than indicated in CSD.
 */
MMC_FIXUP(CID_NAME_ANY, CID_MANFID_MICRON, 0x200, add_quirk_mmc,
  MMC_QUIRK_LONG_READ_TIME),
+   MMC_FIXUP("008GE0", CID_MANFID_TOSHIBA, CID_OEMID_ANY, add_quirk_mmc,
+ MMC_QUIRK_LONG_READ_TIME),
 
/*
 * On these Samsung MoviNAND parts, performing secure erase or
diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
index a633666..86249b6 100644
--- a/drivers/mmc/core/core.c
+++ b/drivers/mmc/core/core.c
@@ -822,11 +822,11 @@ void mmc_set_data_timeout(struct mmc_data *data, const 
struct mmc_card *card)
/*
 * Some cards require longer data read timeout than indicated in CSD.
 * Address this by setting the read timeout to a "reasonably high"
-* value. For the cards tested, 300ms has proven enough. If necessary,
+* value. For the cards tested, 600ms has proven enough. If necessary,
 * this value can be increased if other problematic cards require this.
 */
if (mmc_card_long_read_time(card) && data->flags & MMC_DATA_READ) {
-   data->timeout_ns = 3;
+   data->timeout_ns = 6;
data->timeout_clks = 0;
}
 
-- 
2.7.4



[PATCH 3.19.y-ckt 79/99] xfs: xfs_iflush_cluster fails to abort on error

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Dave Chinner 

commit b1438f477934f5a4d5a44df26f3079a7575d5946 upstream.

When a failure due to an inode buffer occurs, the error handling
fails to abort the inode writeback correctly. This can result in the
inode being reclaimed whilst still in the AIL, leading to
use-after-free situations as well as filesystems that cannot be
unmounted as the inode log items left in the AIL never get removed.

Fix this by ensuring fatal errors from xfs_imap_to_bp() result in
the inode flush being aborted correctly.

Reported-by: Shyam Kaushik 
Diagnosed-by: Shyam Kaushik 
Tested-by: Shyam Kaushik 
Signed-off-by: Dave Chinner 
Reviewed-by: Christoph Hellwig 
Signed-off-by: Dave Chinner 
Signed-off-by: Kamal Mostafa 
---
 fs/xfs/xfs_inode.c | 17 +
 1 file changed, 13 insertions(+), 4 deletions(-)

diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c
index 1b8451d..484c569 100644
--- a/fs/xfs/xfs_inode.c
+++ b/fs/xfs/xfs_inode.c
@@ -3078,7 +3078,7 @@ xfs_iflush(
struct xfs_buf  **bpp)
 {
struct xfs_mount*mp = ip->i_mount;
-   struct xfs_buf  *bp;
+   struct xfs_buf  *bp = NULL;
struct xfs_dinode   *dip;
int error;
 
@@ -3120,14 +3120,22 @@ xfs_iflush(
}
 
/*
-* Get the buffer containing the on-disk inode.
+* Get the buffer containing the on-disk inode. We are doing a try-lock
+* operation here, so we may get  an EAGAIN error. In that case, we
+* simply want to return with the inode still dirty.
+*
+* If we get any other error, we effectively have a corruption situation
+* and we cannot flush the inode, so we treat it the same as failing
+* xfs_iflush_int().
 */
error = xfs_imap_to_bp(mp, NULL, &ip->i_imap, &dip, &bp, XBF_TRYLOCK,
   0);
-   if (error || !bp) {
+   if (error == -EAGAIN) {
xfs_ifunlock(ip);
return error;
}
+   if (error)
+   goto corrupt_out;
 
/*
 * First flush out the inode that xfs_iflush was called with.
@@ -3155,7 +3163,8 @@ xfs_iflush(
return 0;
 
 corrupt_out:
-   xfs_buf_relse(bp);
+   if (bp)
+   xfs_buf_relse(bp);
xfs_force_shutdown(mp, SHUTDOWN_CORRUPT_INCORE);
 cluster_corrupt_out:
error = -EFSCORRUPTED;
-- 
2.7.4



[PATCH 3.19.y-ckt 88/99] mmc: sdhci-acpi: Remove MMC_CAP_BUS_WIDTH_TEST for Intel controllers

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Adrian Hunter 

commit 265984b36ce82fec67957d452dd2b22e010611e4 upstream.

The CMD19/CMD14 bus width test has been found to be unreliable in
some cases.  It is not essential, so simply remove it.

Signed-off-by: Adrian Hunter 
Signed-off-by: Ulf Hansson 
Signed-off-by: Kamal Mostafa 
---
 drivers/mmc/host/sdhci-acpi.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/mmc/host/sdhci-acpi.c b/drivers/mmc/host/sdhci-acpi.c
index 970314e..10dc8ac 100644
--- a/drivers/mmc/host/sdhci-acpi.c
+++ b/drivers/mmc/host/sdhci-acpi.c
@@ -204,7 +204,7 @@ static const struct sdhci_acpi_slot 
sdhci_acpi_slot_int_emmc = {
.chip= &sdhci_acpi_chip_int,
.caps= MMC_CAP_8_BIT_DATA | MMC_CAP_NONREMOVABLE |
   MMC_CAP_HW_RESET | MMC_CAP_1_8V_DDR |
-  MMC_CAP_BUS_WIDTH_TEST | MMC_CAP_WAIT_WHILE_BUSY,
+  MMC_CAP_WAIT_WHILE_BUSY,
.caps2   = MMC_CAP2_HC_ERASE_SZ,
.flags   = SDHCI_ACPI_RUNTIME_PM,
.quirks  = SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC,
@@ -217,7 +217,7 @@ static const struct sdhci_acpi_slot 
sdhci_acpi_slot_int_sdio = {
   SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC,
.quirks2 = SDHCI_QUIRK2_HOST_OFF_CARD_ON,
.caps= MMC_CAP_NONREMOVABLE | MMC_CAP_POWER_OFF_CARD |
-  MMC_CAP_BUS_WIDTH_TEST | MMC_CAP_WAIT_WHILE_BUSY,
+  MMC_CAP_WAIT_WHILE_BUSY,
.flags   = SDHCI_ACPI_RUNTIME_PM,
.pm_caps = MMC_PM_KEEP_POWER,
.probe_slot = sdhci_acpi_sdio_probe_slot,
@@ -229,7 +229,7 @@ static const struct sdhci_acpi_slot sdhci_acpi_slot_int_sd 
= {
.quirks  = SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC,
.quirks2 = SDHCI_QUIRK2_CARD_ON_NEEDS_BUS_ON |
   SDHCI_QUIRK2_STOP_WITH_TC,
-   .caps= MMC_CAP_BUS_WIDTH_TEST | MMC_CAP_WAIT_WHILE_BUSY,
+   .caps= MMC_CAP_WAIT_WHILE_BUSY,
.probe_slot = sdhci_acpi_sd_probe_slot,
 };
 
-- 
2.7.4



[PATCH 3.19.y-ckt 85/99] PM / sleep: Handle failures in device_suspend_late() consistently

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: "Rafael J. Wysocki" 

commit 3a17fb329da68cb00558721aff876a80bba2fdb9 upstream.

Grygorii Strashko reports:

 The PM runtime will be left disabled for the device if its
 .suspend_late() callback fails and async suspend is not allowed
 for this device. In this case device will not be added in
 dpm_late_early_list and dpm_resume_early() will ignore this
 device, as result PM runtime will be disabled for it forever
 (side effect: after 8 subsequent failures for the same device
 the PM runtime will be reenabled due to disable_depth overflow).

To fix this problem, add devices to dpm_late_early_list regardless
of whether or not device_suspend_late() returns errors for them.

That will ensure failures in there to be handled consistently for
all devices regardless of their async suspend/resume status.

Reported-by: Grygorii Strashko 
Tested-by: Grygorii Strashko 
Signed-off-by: Rafael J. Wysocki 
Signed-off-by: Kamal Mostafa 
---
 drivers/base/power/main.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c
index 9717d5f..508a8f6 100644
--- a/drivers/base/power/main.c
+++ b/drivers/base/power/main.c
@@ -1251,14 +1251,15 @@ int dpm_suspend_late(pm_message_t state)
error = device_suspend_late(dev);
 
mutex_lock(&dpm_list_mtx);
+   if (!list_empty(&dev->power.entry))
+   list_move(&dev->power.entry, &dpm_late_early_list);
+
if (error) {
pm_dev_err(dev, state, " late", error);
dpm_save_failed_dev(dev_name(dev));
put_device(dev);
break;
}
-   if (!list_empty(&dev->power.entry))
-   list_move(&dev->power.entry, &dpm_late_early_list);
put_device(dev);
 
if (async_error)
-- 
2.7.4



[PATCH 3.19.y-ckt 84/99] Input: uinput - handle compat ioctl for UI_SET_PHYS

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Ricky Liang 

commit affa80bd97f7ca282d1faa91667b3ee9e4c590e6 upstream.

When running a 32-bit userspace on a 64-bit kernel, the UI_SET_PHYS
ioctl needs to be treated with special care, as it has the pointer
size encoded in the command.

Signed-off-by: Ricky Liang 
Signed-off-by: Dmitry Torokhov 
Signed-off-by: Kamal Mostafa 
---
 drivers/input/misc/uinput.c | 6 ++
 1 file changed, 6 insertions(+)

diff --git a/drivers/input/misc/uinput.c b/drivers/input/misc/uinput.c
index 421e29e..5221450 100644
--- a/drivers/input/misc/uinput.c
+++ b/drivers/input/misc/uinput.c
@@ -895,9 +895,15 @@ static long uinput_ioctl(struct file *file, unsigned int 
cmd, unsigned long arg)
 }
 
 #ifdef CONFIG_COMPAT
+
+#define UI_SET_PHYS_COMPAT _IOW(UINPUT_IOCTL_BASE, 108, compat_uptr_t)
+
 static long uinput_compat_ioctl(struct file *file,
unsigned int cmd, unsigned long arg)
 {
+   if (cmd == UI_SET_PHYS_COMPAT)
+   cmd = UI_SET_PHYS;
+
return uinput_ioctl_handler(file, cmd, arg, compat_ptr(arg));
 }
 #endif
-- 
2.7.4



[PATCH 3.19.y-ckt 69/99] PCI: Disable all BAR sizing for devices with non-compliant BARs

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Prarit Bhargava 

commit ad67b437f187ea818b2860524d10f878fadfdd99 upstream.

b84106b4e229 ("PCI: Disable IO/MEM decoding for devices with non-compliant
BARs") disabled BAR sizing for BARs 0-5 of devices that don't comply with
the PCI spec.  But it didn't do anything for expansion ROM BARs, so we
still try to size them, resulting in warnings like this on Broadwell-EP:

  pci :ff:12.0: BAR 6: failed to assign [mem size 0x0001 pref]

Move the non-compliant BAR check from __pci_read_base() up to
pci_read_bases() so it applies to the expansion ROM BAR as well as
to BARs 0-5.

Note that direct callers of __pci_read_base(), like sriov_init(), will now
bypass this check.  We haven't had reports of devices with broken SR-IOV
BARs yet.

[bhelgaas: changelog]
Fixes: b84106b4e229 ("PCI: Disable IO/MEM decoding for devices with 
non-compliant BARs")
Signed-off-by: Prarit Bhargava 
Signed-off-by: Bjorn Helgaas 
CC: Thomas Gleixner 
CC: Ingo Molnar 
CC: "H. Peter Anvin" 
CC: Andi Kleen 
Signed-off-by: Kamal Mostafa 
---
 drivers/pci/probe.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index 3efefa2..b1cbe3d 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -175,9 +175,6 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type 
type,
u16 orig_cmd;
struct pci_bus_region region, inverted_region;
 
-   if (dev->non_compliant_bars)
-   return 0;
-
mask = type ? PCI_ROM_ADDRESS_MASK : ~0;
 
/* No printks while decoding is disabled! */
@@ -318,6 +315,9 @@ static void pci_read_bases(struct pci_dev *dev, unsigned 
int howmany, int rom)
 {
unsigned int pos, reg;
 
+   if (dev->non_compliant_bars)
+   return;
+
for (pos = 0; pos < howmany; pos++) {
struct resource *res = &dev->resource[pos];
reg = PCI_BASE_ADDRESS_0 + (pos << 2);
-- 
2.7.4



[PATCH 3.19.y-ckt 77/99] remove directory incorrectly tries to set delete on close on non-empty directories

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Steve French 

commit 897fba1172d637d344f009d700f7eb8a1fa262f1 upstream.

Wrong return code was being returned on SMB3 rmdir of
non-empty directory.

For SMB3 (unlike for cifs), we attempt to delete a directory by
set of delete on close flag on the open. Windows clients set
this flag via a set info (SET_FILE_DISPOSITION to set this flag)
which properly checks if the directory is empty.

With this patch on smb3 mounts we correctly return
 "DIRECTORY NOT EMPTY"
on attempts to remove a non-empty directory.

Signed-off-by: Steve French 
Acked-by: Sachin Prabhu 
Signed-off-by: Kamal Mostafa 
---
 fs/cifs/smb2glob.h  |  1 +
 fs/cifs/smb2inode.c |  8 ++--
 fs/cifs/smb2pdu.c   | 16 
 fs/cifs/smb2proto.h |  2 ++
 4 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/fs/cifs/smb2glob.h b/fs/cifs/smb2glob.h
index bc0bb9c..0ffa180 100644
--- a/fs/cifs/smb2glob.h
+++ b/fs/cifs/smb2glob.h
@@ -44,6 +44,7 @@
 #define SMB2_OP_DELETE 7
 #define SMB2_OP_HARDLINK 8
 #define SMB2_OP_SET_EOF 9
+#define SMB2_OP_RMDIR 10
 
 /* Used when constructing chained read requests. */
 #define CHAINED_REQUEST 1
diff --git a/fs/cifs/smb2inode.c b/fs/cifs/smb2inode.c
index 899bbc8..4f0231e 100644
--- a/fs/cifs/smb2inode.c
+++ b/fs/cifs/smb2inode.c
@@ -80,6 +80,10 @@ smb2_open_op_close(const unsigned int xid, struct cifs_tcon 
*tcon,
 * SMB2_open() call.
 */
break;
+   case SMB2_OP_RMDIR:
+   tmprc = SMB2_rmdir(xid, tcon, fid.persistent_fid,
+  fid.volatile_fid);
+   break;
case SMB2_OP_RENAME:
tmprc = SMB2_rename(xid, tcon, fid.persistent_fid,
fid.volatile_fid, (__le16 *)data);
@@ -191,8 +195,8 @@ smb2_rmdir(const unsigned int xid, struct cifs_tcon *tcon, 
const char *name,
   struct cifs_sb_info *cifs_sb)
 {
return smb2_open_op_close(xid, tcon, cifs_sb, name, DELETE, FILE_OPEN,
- CREATE_NOT_FILE | CREATE_DELETE_ON_CLOSE,
- NULL, SMB2_OP_DELETE);
+ CREATE_NOT_FILE,
+ NULL, SMB2_OP_RMDIR);
 }
 
 int
diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c
index 09169fe..0ecc121 100644
--- a/fs/cifs/smb2pdu.c
+++ b/fs/cifs/smb2pdu.c
@@ -2381,6 +2381,22 @@ SMB2_rename(const unsigned int xid, struct cifs_tcon 
*tcon,
 }
 
 int
+SMB2_rmdir(const unsigned int xid, struct cifs_tcon *tcon,
+ u64 persistent_fid, u64 volatile_fid)
+{
+   __u8 delete_pending = 1;
+   void *data;
+   unsigned int size;
+
+   data = &delete_pending;
+   size = 1; /* sizeof __u8 */
+
+   return send_set_info(xid, tcon, persistent_fid, volatile_fid,
+   current->tgid, FILE_DISPOSITION_INFORMATION, 1, &data,
+   &size);
+}
+
+int
 SMB2_set_hardlink(const unsigned int xid, struct cifs_tcon *tcon,
  u64 persistent_fid, u64 volatile_fid, __le16 *target_file)
 {
diff --git a/fs/cifs/smb2proto.h b/fs/cifs/smb2proto.h
index 79dc650..9bc59f9 100644
--- a/fs/cifs/smb2proto.h
+++ b/fs/cifs/smb2proto.h
@@ -140,6 +140,8 @@ extern int SMB2_query_directory(const unsigned int xid, 
struct cifs_tcon *tcon,
 extern int SMB2_rename(const unsigned int xid, struct cifs_tcon *tcon,
   u64 persistent_fid, u64 volatile_fid,
   __le16 *target_file);
+extern int SMB2_rmdir(const unsigned int xid, struct cifs_tcon *tcon,
+ u64 persistent_fid, u64 volatile_fid);
 extern int SMB2_set_hardlink(const unsigned int xid, struct cifs_tcon *tcon,
 u64 persistent_fid, u64 volatile_fid,
 __le16 *target_file);
-- 
2.7.4



[PATCH 3.19.y-ckt 89/99] sunrpc: fix stripping of padded MIC tokens

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Trnka?= 

commit c0cb8bf3a8e4bd82e640862cdd8891400405cb89 upstream.

The length of the GSS MIC token need not be a multiple of four bytes.
It is then padded by XDR to a multiple of 4 B, but unwrap_integ_data()
would previously only trim mic.len + 4 B. The remaining up to three
bytes would then trigger a check in nfs4svc_decode_compoundargs(),
leading to a "garbage args" error and mount failure:

nfs4svc_decode_compoundargs: compound not properly padded!
nfsd: failed to decode arguments!

This would prevent older clients using the pre-RFC 4121 MIC format
(37-byte MIC including a 9-byte OID) from mounting exports from v3.9+
servers using krb5i.

The trimming was introduced by commit 4c190e2f913f ("sunrpc: trim off
trailing checksum before returning decrypted or integrity authenticated
buffer").

Fixes: 4c190e2f913f "unrpc: trim off trailing checksum..."
Signed-off-by: Tomáš Trnka 
Acked-by: Jeff Layton 
Signed-off-by: J. Bruce Fields 
Signed-off-by: Kamal Mostafa 
---
 net/sunrpc/auth_gss/svcauth_gss.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/net/sunrpc/auth_gss/svcauth_gss.c 
b/net/sunrpc/auth_gss/svcauth_gss.c
index 224a82f..96339ff 100644
--- a/net/sunrpc/auth_gss/svcauth_gss.c
+++ b/net/sunrpc/auth_gss/svcauth_gss.c
@@ -855,8 +855,8 @@ unwrap_integ_data(struct svc_rqst *rqstp, struct xdr_buf 
*buf, u32 seq, struct g
goto out;
if (svc_getnl(&buf->head[0]) != seq)
goto out;
-   /* trim off the mic at the end before returning */
-   xdr_buf_trim(buf, mic.len + 4);
+   /* trim off the mic and padding at the end before returning */
+   xdr_buf_trim(buf, round_up_to_quad(mic.len) + 4);
stat = 0;
 out:
kfree(mic.data);
-- 
2.7.4



[PATCH 3.19.y-ckt 98/99] powerpc/pseries: Fix PCI config address for DDW

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: Gavin Shan 

commit 8a934efe94347eee843aeea65bdec8077a79e259 upstream.

In commit 8445a87f7092 "powerpc/iommu: Remove the dependency on EEH
struct in DDW mechanism", the PE address was replaced with the PCI
config address in order to remove dependency on EEH. According to PAPR
spec, firmware (pHyp or QEMU) should accept "xxBBSSxx" format PCI config
address, not "BBSS" provided by the patch. Note that "BB" is PCI bus
number and "SS" is the combination of slot and function number.

This fixes the PCI address passed to DDW RTAS calls.

Fixes: 8445a87f7092 ("powerpc/iommu: Remove the dependency on EEH struct in DDW 
mechanism")
Reported-by: Guilherme G. Piccoli 
Signed-off-by: Gavin Shan 
Tested-by: Guilherme G. Piccoli 
Signed-off-by: Michael Ellerman 
Signed-off-by: Kamal Mostafa 
---
 arch/powerpc/platforms/pseries/iommu.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/powerpc/platforms/pseries/iommu.c 
b/arch/powerpc/platforms/pseries/iommu.c
index cad616e..0108bb7 100644
--- a/arch/powerpc/platforms/pseries/iommu.c
+++ b/arch/powerpc/platforms/pseries/iommu.c
@@ -839,7 +839,7 @@ static int query_ddw(struct pci_dev *dev, const u32 
*ddw_avail,
dn = pci_device_to_OF_node(dev);
pdn = PCI_DN(dn);
buid = pdn->phb->buid;
-   cfg_addr = (pdn->busno << 8) | pdn->devfn;
+   cfg_addr = ((pdn->busno << 16) | (pdn->devfn << 8));
 
ret = rtas_call(ddw_avail[0], 3, 5, (u32 *)query,
  cfg_addr, BUID_HI(buid), BUID_LO(buid));
@@ -868,7 +868,7 @@ static int create_ddw(struct pci_dev *dev, const u32 
*ddw_avail,
dn = pci_device_to_OF_node(dev);
pdn = PCI_DN(dn);
buid = pdn->phb->buid;
-   cfg_addr = (pdn->busno << 8) | pdn->devfn;
+   cfg_addr = ((pdn->busno << 16) | (pdn->devfn << 8));
 
do {
/* extra outputs are LIOBN and dma-addr (hi, lo) */
-- 
2.7.4



[PATCH 3.19.y-ckt 93/99] dma-debug: avoid spinlock recursion when disabling dma-debug

2016-07-07 Thread Kamal Mostafa
3.19.8-ckt23 -stable review patch.  If anyone has any objections, please let me 
know.

---8<

From: =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= 

commit 3017cd63f26fc655d56875aaf497153ba60e9edf upstream.

With netconsole (at least) the pr_err("...  disablingn") call can
recurse back into the dma-debug code, where it'll try to grab
free_entries_lock again.  Avoid the problem by doing the printk after
dropping the lock.

Link: 
http://lkml.kernel.org/r/1463678421-18683-1-git-send-email-ville.syrj...@linux.intel.com
Signed-off-by: Ville Syrjälä 
Signed-off-by: Andrew Morton 
Signed-off-by: Linus Torvalds 
Signed-off-by: Kamal Mostafa 
---
 lib/dma-debug.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/dma-debug.c b/lib/dma-debug.c
index 57f452f..a0a6210 100644
--- a/lib/dma-debug.c
+++ b/lib/dma-debug.c
@@ -657,9 +657,9 @@ static struct dma_debug_entry *dma_entry_alloc(void)
spin_lock_irqsave(&free_entries_lock, flags);
 
if (list_empty(&free_entries)) {
-   pr_err("DMA-API: debugging out of memory - disabling\n");
global_disable = true;
spin_unlock_irqrestore(&free_entries_lock, flags);
+   pr_err("DMA-API: debugging out of memory - disabling\n");
return NULL;
}
 
-- 
2.7.4



  1   2   3   4   5   6   7   8   9   10   >