4.15.12-stable review
Subsystems (3)
Greg Kroah-Hartman
maintainercover 4.15.12-stable review
This is the start of the stable review cycle for the 4.15.12 release. There are 52 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Wed Mar 21 18:07:15 UTC 2018. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.15.12-rc1.gz
or in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-4.15.y
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <[email protected]>
Linux 4.15.12-rc1
Al Cooper <[email protected]>
phy: phy-brcm-usb-init: Power down USB 3.0 PHY when XHCI disabled
Al Cooper <[email protected]>
phy: phy-brcm-usb-init: DRD mode can cause crash on startup
Al Cooper <[email protected]>
phy: phy-brcm-usb-init: Some Low Speed keyboards fail on 7271
Al Cooper <[email protected]>
phy: phy-brcm-usb: Fix two DT properties to match bindings doc
Yoshihiro Shimoda <[email protected]>
usb: gadget: udc: renesas_usb3: fix oops in renesas_usb3_remove()
Enric Balletbo i Serra <[email protected]>
usb: dwc3: of-simple: fix oops by unbalanced clk disable call
Manu Gautam <[email protected]>
usb: dwc3: core: Power-off core/PHYs on system_suspend in host mode
Thinh Nguyen <[email protected]>
usb: dwc3: Fix GDBGFIFOSPACE_TYPE values
Wei Yongjun <[email protected]>
USB: gadget: udc: Add missing platform_device_put() on error in bdc_pci_probe()
Amelie Delaunay <[email protected]>
dt-bindings: usb: fix the STM32F7 DWC2 OTG HS core binding
Amelie Delaunay <[email protected]>
usb: dwc2: fix STM32F7 USB OTG HS compatible
Bill Kuzeja <[email protected]>
scsi: qla2xxx: Fix crashes in qla2x00_probe_one on probe failure
Himanshu Madhani <[email protected]>
scsi: qla2xxx: Fix logo flag for qlt_free_session_done()
Quinn Tran <[email protected]>
scsi: qla2xxx: Fix NULL pointer access for fcport structure
Himanshu Madhani <[email protected]>
scsi: qla2xxx: Fix smatch warning in qla25xx_delete_{rsp|req}_que
Nikolay Borisov <[email protected]>
btrfs: Fix memory barriers usage with device stats counters
Zygo Blaxell <[email protected]>
btrfs: remove spurious WARN_ON(ref->count < 0) in find_parent_nodes
Nikolay Borisov <[email protected]>
btrfs: Fix use-after-free when cleaning up fs_devs with a single stale device
Hans van Kranenburg <[email protected]>
btrfs: alloc_chunk: fix DUP stripe size handling
Edmund Nadolski <[email protected]>
btrfs: add missing initialization in btrfs_check_shared
Dmitriy Gorokh <[email protected]>
btrfs: Fix NULL pointer exception in find_bio_stripe
Amir Goldstein <[email protected]>
xfs: preserve i_rdev when recycling a reclaimable inode
Israel Rukshin <[email protected]>
nvme: fix subsystem multiple controllers support check
Ard Biesheuvel <[email protected]>
irqchip/gic-v3-its: Ensure nr_ites >= nr_lpis
Tejun Heo <[email protected]>
RDMAVT: Fix synchronization around percpu_ref
Tejun Heo <[email protected]>
fs/aio: Use RCU accessors for kioctx_table->table[]
Tejun Heo <[email protected]>
fs/aio: Add explicit RCU grace period when freeing kioctx
Al Viro <[email protected]>
lock_parent() needs to recheck if dentry got __dentry_kill'ed under it
Marc Zyngier <[email protected]>
KVM: arm/arm64: vgic: Don't populate multiple LRs with the same vintid
Marc Zyngier <[email protected]>
kvm: arm/arm64: vgic-v3: Tighten synchronization for guests using v2 on v3
Christoffer Dall <[email protected]>
KVM: arm/arm64: Reset mapped IRQs on VM reset
Ard Biesheuvel <[email protected]>
KVM: arm/arm64: Reduce verbosity of KVM init log
Eric W. Biederman <[email protected]>
fs: Teach path_connected to handle nfs filesystems with multiple roots.
Michel Dänzer <[email protected]>
drm/amdgpu/dce: Don't turn off DP sink when disconnected
Christian König <[email protected]>
drm/radeon: fix prime teardown order
Christian König <[email protected]>
drm/amdgpu: fix prime teardown order
Māris Nartišs <[email protected]>
drm/nouveau/mmu: ALIGN_DOWN correct variable
Lukas Wunner <[email protected]>
drm/nouveau/bl: Fix oops on driver unbind
Takashi Iwai <[email protected]>
ALSA: seq: Clear client entry before deleting else at closing
Takashi Iwai <[email protected]>
ALSA: seq: Fix possible UAF in snd_seq_check_queue()
Takashi Iwai <[email protected]>
ALSA: hda - Revert power_save option default value
Takashi Iwai <[email protected]>
ALSA: pcm: Fix UAF in snd_pcm_oss_get_formats()
John David Anglin <[email protected]>
parisc: Handle case where flush_cache_range is called with no context
Toshi Kani <[email protected]>
x86/mm: Fix vmalloc_fault to use pXd_large
Tom Lendacky <[email protected]>
KVM: x86: Fix device passthrough when SME is active
Alexander Sergeyev <[email protected]>
x86/speculation: Remove Skylake C2 from Speculation Control microcode blacklist
Andy Whitcroft <[email protected]>
x86/speculation, objtool: Annotate indirect calls/jumps for objtool on 32-bit kernels
Andy Lutomirski <[email protected]>
x86/vm86/32: Fix POPF emulation
Andy Lutomirski <[email protected]>
selftests/x86/entry_from_vm86: Add test cases for POPF
Andy Lutomirski <[email protected]>
selftests/x86/entry_from_vm86: Exit with 1 if we fail
Kirill A. Shutemov <[email protected]>
x86/cpufeatures: Add Intel PCONFIG cpufeature
Kirill A. Shutemov <[email protected]>
x86/cpufeatures: Add Intel Total Memory Encryption cpufeature
-------------
Diffstat:
Documentation/devicetree/bindings/usb/dwc2.txt | 2 +- Makefile | 4 +- arch/parisc/kernel/cache.c | 41 +++++++++--- arch/x86/include/asm/cpufeatures.h | 2 + arch/x86/include/asm/nospec-branch.h | 5 +- arch/x86/kernel/cpu/intel.c | 3 +- arch/x86/kernel/vm86_32.c | 3 +- arch/x86/kvm/mmu.c | 4 +- arch/x86/mm/fault.c | 6 +- drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c | 31 ++++----- drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 2 - drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 2 + drivers/gpu/drm/nouveau/nouveau_backlight.c | 4 +- drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmm.c | 2 +- drivers/gpu/drm/radeon/radeon_gem.c | 2 - drivers/gpu/drm/radeon/radeon_object.c | 2 + drivers/infiniband/sw/rdmavt/mr.c | 10 +-- drivers/irqchip/irq-gic-v3-its.c | 9 ++- drivers/nvme/host/core.c | 18 +++++- drivers/phy/broadcom/phy-brcm-usb-init.c | 22 +++---- drivers/phy/broadcom/phy-brcm-usb.c | 4 +- drivers/scsi/qla2xxx/qla_init.c | 13 ++-- drivers/scsi/qla2xxx/qla_mid.c | 6 +- drivers/scsi/qla2xxx/qla_os.c | 59 ++++++++++------- drivers/scsi/qla2xxx/qla_target.c | 1 + drivers/usb/dwc2/params.c | 6 +- drivers/usb/dwc3/core.c | 36 ++++++----- drivers/usb/dwc3/core.h | 16 ++--- drivers/usb/dwc3/dwc3-of-simple.c | 1 + drivers/usb/gadget/udc/bdc/bdc_pci.c | 1 + drivers/usb/gadget/udc/renesas_usb3.c | 2 +- fs/aio.c | 44 ++++++++----- fs/btrfs/backref.c | 12 +++- fs/btrfs/raid56.c | 1 + fs/btrfs/volumes.c | 30 ++++++--- fs/btrfs/volumes.h | 12 ++++ fs/dcache.c | 11 +++- fs/namei.c | 5 +- fs/nfs/super.c | 2 + fs/xfs/xfs_icache.c | 2 + include/kvm/arm_vgic.h | 1 + include/linux/fs.h | 1 + include/linux/irqchip/arm-gic-v3.h | 1 + include/linux/irqchip/arm-gic.h | 1 + sound/core/oss/pcm_oss.c | 10 +-- sound/core/seq/seq_clientmgr.c | 4 +- sound/core/seq/seq_prioq.c | 28 ++++----- sound/core/seq/seq_prioq.h | 6 +- sound/core/seq/seq_queue.c | 28 +++------ sound/pci/hda/hda_intel.c | 9 ++- tools/testing/selftests/x86/entry_from_vm86.c | 32 ++++++++-- virt/kvm/arm/arch_timer.c | 6 +- virt/kvm/arm/hyp/vgic-v3-sr.c | 3 +- virt/kvm/arm/mmu.c | 6 +- virt/kvm/arm/vgic/vgic-v2.c | 11 +++- virt/kvm/arm/vgic/vgic-v3.c | 9 ++- virt/kvm/arm/vgic/vgic.c | 87 +++++++++++++++++++++----- virt/kvm/arm/vgic/vgic.h | 2 + 58 files changed, 461 insertions(+), 222 deletions(-)
Greg Kroah-Hartman
maintainerPATCH 1/52 x86/cpufeatures: Add Intel Total Memory Encryption cpufeature
4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kirill A. Shutemov <[email protected]>
commit 1da961d72ab0cfbe8b7c26cba731dc2bb6b9494b upstream.
CPUID.0x7.0x0:ECX[13] indicates whether CPU supports Intel Total Memory Encryption.
--- arch/x86/include/asm/cpufeatures.h | 1 + 1 file changed, 1 insertion(+)
arch/x86/include/asm/cpufeatures.h +1 -0
@@ -314,6 +314,7 @@#define X86_FEATURE_VPCLMULQDQ (16*32+10)/* Carry-Less Multiplication Double Quadword */ #define X86_FEATURE_AVX512_VNNI (16*32+11)/* Vector Neural Network Instructions */ #define X86_FEATURE_AVX512_BITALG (16*32+12)/* Support for VPOPCNT[B,W] and VPSHUF-BITQMB instructions */ +#define X86_FEATURE_TME (16*32+13)/* Intel Total Memory Encryption */ #define X86_FEATURE_AVX512_VPOPCNTDQ (16*32+14)/* POPCNT for vectors of DW/QW */ #define X86_FEATURE_LA57 (16*32+16)/* 5-level page tables */ #define X86_FEATURE_RDPID (16*32+22)/* RDPID instruction */
Greg Kroah-Hartman
maintainerPATCH 2/52 x86/cpufeatures: Add Intel PCONFIG cpufeature
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kirill A. Shutemov <[email protected]>
commit 7958b2246fadf54b7ff820a2a5a2c5ca1554716f upstream.
CPUID.0x7.0x0:EDX[18] indicates whether Intel CPU support PCONFIG instruction.
--- arch/x86/include/asm/cpufeatures.h | 1 + 1 file changed, 1 insertion(+)
arch/x86/include/asm/cpufeatures.h +1 -0
@@ -327,6 +327,7 @@/* Intel-defined CPU features, CPUID level 0x00000007:0 (EDX), word 18 */ #define X86_FEATURE_AVX512_4VNNIW (18*32+ 2)/* AVX-512 Neural Network Instructions */ #define X86_FEATURE_AVX512_4FMAPS (18*32+ 3)/* AVX-512 Multiply Accumulation Single precision */ +#define X86_FEATURE_PCONFIG (18*32+18)/* Intel PCONFIG */ #define X86_FEATURE_SPEC_CTRL (18*32+26)/* "" Speculation Control (IBRS + IBPB) */ #define X86_FEATURE_INTEL_STIBP (18*32+27)/* "" Single Thread Indirect Branch Predictors */ #define X86_FEATURE_ARCH_CAPABILITIES (18*32+29)/* IA32_ARCH_CAPABILITIES MSR (Intel) */
Greg Kroah-Hartman
maintainerPATCH 3/52 selftests/x86/entry_from_vm86: Exit with 1 if we fail
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Andy Lutomirski <[email protected]>
commit 327d53d005ca47b10eae940616ed11c569f75a9b upstream.
Fix a logic error that caused the test to exit with 0 even if test cases failed.
--- tools/testing/selftests/x86/entry_from_vm86.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
tools/testing/selftests/x86/entry_from_vm86.c +1 -1
@@ -318,7 +318,7 @@ int main(void)clearhandler (SIGSEGV );/* Make sure nothing explodes if we fork. */ -if (fork () >0 ) +if (fork () ==0 )return 0 ;return (nerrs ==0 ?0 :1 );
Greg Kroah-Hartman
maintainerPATCH 4/52 selftests/x86/entry_from_vm86: Add test cases for POPF
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Andy Lutomirski <[email protected]>
commit 78393fdde2a456cafa414b171c90f26a3df98b20 upstream.
POPF is currently broken -- add tests to catch the error. This results in:
[RUN] POPF with VIP set and IF clear from vm86 mode
[INFO] Exited vm86 mode due to STI
[FAIL] Incorrect return reason (started at eip = 0xd, ended at eip = 0xf)
because POPF currently fails to check IF before reporting a pending interrupt.
This patch also makes the FAIL message a bit more informative.
--- tools/testing/selftests/x86/entry_from_vm86.c | 30 +++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-)
tools/testing/selftests/x86/entry_from_vm86.c +27 -3
@@ -95,6 +95,10 @@ asm ("int3\n\t" "vmcode_int80:\n\t" "int $0x80\n\t" +"vmcode_popf_hlt:\n\t" +"push %ax\n\t" +"popf\n\t" +"hlt\n\t" "vmcode_umip:\n\t" /* addressing via displacements */ "smsw (2052)\n\t"
@@ -124,8 +128,8 @@ asm (extern unsigned char vmcode[], end_vmcode[];extern unsigned char vmcode_bound[], vmcode_sysenter[], vmcode_syscall[], - vmcode_sti[], vmcode_int3[], vmcode_int80[], vmcode_umip[], - vmcode_umip_str[], vmcode_umip_sldt[]; + vmcode_sti[], vmcode_int3[], vmcode_int80[], vmcode_popf_hlt[], + vmcode_umip[], vmcode_umip_str[], vmcode_umip_sldt[];/* Returns false if the test was skipped. */ static bool do_test(struct vm86plus_struct *v86, unsigned long eip,
@@ -175,7 +179,7 @@ static bool do_test(struct vm86plus_stru (VM86_TYPE(ret) == rettype && VM86_ARG(ret) == retarg)) { printf("[OK]\tReturned correctly\n"); } else { -printf ("[FAIL]\tIncorrect return reason\n" ); +printf ("[FAIL]\tIncorrect return reason (started at eip = 0x%lx, ended at eip = 0x%lx)\n" , eip, v86->regs.eip); nerrs++; }
@@ -264,6 +268,9 @@ int main(void) v86.regs.ds = load_addr /16 ; v86.regs.es = load_addr /16 ; +/* Use the end of the page as our stack. */ + v86.regs.esp =4096 ; +assert ((v86.regs.cs &3 ) ==0 );/* Looks like RPL = 0 */ /* #BR -- should deliver SIG??? */
@@ -295,6 +302,23 @@ int main(void) v86.regs.eflags &= ~X86_EFLAGS_IF ;do_test (&v86, vmcode_sti - vmcode,VM86_STI ,0 ,"STI with VIP set" ); +/* POPF with VIP set but IF clear: should not trap */ + v86.regs.eflags =X86_EFLAGS_VIP ; + v86.regs.eax =0 ; +do_test (&v86, vmcode_popf_hlt - vmcode,VM86_UNKNOWN ,0 ,"POPF with VIP set and IF clear" ); + +/* POPF with VIP set and IF set: should trap */ + v86.regs.eflags =X86_EFLAGS_VIP ; + v86.regs.eax =X86_EFLAGS_IF ; +do_test (&v86, vmcode_popf_hlt - vmcode,VM86_STI ,0 ,"POPF with VIP and IF set" ); + +/* POPF with VIP clear and IF set: should not trap */ + v86.regs.eflags =0 ; + v86.regs.eax =X86_EFLAGS_IF ; +do_test (&v86, vmcode_popf_hlt - vmcode,VM86_UNKNOWN ,0 ,"POPF with VIP clear and IF set" ); + + v86.regs.eflags =0 ; +/* INT3 -- should cause #BP */ do_test (&v86, vmcode_int3 - vmcode,VM86_TRAP ,3 ,"INT3" );
Greg Kroah-Hartman
maintainerPATCH 5/52 x86/vm86/32: Fix POPF emulation
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Andy Lutomirski <[email protected]>
commit b5069782453459f6ec1fdeb495d9901a4545fcb5 upstream.
POPF would trap if VIP was set regardless of whether IF was set. Fix it.
--- arch/x86/kernel/vm86_32.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
arch/x86/kernel/vm86_32.c +2 -1
@@ -727,7 +727,8 @@ void handle_vm86_fault(struct kernel_vm8return ; check_vip: -if (VEFLAGS &X86_EFLAGS_VIP ) { +if ((VEFLAGS & (X86_EFLAGS_VIP |X86_EFLAGS_VIF )) == + (X86_EFLAGS_VIP |X86_EFLAGS_VIF )) {save_v86_state (regs,VM86_STI );return ; }
Greg Kroah-Hartman
maintainerPATCH 6/52 x86/speculation, objtool: Annotate indirect calls/jumps for objtool on 32-bit kernels
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Andy Whitcroft <[email protected]>
commit a14bff131108faf50cc0cf864589fd71ee216c96 upstream.
In the following commit:
9e0e3c5130e9 ("x86/speculation, objtool: Annotate indirect calls/jumps for objtool")
... we added annotations for CALL_NOSPEC/JMP_NOSPEC on 64-bit x86 kernels, but we did not annotate the 32-bit path.
Annotate it similarly.
--- arch/x86/include/asm/nospec-branch.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
arch/x86/include/asm/nospec-branch.h +4 -1
@@ -183,7 +183,10 @@* otherwise we'll run out of registers. We don't care about CET * here, anyway. */ -# define CALL_NOSPEC ALTERNATIVE("call *%[thunk_target]\n", \ +# define CALL_NOSPEC \ + ALTERNATIVE( \ + ANNOTATE_RETPOLINE_SAFE \ + "call *%[thunk_target]\n", \ " jmp 904f;\n" \ " .align 16\n" \ "901: call 903f;\n" \
Greg Kroah-Hartman
maintainerPATCH 7/52 x86/speculation: Remove Skylake C2 from Speculation Control microcode blacklist
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alexander Sergeyev <[email protected]>
commit e3b3121fa8da94cb20f9e0c64ab7981ae47fd085 upstream.
In accordance with Intel's microcode revision guidance from March 6 MCU rev 0xc2 is cleared on both Skylake H/S and Skylake Xeon E3 processors that share CPUID 506E3.
--- arch/x86/kernel/cpu/intel.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
arch/x86/kernel/cpu/intel.c +1 -2
@@ -105,7 +105,7 @@ static void probe_xeon_phi_r3mwait(struc/* * Early microcode releases for the Spectre v2 mitigation were broken. * Information taken from; -* - https://newsroom.intel.com/wp-content/uploads/sites/11/2018/01/microcode-update-guidance.pdf +* - https://newsroom.intel.com/wp-content/uploads/sites/11/2018/03/microcode-update-guidance.pdf * - https://kb.vmware.com/s/article/52345 * - Microcode revisions observed in the wild * - Release note from 20180108 microcode release
@@ -123,7 +123,6 @@ static const struct sku_microcode spectr { INTEL_FAM6_KABYLAKE_MOBILE, 0x09, 0x80 }, { INTEL_FAM6_SKYLAKE_X, 0x03, 0x0100013e }, { INTEL_FAM6_SKYLAKE_X, 0x04, 0x0200003c }, - { INTEL_FAM6_SKYLAKE_DESKTOP, 0x03, 0xc2 }, { INTEL_FAM6_BROADWELL_CORE, 0x04, 0x28 }, { INTEL_FAM6_BROADWELL_GT3E, 0x01, 0x1b }, { INTEL_FAM6_BROADWELL_XEON_D, 0x02, 0x14 },
Greg Kroah-Hartman
maintainerPATCH 8/52 KVM: x86: Fix device passthrough when SME is active
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tom Lendacky <[email protected]>
commit daaf216c06fba4ee4dc3f62715667da929d68774 upstream.
When using device passthrough with SME active, the MMIO range that is mapped for the device should not be mapped encrypted. Add a check in set_spte() to insure that a page is not mapped encrypted if that page is a device MMIO page as indicated by kvm_is_mmio_pfn().
--- arch/x86/kvm/mmu.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
arch/x86/kvm/mmu.c +3 -1
@@ -2758,8 +2758,10 @@ static int set_spte(struct kvm_vcpu *vcpelse pte_access &= ~ACC_WRITE_MASK ; +if (!kvm_is_mmio_pfn (pfn)) + spte |= shadow_me_mask; + spte |= (u64 )pfn <<PAGE_SHIFT ; - spte |= shadow_me_mask;if (pte_access &ACC_WRITE_MASK ) {
Greg Kroah-Hartman
maintainerPATCH 9/52 x86/mm: Fix vmalloc_fault to use pXd_large
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Toshi Kani <[email protected]>
commit 18a955219bf7d9008ce480d4451b6b8bf4483a22 upstream.
Gratian Crisan reported that vmalloc_fault() crashes when CONFIG_HUGETLBFS is not set since the function inadvertently uses pXn_huge(), which always return 0 in this case. ioremap() does not depend on CONFIG_HUGETLBFS.
Fix vmalloc_fault() to call pXd_large() instead.
--- arch/x86/mm/fault.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
arch/x86/mm/fault.c +3 -3
@@ -330,7 +330,7 @@ static noinline int vmalloc_fault(unsignif (!pmd_k)return -1 ; -if (pmd_huge (*pmd_k)) +if (pmd_large (*pmd_k))return 0 ; pte_k =pte_offset_kernel (pmd_k, address);
@@ -475,7 +475,7 @@ static noinline int vmalloc_fault(unsignif (pud_none (*pud) ||pud_pfn (*pud) !=pud_pfn (*pud_ref))BUG (); -if (pud_huge (*pud)) +if (pud_large (*pud))return 0 ; pmd =pmd_offset (pud, address);
@@ -486,7 +486,7 @@ static noinline int vmalloc_fault(unsignif (pmd_none (*pmd) ||pmd_pfn (*pmd) !=pmd_pfn (*pmd_ref))BUG (); -if (pmd_huge (*pmd)) +if (pmd_large (*pmd))return 0 ; pte_ref =pte_offset_kernel (pmd_ref, address);
Greg Kroah-Hartman
maintainerPATCH 10/52 parisc: Handle case where flush_cache_range is called with no context
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: John David Anglin <[email protected]>
commit 9ef0f88fe5466c2ca1d2975549ba6be502c464c1 upstream.
Just when I had decided that flush_cache_range() was always called with a valid context, Helge reported two cases where the "BUG_ON(!vma->vm_mm->context);" was hit on the phantom buildd:
kernel BUG at /mnt/sdb6/linux/linux-4.15.4/arch/parisc/kernel/cache.c:587!
CPU: 1 PID: 3254 Comm: kworker/1:2 Tainted: G D 4.15.0-1-parisc64-smp #1 Debian 4.15.4-1+b1 Workqueue: events free_ioctx IAOQ[0]: flush_cache_range+0x164/0x168 IAOQ[1]: flush_cache_page+0x0/0x1c8 RP(r2): unmap_page_range+0xae8/0xb88 Backtrace: [<00000000404a6980>] unmap_page_range+0xae8/0xb88 [<00000000404a6ae0>] unmap_single_vma+0xc0/0x188 [<00000000404a6cdc>] zap_page_range_single+0x134/0x1f8 [<00000000404a702c>] unmap_mapping_range+0x1cc/0x208 [<0000000040461518>] truncate_pagecache+0x98/0x108 [<0000000040461624>] truncate_setsize+0x9c/0xb8 [<00000000405d7f30>] put_aio_ring_file+0x80/0x100 [<00000000405d803c>] aio_free_ring+0x8c/0x290 [<00000000405d82c0>] free_ioctx+0x80/0x180 [<0000000040284e6c>] process_one_work+0x21c/0x668 [<00000000402854c4>] worker_thread+0x20c/0x778 [<0000000040291d44>] kthread+0x2d4/0x2e0 [<0000000040204020>] end_fault_vector+0x20/0xc0
This indicates that we need to handle the no context case in flush_cache_range() as we do in flush_cache_mm().
In thinking about this, I realized that we don't need to flush the TLB when there is no context. So, I added context checks to the large flush cases in flush_cache_mm() and flush_cache_range(). The large flush case occurs frequently in flush_cache_mm() and the change should improve fork performance.
The v2 version of this change removes the BUG_ON from flush_cache_page() by skipping the TLB flush when there is no context. I also added code to flush the TLB in flush_cache_mm() and flush_cache_range() when we have a context that's not current. Now all three routines handle TLB flushes in a similar manner.
--- arch/parisc/kernel/cache.c | 41 ++++++++++++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 9 deletions(-)
arch/parisc/kernel/cache.c +32 -9
@@ -543,7 +543,8 @@ void flush_cache_mm(struct mm_struct *mmrp3440, etc. So, avoid it if the mm isn't too big. */ if ((!IS_ENABLED (CONFIG_SMP ) || !arch_irqs_disabled ()) &&mm_total_size (mm) >= parisc_cache_flush_threshold) { -flush_tlb_all (); +if (mm->context) +flush_tlb_all ();flush_cache_all ();return ; }
@@ -571,6 +572,8 @@ void flush_cache_mm(struct mm_struct *mm pfn =pte_pfn (*ptep);if (!pfn_valid (pfn))continue ; +if (unlikely (mm->context)) +flush_tlb_page (vma, addr);__flush_cache_page (vma, addr,PFN_PHYS (pfn)); } }
@@ -579,26 +582,46 @@ void flush_cache_mm(struct mm_struct *mmvoid flush_cache_range (struct vm_area_struct *vma,unsigned long start,unsigned long end) { +pgd_t *pgd; +unsigned long addr; +if ((!IS_ENABLED (CONFIG_SMP ) || !arch_irqs_disabled ()) && end - start >= parisc_cache_flush_threshold) { -flush_tlb_range (vma, start, end); +if (vma->vm_mm->context) +flush_tlb_range (vma, start, end);flush_cache_all ();return ; } -flush_user_dcache_range_asm (start, end); -if (vma->vm_flags &VM_EXEC ) -flush_user_icache_range_asm (start, end); -flush_tlb_range (vma, start, end); +if (vma->vm_mm->context ==mfsp (3 )) { +flush_user_dcache_range_asm (start, end); +if (vma->vm_flags &VM_EXEC ) +flush_user_icache_range_asm (start, end); +flush_tlb_range (vma, start, end); +return ; + } + + pgd = vma->vm_mm->pgd; +for (addr = vma->vm_start; addr < vma->vm_end; addr +=PAGE_SIZE ) { +unsigned long pfn; +pte_t *ptep =get_ptep (pgd, addr); +if (!ptep) +continue ; + pfn =pte_pfn (*ptep); +if (pfn_valid (pfn)) { +if (unlikely (vma->vm_mm->context)) +flush_tlb_page (vma, addr); +__flush_cache_page (vma, addr,PFN_PHYS (pfn)); + } + } }void flush_cache_page (struct vm_area_struct *vma,unsigned long vmaddr,unsigned long pfn) { -BUG_ON (!vma->vm_mm->context); -if (pfn_valid (pfn)) { -flush_tlb_page (vma, vmaddr); +if (likely (vma->vm_mm->context)) +flush_tlb_page (vma, vmaddr);__flush_cache_page (vma, vmaddr,PFN_PHYS (pfn)); } }
Greg Kroah-Hartman
maintainerPATCH 11/52 ALSA: pcm: Fix UAF in snd_pcm_oss_get_formats()
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Takashi Iwai <[email protected]>
commit 01c0b4265cc16bc1f43f475c5944c55c10d5768f upstream.
snd_pcm_oss_get_formats() has an obvious use-after-free around snd_mask_test() calls, as spotted by syzbot. The passed format_mask argument is a pointer to the hw_params object that is freed before the loop. What a surprise that it has been present since the original code of decades ago...
--- sound/core/oss/pcm_oss.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)
sound/core/oss/pcm_oss.c +6 -4
@@ -1762,10 +1762,9 @@ static int snd_pcm_oss_get_formats(strucreturn -ENOMEM ;_snd_pcm_hw_params_any (params); err =snd_pcm_hw_refine (substream, params); - format_mask =hw_param_mask_c (params,SNDRV_PCM_HW_PARAM_FORMAT ); -kfree (params);if (err <0 ) -return err; + goto error; + format_mask =hw_param_mask_c (params,SNDRV_PCM_HW_PARAM_FORMAT );for (fmt =0 ; fmt <32 ; ++fmt) {if (snd_mask_test (format_mask, fmt)) {int f =snd_pcm_oss_format_to (fmt);
@@ -1773,7 +1772,10 @@ static int snd_pcm_oss_get_formats(struc formats |= f; } } -return formats; + + error: +kfree (params); +return err <0 ? err : formats; }static int snd_pcm_oss_set_format (struct snd_pcm_oss_file *pcm_oss_file,int format)
Greg Kroah-Hartman
maintainerPATCH 12/52 ALSA: hda - Revert power_save option default value
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Takashi Iwai <[email protected]>
commit 40088dc4e1ead7df31728c73f5b51d71da18831d upstream.
With the commit 1ba8f9d30817 ("ALSA: hda: Add a power_save blacklist"), we changed the default value of power_save option to -1 for processing the power-save blacklist.
Unfortunately, this seems breaking user-space applications that actually read the power_save parameter value via sysfs and judge / adjust the power-saving status. They see the value -1 as if the power-save is turned off, although the actual value is taken from CONFIG_SND_HDA_POWER_SAVE_DEFAULT and it can be a positive.
So, overall, passing -1 there was no good idea. Let's partially revert it -- at least for power_save option default value is restored again to CONFIG_SND_HDA_POWER_SAVE_DEFAULT. Meanwhile, in this patch, we keep the blacklist behavior and make is adjustable via the new option, pm_blacklist.
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=199073
--- sound/pci/hda/hda_intel.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)
sound/pci/hda/hda_intel.c +6 -3
@@ -181,11 +181,15 @@ static const struct kernel_param_ops par };#define param_check_xint param_check_int -static int power_save =-1 ; +static int power_save =CONFIG_SND_HDA_POWER_SAVE_DEFAULT ;module_param (power_save, xint,0644 );MODULE_PARM_DESC (power_save,"Automatic power-saving timeout " "(in second, 0 = disable)." ); +static bool pm_blacklist = true; +module_param (pm_blacklist, bool,0644 ); +MODULE_PARM_DESC (pm_blacklist,"Enable power-management blacklist" ); +/* reset the HD-audio controller in power save mode. * this may give more power-saving, but will take longer time to * wake up.
@@ -2300,10 +2304,9 @@ static int azx_probe_continue(struct azx val = power_save;#ifdef CONFIG_PM -if (val ==-1 ) { +if (pm_blacklist) {const struct snd_pci_quirk *q; - val =CONFIG_SND_HDA_POWER_SAVE_DEFAULT ; q =snd_pci_quirk_lookup (chip->pci, power_save_blacklist);if (q && val) { dev_info(chip->card->dev, "device %04x:%04x is on the power_save blacklist, forcing power_save to 0\n",
Greg Kroah-Hartman
maintainerPATCH 13/52 ALSA: seq: Fix possible UAF in snd_seq_check_queue()
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Takashi Iwai <[email protected]>
commit d0f833065221cbfcbadf19fd4102bcfa9330006a upstream.
Although we've covered the races between concurrent write() and ioctl() in the previous patch series, there is still a possible UAF in the following scenario:
A: user client closed B: timer irq
-> snd_seq_release() -> snd_seq_timer_interrupt()
-> snd_seq_free_client() -> snd_seq_check_queue()
-> cell = snd_seq_prioq_cell_peek()
-> snd_seq_prioq_leave()
.... removing all cells
-> snd_seq_pool_done()
.... vfree()
-> snd_seq_compare_tick_time(cell)
... OopsSo the problem is that a cell is peeked and accessed without any protection until it's retrieved from the queue again via snd_seq_prioq_cell_out().
This patch tries to address it, also cleans up the code by a slight refactoring. snd_seq_prioq_cell_out() now receives an extra pointer argument. When it's non-NULL, the function checks the event timestamp with the given pointer. The caller needs to pass the right reference either to snd_seq_tick or snd_seq_realtime depending on the event timestamp type.
A good news is that the above change allows us to remove the snd_seq_prioq_cell_peek(), too, thus the patch actually reduces the code size.
--- sound/core/seq/seq_prioq.c | 28 ++++++++++++++-------------- sound/core/seq/seq_prioq.h | 6 ++---- sound/core/seq/seq_queue.c | 28 +++++++++------------------- 3 files changed, 25 insertions(+), 37 deletions(-)
sound/core/seq/seq_prioq.c +14 -14
@@ -87,7 +87,7 @@ void snd_seq_prioq_delete(struct snd_seqif (f->cells >0 ) {/* drain prioQ */ while (f->cells >0 ) -snd_seq_cell_free (snd_seq_prioq_cell_out (f)); +snd_seq_cell_free (snd_seq_prioq_cell_out (f,NULL )); }kfree (f);
@@ -214,8 +214,18 @@ int snd_seq_prioq_cell_in(struct snd_seqreturn 0 ; } +/* return 1 if the current time >= event timestamp */ +static int event_is_ready (struct snd_seq_event *ev,void *current_time) +{ +if ((ev->flags &SNDRV_SEQ_TIME_STAMP_MASK ) ==SNDRV_SEQ_TIME_STAMP_TICK ) +return snd_seq_compare_tick_time (current_time, &ev->time.tick); +else +return snd_seq_compare_real_time (current_time, &ev->time.time); +} +/* dequeue cell from prioq */ -struct snd_seq_event_cell *snd_seq_prioq_cell_out (struct snd_seq_prioq *f) +struct snd_seq_event_cell *snd_seq_prioq_cell_out (struct snd_seq_prioq *f, +void *current_time) {struct snd_seq_event_cell *cell;unsigned long flags;
@@ -227,6 +237,8 @@ struct snd_seq_event_cell *snd_seq_prioqspin_lock_irqsave (&f->lock, flags); cell = f->head; +if (cell && current_time && !event_is_ready (&cell->event, current_time)) + cell =NULL ;if (cell) { f->head = cell->next;
@@ -252,18 +264,6 @@ int snd_seq_prioq_avail(struct snd_seq_preturn f->cells; } - -/* peek at cell at the head of the prioq */ -struct snd_seq_event_cell *snd_seq_prioq_cell_peek (struct snd_seq_prioq * f) -{ -if (f ==NULL ) { -pr_debug ("ALSA: seq: snd_seq_prioq_cell_in() called with NULL prioq\n" ); -return NULL ; - } -return f->head; -} - -static inline int prioq_match (struct snd_seq_event_cell *cell,int client,int timestamp) {
sound/core/seq/seq_prioq.h +2 -4
@@ -44,14 +44,12 @@ void snd_seq_prioq_delete(struct snd_seqint snd_seq_prioq_cell_in (struct snd_seq_prioq *f,struct snd_seq_event_cell *cell);/* dequeue cell from prioq */ -struct snd_seq_event_cell *snd_seq_prioq_cell_out (struct snd_seq_prioq *f); +struct snd_seq_event_cell *snd_seq_prioq_cell_out (struct snd_seq_prioq *f, +void *current_time);/* return number of events available in prioq */ int snd_seq_prioq_avail (struct snd_seq_prioq *f); -/* peek at cell at the head of the prioq */ -struct snd_seq_event_cell *snd_seq_prioq_cell_peek (struct snd_seq_prioq *f); -/* client left queue */ void snd_seq_prioq_leave (struct snd_seq_prioq *f,int client,int timestamp);
sound/core/seq/seq_queue.c +9 -19
@@ -277,30 +277,20 @@ void snd_seq_check_queue(struct snd_seq_ __again:/* Process tick queue... */ -while ((cell =snd_seq_prioq_cell_peek (q->tickq)) !=NULL ) { -if (snd_seq_compare_tick_time (&q->timer->tick.cur_tick, - &cell->event.time.tick)) { - cell =snd_seq_prioq_cell_out (q->tickq); -if (cell) -snd_seq_dispatch_event (cell, atomic, hop); - }else { -/* event remains in the queue */ +for (;;) { + cell =snd_seq_prioq_cell_out (q->tickq, + &q->timer->tick.cur_tick); +if (!cell)break ; - } +snd_seq_dispatch_event (cell, atomic, hop); } -/* Process time queue... */ -while ((cell =snd_seq_prioq_cell_peek (q->timeq)) !=NULL ) { -if (snd_seq_compare_real_time (&q->timer->cur_time, - &cell->event.time.time)) { - cell =snd_seq_prioq_cell_out (q->timeq); -if (cell) -snd_seq_dispatch_event (cell, atomic, hop); - }else { -/* event remains in the queue */ +for (;;) { + cell =snd_seq_prioq_cell_out (q->timeq, &q->timer->cur_time); +if (!cell)break ; - } +snd_seq_dispatch_event (cell, atomic, hop); }/* free lock */
Greg Kroah-Hartman
maintainerPATCH 14/52 ALSA: seq: Clear client entry before deleting else at closing
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Takashi Iwai <[email protected]>
commit a2ff19f7b70118ced291a28d5313469914de451b upstream.
When releasing a client, we need to clear the clienttab[] entry at first, then call snd_seq_queue_client_leave(). Otherwise, the in-flight cell in the queue might be picked up by the timer interrupt via snd_seq_check_queue() before calling snd_seq_queue_client_leave(), and it's delivered to another queue while the client is clearing queues. This may eventually result in an uncleared cell remaining in a queue, and the later snd_seq_pool_delete() may need to wait for a long time until the event gets really processed.
By moving the clienttab[] clearance at the beginning of release, any event delivery of a cell belonging to this client will fail at a later point, since snd_seq_client_ptr() returns NULL. Thus the cell that was picked up by the timer interrupt will be returned immediately without further delivery, and the long stall of snd_seq_delete_pool() can be avoided, too.
--- sound/core/seq/seq_clientmgr.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
sound/core/seq/seq_clientmgr.c +2 -2
@@ -255,12 +255,12 @@ static int seq_free_client1(struct snd_sif (!client)return 0 ; -snd_seq_delete_all_ports (client); -snd_seq_queue_client_leave (client->number);spin_lock_irqsave (&clients_lock, flags); clienttablock[client->number] =1 ; clienttab[client->number] =NULL ;spin_unlock_irqrestore (&clients_lock, flags); +snd_seq_delete_all_ports (client); +snd_seq_queue_client_leave (client->number);snd_use_lock_sync (&client->use_lock);snd_seq_queue_client_termination (client->number);if (client->pool)
Greg Kroah-Hartman
maintainerPATCH 15/52 drm/nouveau/bl: Fix oops on driver unbind
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Lukas Wunner <[email protected]>
commit 76f2e2bc627f7d08360ac731b6277d744d4eb599 upstream.
Unbinding nouveau on a dual GPU MacBook Pro oopses because we iterate over the bl_connectors list in nouveau_backlight_exit() but skipped initializing it in nouveau_backlight_init(). Stacktrace for posterity:
BUG: unable to handle kernel NULL pointer dereference at 0000000000000010
IP: nouveau_backlight_exit+0x2b/0x70 [nouveau]
nouveau_display_destroy+0x29/0x80 [nouveau]
nouveau_drm_unload+0x65/0xe0 [nouveau]
drm_dev_unregister+0x3c/0xe0 [drm]
drm_put_dev+0x2e/0x60 [drm]
nouveau_drm_device_remove+0x47/0x70 [nouveau]
pci_device_remove+0x36/0xb0
device_release_driver_internal+0x157/0x220
driver_detach+0x39/0x70
bus_remove_driver+0x51/0xd0
pci_unregister_driver+0x2a/0xa0
nouveau_drm_exit+0x15/0xfb0 [nouveau]
SyS_delete_module+0x18c/0x290
system_call_fast_compare_end+0xc/0x6f--- drivers/gpu/drm/nouveau/nouveau_backlight.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/gpu/drm/nouveau/nouveau_backlight.c +2 -2
@@ -268,13 +268,13 @@ nouveau_backlight_init(struct drm_devicestruct nvif_device *device = &drm->client.device;struct drm_connector *connector; +INIT_LIST_HEAD (&drm->bl_connectors); +if (apple_gmux_present ()) {NV_INFO (drm,"Apple GMUX detected: not registering Nouveau backlight interface\n" );return 0 ; } -INIT_LIST_HEAD (&drm->bl_connectors); -list_for_each_entry (connector, &dev->mode_config.connector_list, head) {if (connector->connector_type !=DRM_MODE_CONNECTOR_LVDS && connector->connector_type != DRM_MODE_CONNECTOR_eDP)
Greg Kroah-Hartman
maintainerPATCH 16/52 drm/nouveau/mmu: ALIGN_DOWN correct variable
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Māris Nartišs <[email protected]>
commit da5e45e619b3f101420c38b3006a9ae4f3ad19b0 upstream.
Commit 7110c89bb8852ff8b0f88ce05b332b3fe22bd11e ("mmu: swap out round for ALIGN") replaced two calls to round/rounddown with ALIGN/ALIGN_DOWN, but erroneously applied ALIGN_DOWN to a different variable (addr) and left intended variable (tail) not rounded/ALIGNed.
As a result screen corruption, X lockups are observable. An example of kernel log of affected system with NV98 card where it was bisected:
nouveau 0000:01:00.0: gr: TRAP_M2MF 00000002 [IN]
nouveau 0000:01:00.0: gr: TRAP_M2MF 00320951 400007c0 00000000 04000000 nouveau 0000:01:00.0: gr: 00200000 [] ch 1 [000fbbe000 DRM] subc 4 class 5039 mthd 0100 data 00000000
nouveau 0000:01:00.0: fb: trapped read at 0040000000 on channel 1 [0fbbe000 DRM]
engine 00 [PGRAPH] client 03 [DISPATCH] subclient 04 [M2M_IN] reason 00000006 [NULL_DMAOBJ]
Fixes bug 105173 ("[MCP79][Regression] Unhandled NULL pointer dereference in nvkm_object_unmap since kernel 4.15")
https://bugs.freedesktop.org/show_bug.cgi?id=105173
--- drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmm.c +1 -1
@@ -1354,7 +1354,7 @@ nvkm_vmm_get_locked(struct nvkm_vmm *vmm tail = this->addr + this->size;if (vmm->func->page_block && next && next->page != p) - tail =ALIGN_DOWN (addr, vmm->func->page_block); + tail =ALIGN_DOWN (tail, vmm->func->page_block);if (addr <= tail && tail - addr >= size) {rb_erase (&this->tree, &vmm->free);
Greg Kroah-Hartman
maintainerPATCH 17/52 drm/amdgpu: fix prime teardown order
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christian König <[email protected]>
commit 342038d92403b3efa1138a8599666b9f026279d6 upstream.
We unmapped imported DMA-bufs when the GEM handle was dropped, not when the hardware was done with the buffere.
--- drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 2 -- drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 2 ++ 2 files changed, 2 insertions(+), 2 deletions(-)
drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c +0 -2
@@ -36,8 +36,6 @@ void amdgpu_gem_object_free(struct drm_gstruct amdgpu_bo *robj =gem_to_amdgpu_bo (gobj);if (robj) { -if (robj->gem_base.import_attach) -drm_prime_gem_destroy (&robj->gem_base, robj->tbo.sg);amdgpu_mn_unregister (robj);amdgpu_bo_unref (&robj); }
drivers/gpu/drm/amd/amdgpu/amdgpu_object.c +2 -0
@@ -44,6 +44,8 @@ static void amdgpu_ttm_bo_destroy(structamdgpu_bo_kunmap (bo); +if (bo->gem_base.import_attach) +drm_prime_gem_destroy (&bo->gem_base, bo->tbo.sg);drm_gem_object_release (&bo->gem_base);amdgpu_bo_unref (&bo->parent);if (!list_empty (&bo->shadow_list)) {
Greg Kroah-Hartman
maintainerPATCH 18/52 drm/radeon: fix prime teardown order
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christian König <[email protected]>
commit 0f4f715bc6bed3bf14c5cd7d5fe88d443e756b14 upstream.
We unmapped imported DMA-bufs when the GEM handle was dropped, not when the hardware was done with the buffere.
--- drivers/gpu/drm/radeon/radeon_gem.c | 2 -- drivers/gpu/drm/radeon/radeon_object.c | 2 ++ 2 files changed, 2 insertions(+), 2 deletions(-)
drivers/gpu/drm/radeon/radeon_gem.c +0 -2
@@ -34,8 +34,6 @@ void radeon_gem_object_free(struct drm_gstruct radeon_bo *robj =gem_to_radeon_bo (gobj);if (robj) { -if (robj->gem_base.import_attach) -drm_prime_gem_destroy (&robj->gem_base, robj->tbo.sg);radeon_mn_unregister (robj);radeon_bo_unref (&robj); }
drivers/gpu/drm/radeon/radeon_object.c +2 -0
@@ -82,6 +82,8 @@ static void radeon_ttm_bo_destroy(structmutex_unlock (&bo->rdev->gem.mutex);radeon_bo_clear_surface_reg (bo);WARN_ON_ONCE (!list_empty (&bo->va)); +if (bo->gem_base.import_attach) +drm_prime_gem_destroy (&bo->gem_base, bo->tbo.sg);drm_gem_object_release (&bo->gem_base);kfree (bo); }
Greg Kroah-Hartman
maintainerPATCH 19/52 drm/amdgpu/dce: Dont turn off DP sink when disconnected
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Michel Dänzer <[email protected]>
commit 7d617264eb22b18d979eac6e85877a141253034e upstream.
Turning off the sink in this case causes various issues, because userspace expects it to stay on until it turns it off explicitly.
Instead, turn the sink off and back on when a display is connected again. This dance seems necessary for link training to work correctly.
Bugzilla: https://bugs.freedesktop.org/105308
--- drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c | 29 +++++++++---------------- 1 file changed, 11 insertions(+), 18 deletions(-)
drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c +11 -18
@@ -69,25 +69,18 @@ void amdgpu_connector_hotplug(struct drm/* don't do anything if sink is not display port, i.e., * passive dp->(dvi|hdmi) adaptor */ -if (dig_connector->dp_sink_type ==CONNECTOR_OBJECT_ID_DISPLAYPORT ) { -int saved_dpms = connector->dpms; -/* Only turn off the display if it's physically disconnected */ -if (!amdgpu_display_hpd_sense (adev, amdgpu_connector->hpd.hpd)) { -drm_helper_connector_dpms (connector,DRM_MODE_DPMS_OFF ); - }else if (amdgpu_atombios_dp_needs_link_train (amdgpu_connector)) { -/* Don't try to start link training before we -* have the dpcd */ -if (amdgpu_atombios_dp_get_dpcd (amdgpu_connector)) -return ; +if (dig_connector->dp_sink_type ==CONNECTOR_OBJECT_ID_DISPLAYPORT && +amdgpu_display_hpd_sense (adev, amdgpu_connector->hpd.hpd) && +amdgpu_atombios_dp_needs_link_train (amdgpu_connector)) { +/* Don't start link training before we have the DPCD */ +if (amdgpu_atombios_dp_get_dpcd (amdgpu_connector)) +return ; -/* set it to OFF so that drm_helper_connector_dpms() -* won't return immediately since the current state -* is ON at this point. -*/ - connector->dpms =DRM_MODE_DPMS_OFF ; -drm_helper_connector_dpms (connector,DRM_MODE_DPMS_ON ); - } - connector->dpms = saved_dpms; +/* Turn the connector off and back on immediately, which +* will trigger link training +*/ +drm_helper_connector_dpms (connector,DRM_MODE_DPMS_OFF ); +drm_helper_connector_dpms (connector,DRM_MODE_DPMS_ON ); } } }
Greg Kroah-Hartman
maintainerPATCH 20/52 fs: Teach path_connected to handle nfs filesystems with multiple roots.
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Eric W. Biederman <[email protected]>
commit 95dd77580ccd66a0da96e6d4696945b8cea39431 upstream.
On nfsv2 and nfsv3 the nfs server can export subsets of the same filesystem and report the same filesystem identifier, so that the nfs client can know they are the same filesystem. The subsets can be from disjoint directory trees. The nfsv2 and nfsv3 filesystems provides no way to find the common root of all directory trees exported form the server with the same filesystem identifier.
The practical result is that in struct super s_root for nfs s_root is not necessarily the root of the filesystem. The nfs mount code sets s_root to the root of the first subset of the nfs filesystem that the kernel mounts.
This effects the dcache invalidation code in generic_shutdown_super currently called shrunk_dcache_for_umount and that code for years has gone through an additional list of dentries that might be dentry trees that need to be freed to accomodate nfs.
When I wrote path_connected I did not realize nfs was so special, and it's hueristic for avoiding calling is_subdir can fail.
The practical case where this fails is when there is a move of a directory from the subtree exposed by one nfs mount to the subtree exposed by another nfs mount. This move can happen either locally or remotely. With the remote case requiring that the move directory be cached before the move and that after the move someone walks the path to where the move directory now exists and in so doing causes the already cached directory to be moved in the dcache through the magic of d_splice_alias.
If someone whose working directory is in the move directory or a subdirectory and now starts calling .. from the initial mount of nfs (where s_root == mnt_root), then path_connected as a heuristic will not bother with the is_subdir check. As s_root really is not the root of the nfs filesystem this heuristic is wrong, and the path may actually not be connected and path_connected can fail.
The is_subdir function might be cheap enough that we can call it unconditionally. Verifying that will take some benchmarking and the result may not be the same on all kernels this fix needs to be backported to. So I am avoiding that for now.
Filesystems with snapshots such as nilfs and btrfs do something similar. But as the directory tree of the snapshots are disjoint from one another and from the main directory tree rename won't move things between them and this problem will not occur.
--- fs/namei.c | 5 +++-- fs/nfs/super.c | 2 ++ include/linux/fs.h | 1 + 3 files changed, 6 insertions(+), 2 deletions(-)
fs/namei.c +3 -2
@@ -578,9 +578,10 @@ static int __nd_alloc_stack(struct nameistatic bool path_connected (const struct path *path) {struct vfsmount *mnt = path->mnt; +struct super_block *sb = mnt->mnt_sb; -/* Only bind mounts can have disconnected paths */ -if (mnt->mnt_root == mnt->mnt_sb->s_root) +/* Bind mounts and multi-root filesystems can have disconnected paths */ +if (!(sb->s_iflags &SB_I_MULTIROOT ) && (mnt->mnt_root == sb->s_root))return true;return is_subdir (path->dentry, mnt->mnt_root);
fs/nfs/super.c +2 -0
@@ -2631,6 +2631,8 @@ struct dentry *nfs_fs_mount_common(struc/* initial superblock/root creation */ mount_info->fill_super (s, mount_info);nfs_get_cache_cookie (s, mount_info->parsed, mount_info->cloned); +if (!(server->flags &NFS_MOUNT_UNSHARED )) + s->s_iflags |=SB_I_MULTIROOT ; } mntroot =nfs_get_root (s, mount_info->mntfh, dev_name);
include/linux/fs.h +1 -0
@@ -1312,6 +1312,7 @@ extern int send_sigurg(struct fown_struc#define SB_I_CGROUPWB 0x00000001/* cgroup-aware writeback enabled */ #define SB_I_NOEXEC 0x00000002/* Ignore executables on this fs */ #define SB_I_NODEV 0x00000004/* Ignore devices on this fs */ +#define SB_I_MULTIROOT 0x00000008/* Multiple roots to the dentry tree */ /* sb->s_iflags to limit user namespace mounts */ #define SB_I_USERNS_VISIBLE 0x00000010/* fstype already mounted */
Greg Kroah-Hartman
maintainerPATCH 21/52 KVM: arm/arm64: Reduce verbosity of KVM init log
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ard Biesheuvel <[email protected]>
commit 76600428c3677659e3c3633bb4f2ea302220a275 upstream.
On my GICv3 system, the following is printed to the kernel log at boot:
kvm [1]: 8-bit VMID
kvm [1]: IDMAP page: d20e35000
kvm [1]: HYP VA range: 800000000000:ffffffffffff kvm [1]: vgic-v2@2c020000
kvm [1]: GIC system register CPU interface enabled kvm [1]: vgic interrupt IRQ1
kvm [1]: virtual timer IRQ4
kvm [1]: Hyp mode initialized successfully
The KVM IDMAP is a mapping of a statically allocated kernel structure, and so printing its physical address leaks the physical placement of the kernel when physical KASLR in effect. So change the kvm_info() to kvm_debug() to remove it from the log output.
While at it, trim the output a bit more: IRQ numbers can be found in /proc/interrupts, and the HYP VA and vgic-v2 lines are not highly informational either.
--- virt/kvm/arm/arch_timer.c | 2 +- virt/kvm/arm/mmu.c | 6 +++--- virt/kvm/arm/vgic/vgic-v2.c | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-)
virt/kvm/arm/arch_timer.c +1 -1
@@ -773,7 +773,7 @@ int kvm_timer_hyp_init(bool has_gic) } } -kvm_info ("virtual timer IRQ%d\n" , host_vtimer_irq); +kvm_debug ("virtual timer IRQ%d\n" , host_vtimer_irq); cpuhp_setup_state(CPUHP_AP_KVM_ARM_TIMER_STARTING, "kvm/arm/timer:starting", kvm_timer_starting_cpu,
virt/kvm/arm/mmu.c +3 -3
@@ -1760,9 +1760,9 @@ int kvm_mmu_init(void)*/ BUG_ON ((hyp_idmap_start ^ (hyp_idmap_end -1 )) &PAGE_MASK ); -kvm_info ("IDMAP page: %lx\n" , hyp_idmap_start); -kvm_info ("HYP VA range: %lx:%lx\n" , -kern_hyp_va (PAGE_OFFSET ),kern_hyp_va (~0UL )); +kvm_debug ("IDMAP page: %lx\n" , hyp_idmap_start); +kvm_debug ("HYP VA range: %lx:%lx\n" , +kern_hyp_va (PAGE_OFFSET ),kern_hyp_va (~0UL )); if (hyp_idmap_start >= kern_hyp_va(PAGE_OFFSET) && hyp_idmap_start < kern_hyp_va(~0UL) &&
virt/kvm/arm/vgic/vgic-v2.c +1 -1
@@ -381,7 +381,7 @@ int vgic_v2_probe(const struct gic_kvm_i kvm_vgic_global_state.type =VGIC_V2 ; kvm_vgic_global_state.max_gic_vcpus =VGIC_V2_MAX_CPUS ; -kvm_info ("vgic-v2@%llx\n" , info->vctrl.start); +kvm_debug ("vgic-v2@%llx\n" , info->vctrl.start);return 0 ; out:
Greg Kroah-Hartman
maintainerPATCH 22/52 KVM: arm/arm64: Reset mapped IRQs on VM reset
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christoffer Dall <[email protected]>
commit 413aa807ae39fed7e387c175d2d0ae9fcf6c0c9d upstream.
We currently don't allow resetting mapped IRQs from userspace, because their state is controlled by the hardware. But we do need to reset the state when the VM is reset, so we provide a function for the 'owner' of the mapped interrupt to reset the interrupt state.
Currently only the timer uses mapped interrupts, so we call this function from the timer reset logic.
--- include/kvm/arm_vgic.h | 1 + virt/kvm/arm/arch_timer.c | 4 ++++ virt/kvm/arm/vgic/vgic.c | 26 ++++++++++++++++++++++++++ 3 files changed, 31 insertions(+)
include/kvm/arm_vgic.h +1 -0
@@ -349,6 +349,7 @@ void kvm_vgic_put(struct kvm_vcpu *vcpu)bool kvm_vcpu_has_pending_irqs (struct kvm_vcpu *vcpu);void kvm_vgic_sync_hwstate (struct kvm_vcpu *vcpu);void kvm_vgic_flush_hwstate (struct kvm_vcpu *vcpu); +void kvm_vgic_reset_mapped_irq (struct kvm_vcpu *vcpu,u32 vintid);void vgic_v3_dispatch_sgi (struct kvm_vcpu *vcpu,u64 reg);
virt/kvm/arm/arch_timer.c +4 -0
@@ -589,6 +589,7 @@ void kvm_timer_sync_hwstate(struct kvm_vint kvm_timer_vcpu_reset (struct kvm_vcpu *vcpu) { +struct arch_timer_cpu *timer = &vcpu->arch.timer_cpu;struct arch_timer_context *vtimer =vcpu_vtimer (vcpu);struct arch_timer_context *ptimer =vcpu_ptimer (vcpu);
@@ -602,6 +603,9 @@ int kvm_timer_vcpu_reset(struct kvm_vcpu ptimer->cnt_ctl =0 ;kvm_timer_update_state (vcpu); +if (timer->enabled &&irqchip_in_kernel (vcpu->kvm)) +kvm_vgic_reset_mapped_irq (vcpu, vtimer->irq.irq); +return 0 ; }
virt/kvm/arm/vgic/vgic.c +26 -0
@@ -460,6 +460,32 @@ int kvm_vgic_map_phys_irq(struct kvm_vcpreturn ret; } +/** +* kvm_vgic_reset_mapped_irq - Reset a mapped IRQ +* @vcpu: The VCPU pointer +* @vintid: The INTID of the interrupt +* +* Reset the active and pending states of a mapped interrupt. Kernel +* subsystems injecting mapped interrupts should reset their interrupt lines +* when we are doing a reset of the VM. +*/ +void kvm_vgic_reset_mapped_irq (struct kvm_vcpu *vcpu,u32 vintid) +{ +struct vgic_irq *irq =vgic_get_irq (vcpu->kvm, vcpu, vintid); +unsigned long flags; + +if (!irq->hw) + goto out; + +spin_lock_irqsave (&irq->irq_lock, flags); + irq->active = false; + irq->pending_latch = false; + irq->line_level = false; +spin_unlock_irqrestore (&irq->irq_lock, flags); +out: +vgic_put_irq (vcpu->kvm, irq); +} +int kvm_vgic_unmap_phys_irq (struct kvm_vcpu *vcpu,unsigned int vintid) {struct vgic_irq *irq;
Greg Kroah-Hartman
maintainerPATCH 23/52 kvm: arm/arm64: vgic-v3: Tighten synchronization for guests using v2 on v3
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Marc Zyngier <[email protected]>
commit 27e91ad1e746e341ca2312f29bccb9736be7b476 upstream.
On guest exit, and when using GICv2 on GICv3, we use a dsb(st) to force synchronization between the memory-mapped guest view and the system-register view that the hypervisor uses.
This is incorrect, as the spec calls out the need for "a DSB whose required access type is both loads and stores with any Shareability attribute", while we're only synchronizing stores.
We also lack an isb after the dsb to ensure that the latter has actually been executed before we start reading stuff from the sysregs.
The fix is pretty easy: turn dsb(st) into dsb(sy), and slap an isb() just after.
--- virt/kvm/arm/hyp/vgic-v3-sr.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
virt/kvm/arm/hyp/vgic-v3-sr.c +2 -1
@@ -215,7 +215,8 @@ void __hyp_text __vgic_v3_save_state(str* are now visible to the system register interface. */ if (!cpu_if->vgic_sre) { -dsb (st); +dsb (sy); +isb (); cpu_if->vgic_vmcr =read_gicreg (ICH_VMCR_EL2 ); }
Greg Kroah-Hartman
maintainerPATCH 24/52 KVM: arm/arm64: vgic: Dont populate multiple LRs with the same vintid
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Marc Zyngier <[email protected]>
commit 16ca6a607d84bef0129698d8d808f501afd08d43 upstream.
The vgic code is trying to be clever when injecting GICv2 SGIs, and will happily populate LRs with the same interrupt number if they come from multiple vcpus (after all, they are distinct interrupt sources).
Unfortunately, this is against the letter of the architecture, and the GICv2 architecture spec says "Each valid interrupt stored in the List registers must have a unique VirtualID for that virtual CPU interface.". GICv3 has similar (although slightly ambiguous) restrictions.
This results in guests locking up when using GICv2-on-GICv3, for example. The obvious fix is to stop trying so hard, and inject a single vcpu per SGI per guest entry. After all, pending SGIs with multiple source vcpus are pretty rare, and are mostly seen in scenario where the physical CPUs are severely overcomitted.
But as we now only inject a single instance of a multi-source SGI per vcpu entry, we may delay those interrupts for longer than strictly necessary, and run the risk of injecting lower priority interrupts in the meantime.
In order to address this, we adopt a three stage strategy:
- If we encounter a multi-source SGI in the AP list while computing its depth, we force the list to be sorted
- When populating the LRs, we prevent the injection of any interrupt of lower priority than that of the first multi-source SGI we've injected.
- Finally, the injection of a multi-source SGI triggers the request of a maintenance interrupt when there will be no pending interrupt in the LRs (HCR_NPIE).
At the point where the last pending interrupt in the LRs switches from Pending to Active, the maintenance interrupt will be delivered, allowing us to add the remaining SGIs using the same process.
--- include/linux/irqchip/arm-gic-v3.h | 1 include/linux/irqchip/arm-gic.h | 1 virt/kvm/arm/vgic/vgic-v2.c | 9 ++++- virt/kvm/arm/vgic/vgic-v3.c | 9 ++++- virt/kvm/arm/vgic/vgic.c | 61 ++++++++++++++++++++++++++++--------- virt/kvm/arm/vgic/vgic.h | 2 + 6 files changed, 67 insertions(+), 16 deletions(-)
include/linux/irqchip/arm-gic-v3.h +1 -0
@@ -503,6 +503,7 @@#define ICH_HCR_EN (1 << 0)#define ICH_HCR_UIE (1 << 1) +#define ICH_HCR_NPIE (1 << 3)#define ICH_HCR_TC (1 << 10)#define ICH_HCR_TALL0 (1 << 11)#define ICH_HCR_TALL1 (1 << 12)
include/linux/irqchip/arm-gic.h +1 -0
@@ -84,6 +84,7 @@#define GICH_HCR_EN (1 << 0)#define GICH_HCR_UIE (1 << 1) +#define GICH_HCR_NPIE (1 << 3)#define GICH_LR_VIRTUALID (0x3ff << 0)#define GICH_LR_PHYSID_CPUID_SHIFT (10)
virt/kvm/arm/vgic/vgic-v2.c +8 -1
@@ -37,6 +37,13 @@ void vgic_v2_init_lrs(void)vgic_v2_write_lr (i,0 ); } +void vgic_v2_set_npie (struct kvm_vcpu *vcpu) +{ +struct vgic_v2_cpu_if *cpuif = &vcpu->arch.vgic_cpu.vgic_v2; + + cpuif->vgic_hcr |=GICH_HCR_NPIE ; +} +void vgic_v2_set_underflow (struct kvm_vcpu *vcpu) {struct vgic_v2_cpu_if *cpuif = &vcpu->arch.vgic_cpu.vgic_v2;
@@ -64,7 +71,7 @@ void vgic_v2_fold_lr_state(struct kvm_vcint lr;unsigned long flags; - cpuif->vgic_hcr &= ~GICH_HCR_UIE ; + cpuif->vgic_hcr &= ~(GICH_HCR_UIE |GICH_HCR_NPIE );for (lr =0 ; lr < vgic_cpu->used_lrs; lr++) {u32 val = cpuif->vgic_lr[lr];
virt/kvm/arm/vgic/vgic-v3.c +8 -1
@@ -26,6 +26,13 @@ static bool group1_trap;static bool common_trap;static bool gicv4_enable; +void vgic_v3_set_npie (struct kvm_vcpu *vcpu) +{ +struct vgic_v3_cpu_if *cpuif = &vcpu->arch.vgic_cpu.vgic_v3; + + cpuif->vgic_hcr |=ICH_HCR_NPIE ; +} +void vgic_v3_set_underflow (struct kvm_vcpu *vcpu) {struct vgic_v3_cpu_if *cpuif = &vcpu->arch.vgic_cpu.vgic_v3;
@@ -47,7 +54,7 @@ void vgic_v3_fold_lr_state(struct kvm_vcint lr;unsigned long flags; - cpuif->vgic_hcr &= ~ICH_HCR_UIE ; + cpuif->vgic_hcr &= ~(ICH_HCR_UIE |ICH_HCR_NPIE );for (lr =0 ; lr < vgic_cpu->used_lrs; lr++) {u64 val = cpuif->vgic_lr[lr];
virt/kvm/arm/vgic/vgic.c +47 -14
103 lines not on this page · raw message
virt/kvm/arm/vgic/vgic.h +2 -0
@@ -151,6 +151,7 @@ void vgic_v2_fold_lr_state(struct kvm_vcvoid vgic_v2_populate_lr (struct kvm_vcpu *vcpu,struct vgic_irq *irq,int lr);void vgic_v2_clear_lr (struct kvm_vcpu *vcpu,int lr);void vgic_v2_set_underflow (struct kvm_vcpu *vcpu); +void vgic_v2_set_npie (struct kvm_vcpu *vcpu);int vgic_v2_has_attr_regs (struct kvm_device *dev,struct kvm_device_attr *attr);int vgic_v2_dist_uaccess (struct kvm_vcpu *vcpu,bool is_write,int offset,u32 *val);
@@ -180,6 +181,7 @@ void vgic_v3_fold_lr_state(struct kvm_vcvoid vgic_v3_populate_lr (struct kvm_vcpu *vcpu,struct vgic_irq *irq,int lr);void vgic_v3_clear_lr (struct kvm_vcpu *vcpu,int lr);void vgic_v3_set_underflow (struct kvm_vcpu *vcpu); +void vgic_v3_set_npie (struct kvm_vcpu *vcpu);void vgic_v3_set_vmcr (struct kvm_vcpu *vcpu,struct vgic_vmcr *vmcr);void vgic_v3_get_vmcr (struct kvm_vcpu *vcpu,struct vgic_vmcr *vmcr);void vgic_v3_enable (struct kvm_vcpu *vcpu);
Greg Kroah-Hartman
maintainerPATCH 25/52 lock_parent() needs to recheck if dentry got __dentry_killed under it
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Al Viro <[email protected]>
commit 3b821409632ab778d46e807516b457dfa72736ed upstream.
In case when dentry passed to lock_parent() is protected from freeing only by the fact that it's on a shrink list and trylock of parent fails, we could get hit by __dentry_kill() (and subsequent dentry_kill(parent)) between unlocking dentry and locking presumed parent. We need to recheck that dentry is alive once we lock both it and parent *and* postpone rcu_read_unlock() until after that point. Otherwise we could return a pointer to struct dentry that already is rcu-scheduled for freeing, with ->d_lock held on it; caller's subsequent attempt to unlock it can end up with memory corruption.
--- fs/dcache.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-)
fs/dcache.c +8 -3
@@ -644,11 +644,16 @@ again:spin_unlock (&parent->d_lock); goto again; } -rcu_read_unlock (); -if (parent != dentry) +if (parent != dentry) {spin_lock_nested (&dentry->d_lock,DENTRY_D_LOCK_NESTED ); -else +if (unlikely (dentry->d_lockref.count <0 )) { +spin_unlock (&parent->d_lock); + parent =NULL ; + } + }else { parent =NULL ; + } +rcu_read_unlock ();return parent; }
Greg Kroah-Hartman
maintainerPATCH 26/52 fs/aio: Add explicit RCU grace period when freeing kioctx
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tejun Heo <[email protected]>
commit a6d7cff472eea87d96899a20fa718d2bab7109f3 upstream.
While fixing refcounting, e34ecee2ae79 ("aio: Fix a trinity splat") incorrectly removed explicit RCU grace period before freeing kioctx. The intention seems to be depending on the internal RCU grace periods of percpu_ref; however, percpu_ref uses a different flavor of RCU, sched-RCU. This can lead to kioctx being freed while RCU read protected dereferences are still in progress.
Fix it by updating free_ioctx() to go through call_rcu() explicitly.
v2: Comment added to explain double bouncing.
--- fs/aio.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-)
fs/aio.c +19 -4
@@ -115,7 +115,8 @@ struct kioctx {struct page **ring_pages;long nr_pages; -struct work_struct free_work; +struct rcu_head free_rcu; +struct work_struct free_work;/* see free_ioctx() */ /* * signals when all in-flight requests are done
@@ -588,6 +589,12 @@ static int kiocb_cancel(struct aio_kiocbreturn cancel (&kiocb->common); } +/* +* free_ioctx() should be RCU delayed to synchronize against the RCU +* protected lookup_ioctx() and also needs process context to call +* aio_free_ring(), so the double bouncing through kioctx->free_rcu and +* ->free_work. +*/ static void free_ioctx (struct work_struct *work) { struct kioctx *ctx = container_of(work, struct kioctx, free_work);
@@ -601,6 +608,14 @@ static void free_ioctx(struct work_struckmem_cache_free (kioctx_cachep, ctx); } +static void free_ioctx_rcufn (struct rcu_head *head) +{ + struct kioctx *ctx = container_of(head, struct kioctx, free_rcu); + +INIT_WORK (&ctx->free_work, free_ioctx); +schedule_work (&ctx->free_work); +} +static void free_ioctx_reqs (struct percpu_ref *ref) { struct kioctx *ctx = container_of(ref, struct kioctx, reqs);
@@ -609,8 +624,8 @@ static void free_ioctx_reqs(struct percpif (ctx->rq_wait &&atomic_dec_and_test (&ctx->rq_wait->count))complete (&ctx->rq_wait->comp); -INIT_WORK (&ctx->free_work, free_ioctx); -schedule_work (&ctx->free_work); +/* Synchronize against RCU protected table->table[] dereferences */ +call_rcu (&ctx->free_rcu, free_ioctx_rcufn); }/*
@@ -838,7 +853,7 @@ static int kill_ioctx(struct mm_struct * table->table[ctx->id] =NULL ;spin_unlock (&mm->ioctx_lock); -/* percpu_ref_kill() will do the necessary call_rcu() */ +/* free_ioctx_reqs() will do the necessary RCU synchronization */ wake_up_all (&ctx->wait);/*
Greg Kroah-Hartman
maintainerPATCH 27/52 fs/aio: Use RCU accessors for kioctx_table->table[]
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tejun Heo <[email protected]>
commit d0264c01e7587001a8c4608a5d1818dba9a4c11a upstream.
While converting ioctx index from a list to a table, db446a08c23d ("aio: convert the ioctx list to table lookup v3") missed tagging kioctx_table->table[] as an array of RCU pointers and using the appropriate RCU accessors. This introduces a small window in the lookup path where init and access may race.
Mark kioctx_table->table[] with __rcu and use the approriate RCU accessors when using the field.
--- fs/aio.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-)
fs/aio.c +11 -10
@@ -68,9 +68,9 @@ struct aio_ring {#define AIO_RING_PAGES 8struct kioctx_table { -struct rcu_head rcu; -unsigned nr; -struct kioctx *table[]; +struct rcu_head rcu; +unsigned nr; +struct kioctx __rcu *table[]; };struct kioctx_cpu {
@@ -330,7 +330,7 @@ static int aio_ring_mremap(struct vm_arefor (i =0 ; i < table->nr; i++) {struct kioctx *ctx; - ctx = table->table[i]; + ctx =rcu_dereference (table->table[i]);if (ctx && ctx->aio_ring_file == file) {if (!atomic_read (&ctx->dead)) { ctx->user_id = ctx->mmap_base = vma->vm_start;
@@ -666,9 +666,9 @@ static int ioctx_add_table(struct kioctxwhile (1 ) {if (table)for (i =0 ; i < table->nr; i++) -if (!table->table[i]) { +if (!rcu_access_pointer (table->table[i])) { ctx->id = i; - table->table[i] = ctx; +rcu_assign_pointer (table->table[i], ctx);spin_unlock (&mm->ioctx_lock);/* While kioctx setup is in progress,
@@ -849,8 +849,8 @@ static int kill_ioctx(struct mm_struct * } table =rcu_dereference_raw (mm->ioctx_table); -WARN_ON (ctx != table->table[ctx->id]); - table->table[ctx->id] =NULL ; +WARN_ON (ctx !=rcu_access_pointer (table->table[ctx->id])); +RCU_INIT_POINTER (table->table[ctx->id],NULL );spin_unlock (&mm->ioctx_lock);/* free_ioctx_reqs() will do the necessary RCU synchronization */
@@ -895,7 +895,8 @@ void exit_aio(struct mm_struct *mm) skipped =0 ;for (i =0 ; i < table->nr; ++i) { -struct kioctx *ctx = table->table[i]; +struct kioctx *ctx = +rcu_dereference_protected (table->table[i], true);if (!ctx) { skipped++;
@@ -1084,7 +1085,7 @@ static struct kioctx *lookup_ioctx(unsigif (!table || id >= table->nr) goto out; - ctx = table->table[id]; + ctx =rcu_dereference (table->table[id]);if (ctx && ctx->user_id == ctx_id) {percpu_ref_get (&ctx->users); ret = ctx;
Greg Kroah-Hartman
maintainerPATCH 28/52 RDMAVT: Fix synchronization around percpu_ref
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Tejun Heo <[email protected]>
commit 74b44bbe80b4c62113ac1501482ea1ee40eb9d67 upstream.
rvt_mregion uses percpu_ref for reference counting and RCU to protect accesses from lkey_table. When a rvt_mregion needs to be freed, it first gets unregistered from lkey_table and then rvt_check_refs() is called to wait for in-flight usages before the rvt_mregion is freed.
rvt_check_refs() seems to have a couple issues.
* It has a fast exit path which tests percpu_ref_is_zero(). However, a percpu_ref reading zero doesn't mean that the object can be released. In fact, the ->release() callback might not even have started executing yet. Proceeding with freeing can lead to use-after-free.
* lkey_table is RCU protected but there is no RCU grace period in the free path. percpu_ref uses RCU internally but it's sched-RCU whose grace periods are different from regular RCU. Also, it generally isn't a good idea to depend on internal behaviors like this.
To address the above issues, this patch removes the fast exit and adds an explicit synchronize_rcu().
--- drivers/infiniband/sw/rdmavt/mr.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)
drivers/infiniband/sw/rdmavt/mr.c +6 -4
@@ -489,11 +489,13 @@ static int rvt_check_refs(struct rvt_mreunsigned long timeout;struct rvt_dev_info *rdi =ib_to_rvt (mr->pd->device); -if (percpu_ref_is_zero (&mr->refcount)) -return 0 ; -/* avoid dma mr */ -if (mr->lkey) +if (mr->lkey) { +/* avoid dma mr */ rvt_dereg_clean_qps (mr); +/* @mr was indexed on rcu protected @lkey_table */ +synchronize_rcu (); + } + timeout =wait_for_completion_timeout (&mr->comp,5 *HZ );if (!timeout) { rvt_pr_err(rdi,
Greg Kroah-Hartman
maintainerPATCH 29/52 irqchip/gic-v3-its: Ensure nr_ites >= nr_lpis
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ard Biesheuvel <[email protected]>
commit 4f2c7583e33eb08dc09dd2e25574b80175ba7d93 upstream.
When struct its_device instances are created, the nr_ites member will be set to a power of 2 that equals or exceeds the requested number of MSIs passed to the msi_prepare() callback. At the same time, the LPI map is allocated to be some multiple of 32 in size, where the allocated size may be less than the requested size depending on whether a contiguous range of sufficient size is available in the global LPI bitmap.
This may result in the situation where the nr_ites < nr_lpis, and since nr_ites is what we program into the hardware when we map the device, the additional LPIs will be non-functional.
For bog standard hardware, this does not really matter. However, in cases where ITS device IDs are shared between different PCIe devices, we may end up allocating these additional LPIs without taking into account that they don't actually work.
So let's make nr_ites at least 32. This ensures that all allocated LPIs are 'live', and that its_alloc_device_irq() will fail when attempts are made to allocate MSIs beyond what was allocated in the first place.
--- drivers/irqchip/irq-gic-v3-its.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-)
drivers/irqchip/irq-gic-v3-its.c +4 -5
@@ -1412,7 +1412,7 @@ static struct irq_chip its_irq_chip = {* This gives us (((1UL << id_bits) - 8192) >> 5) possible allocations. */ #define IRQS_PER_CHUNK_SHIFT 5 -#define IRQS_PER_CHUNK (1 << IRQS_PER_CHUNK_SHIFT) +#define IRQS_PER_CHUNK (1UL << IRQS_PER_CHUNK_SHIFT)#define ITS_MAX_LPI_NRBITS 16/* 64K LPIs */ static unsigned long *lpi_bitmap;
@@ -2119,11 +2119,10 @@ static struct its_device *its_create_dev dev =kzalloc (sizeof (*dev),GFP_KERNEL );/* -* At least one bit of EventID is being used, hence a minimum -* of two entries. No, the architecture doesn't let you -* express an ITT with a single entry. +* We allocate at least one chunk worth of LPIs bet device, +* and thus that many ITEs. The device may require less though. */ - nr_ites =max (2UL ,roundup_pow_of_two (nvecs)); + nr_ites =max (IRQS_PER_CHUNK ,roundup_pow_of_two (nvecs)); sz = nr_ites * its->ite_size; sz =max (sz,ITS_ITT_ALIGN ) +ITS_ITT_ALIGN -1 ; itt =kzalloc (sz,GFP_KERNEL );
Greg Kroah-Hartman
maintainerPATCH 30/52 nvme: fix subsystem multiple controllers support check
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Israel Rukshin <[email protected]>
commit b837b28394fb76993c28bb242db7061ee0417da6 upstream.
There is a problem when another module (e.g. nvmet) takes a reference on the nvme block device and the physical nvme drive is removed. In that case nvme_free_ctrl() will not be called and the controller state will be "deleting" or "dead" unless nvmet module releases the block device. Later on, the same nvme drive probes back and nvme_init_subsystem() will be called and fail due to duplicate subnqn (if the nvme device doesn't support subsystem with multiple controllers). This will cause a probe failure. This commit changes the check of multiple controllers support at nvme_init_subsystem() by not counting all the controllers at "dead" or "deleting" state (this is safe because controllers at this state will never be active again).
--- drivers/nvme/host/core.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-)
drivers/nvme/host/core.c +17 -1
@@ -2052,6 +2052,22 @@ static const struct attribute_group *nvm NULL, }; +static int nvme_active_ctrls (struct nvme_subsystem *subsys) +{ +int count =0 ; +struct nvme_ctrl *ctrl; + +mutex_lock (&subsys->lock); +list_for_each_entry (ctrl, &subsys->ctrls, subsys_entry) { +if (ctrl->state !=NVME_CTRL_DELETING && + ctrl->state !=NVME_CTRL_DEAD ) + count++; + } +mutex_unlock (&subsys->lock); + +return count; +} +static int nvme_init_subsystem (struct nvme_ctrl *ctrl,struct nvme_id_ctrl *id) {struct nvme_subsystem *subsys, *found;
@@ -2090,7 +2106,7 @@ static int nvme_init_subsystem(struct nv* Verify that the subsystem actually supports multiple * controllers, else bail out. */ -if (!(id->cmic & (1 <<1 ))) { +if (nvme_active_ctrls (found) && !(id->cmic & (1 <<1 ))) {dev_err (ctrl->device,"ignoring ctrl due to duplicate subnqn (%s).\n" , found->subnqn);
Greg Kroah-Hartman
maintainerPATCH 31/52 xfs: preserve i_rdev when recycling a reclaimable inode
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Amir Goldstein <[email protected]>
commit acd1d71598f7654b6d7718bcbe979992295c672a upstream.
Commit 66f364649d870 ("xfs: remove if_rdev") moved storing of rdev value for special inodes to VFS inodes, but forgot to preserve the value of i_rdev when recycling a reclaimable xfs_inode.
This was detected by xfstest overlay/017 with inodex=on mount option and xfs base fs. The test does a lookup of overlay chardev and blockdev right after drop caches.
Overlayfs inodes hold a reference on underlying xfs inodes when mount option index=on is configured. If drop caches reclaim xfs inodes, before it relclaims overlayfs inodes, that can sometimes leave a reclaimable xfs inode and that test hits that case quite often.
When that happens, the xfs inode cache remains broken (zere i_rdev) until the next cycle mount or drop caches.
--- fs/xfs/xfs_icache.c | 2 ++ 1 file changed, 2 insertions(+)
fs/xfs/xfs_icache.c +2 -0
@@ -295,6 +295,7 @@ xfs_reinit_inode(uint32_t generation = inode->i_generation;uint64_t version = inode->i_version;umode_t mode = inode->i_mode; +dev_t dev = inode->i_rdev; error =inode_init_always (mp->m_super, inode);
@@ -302,6 +303,7 @@ xfs_reinit_inode( inode->i_generation = generation; inode->i_version = version; inode->i_mode = mode; + inode->i_rdev = dev;return error; }
Greg Kroah-Hartman
maintainerPATCH 32/52 btrfs: Fix NULL pointer exception in find_bio_stripe
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dmitriy Gorokh <[email protected]>
commit 047fdea6341966a0898e3b16c51f54d4f5ba030a upstream.
On detaching of a disk which is a part of a RAID6 filesystem, the following kernel OOPS may happen:
[63122.680461] BTRFS error (device sdo): bdev /dev/sdo errs: wr 0, rd 0, flush 1, corrupt 0, gen 0 [63122.719584] BTRFS warning (device sdo): lost page write due to IO error on /dev/sdo [63122.719587] BTRFS error (device sdo): bdev /dev/sdo errs: wr 1, rd 0, flush 1, corrupt 0, gen 0 [63122.803516] BTRFS warning (device sdo): lost page write due to IO error on /dev/sdo [63122.803519] BTRFS error (device sdo): bdev /dev/sdo errs: wr 2, rd 0, flush 1, corrupt 0, gen 0 [63122.863902] BTRFS critical (device sdo): fatal error on device /dev/sdo [63122.935338] BUG: unable to handle kernel NULL pointer dereference at 0000000000000080 [63122.946554] IP: fail_bio_stripe+0x58/0xa0 [btrfs] [63122.958185] PGD 9ecda067 P4D 9ecda067 PUD b2b37067 PMD 0 [63122.971202] Oops: 0000 [#1] SMP [63123.006760] CPU: 0 PID: 3979 Comm: kworker/u8:9 Tainted: G W 4.14.2-16-scst34x+ #8 [63123.007091] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006 [63123.007402] Workqueue: btrfs-worker btrfs_worker_helper [btrfs] [63123.007595] task: ffff880036ea4040 task.stack: ffffc90006384000 [63123.007796] RIP: 0010:fail_bio_stripe+0x58/0xa0 [btrfs] [63123.007968] RSP: 0018:ffffc90006387ad8 EFLAGS: 00010287 [63123.008140] RAX: 0000000000000002 RBX: ffff88004beaa0b8 RCX: ffff8800b2bd5690 [63123.008359] RDX: 0000000000000000 RSI: ffff88007bb43500 RDI: ffff88004beaa000 [63123.008621] RBP: ffffc90006387ae8 R08: 0000000099100000 R09: ffff8800b2bd5600 [63123.008840] R10: 0000000000000004 R11: 0000000000010000 R12: ffff88007bb43500 [63123.009059] R13: 00000000fffffffb R14: ffff880036fc5180 R15: 0000000000000004 [63123.009278] FS: 0000000000000000(0000) GS:ffff8800b7000000(0000) knlGS:0000000000000000 [63123.009564] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [63123.009748] CR2: 0000000000000080 CR3: 00000000b0866000 CR4: 00000000000406f0 [63123.009969] Call Trace: [63123.010085] raid_write_end_io+0x7e/0x80 [btrfs] [63123.010251] bio_endio+0xa1/0x120 [63123.010378] generic_make_request+0x218/0x270 [63123.010921] submit_bio+0x66/0x130 [63123.011073] finish_rmw+0x3fc/0x5b0 [btrfs] [63123.011245] full_stripe_write+0x96/0xc0 [btrfs] [63123.011428] raid56_parity_write+0x117/0x170 [btrfs] [63123.011604] btrfs_map_bio+0x2ec/0x320 [btrfs] [63123.011759] ? ___cache_free+0x1c5/0x300 [63123.011909] __btrfs_submit_bio_done+0x26/0x50 [btrfs] [63123.012087] run_one_async_done+0x9c/0xc0 [btrfs] [63123.012257] normal_work_helper+0x19e/0x300 [btrfs] [63123.012429] btrfs_worker_helper+0x12/0x20 [btrfs] [63123.012656] process_one_work+0x14d/0x350 [63123.012888] worker_thread+0x4d/0x3a0 [63123.013026] ? _raw_spin_unlock_irqrestore+0x15/0x20 [63123.013192] kthread+0x109/0x140 [63123.013315] ? process_scheduled_works+0x40/0x40 [63123.013472] ? kthread_stop+0x110/0x110 [63123.013610] ret_from_fork+0x25/0x30 [63123.014469] RIP: fail_bio_stripe+0x58/0xa0 [btrfs] RSP: ffffc90006387ad8 [63123.014678] CR2: 0000000000000080 [63123.016590] ---[ end trace a295ea7259c17880 ]—
This is reproducible in a cycle, where a series of writes is followed by SCSI device delete command. The test may take up to few minutes.
Author: Dmitriy Gorokh <[email protected]>
--- fs/btrfs/raid56.c | 1 + 1 file changed, 1 insertion(+)
fs/btrfs/raid56.c +1 -0
@@ -1351,6 +1351,7 @@ static int find_bio_stripe(struct btrfs_ stripe_start = stripe->physical;if (physical >= stripe_start && physical < stripe_start + rbio->stripe_len && + stripe->dev->bdev && bio->bi_disk == stripe->dev->bdev->bd_disk && bio->bi_partno == stripe->dev->bdev->bd_partno) {return i;
Greg Kroah-Hartman
maintainerPATCH 33/52 btrfs: add missing initialization in btrfs_check_shared
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Edmund Nadolski <[email protected]>
commit 18bf591ba9753e3e5ba91f38f756a800693408f4 upstream.
This patch addresses an issue that causes fiemap to falsely report a shared extent. The test case is as follows:
xfs_io -f -d -c "pwrite -b 16k 0 64k" -c "fiemap -v" /media/scratch/file5 syncxfs_io -c "fiemap -v" /media/scratch/file5
which gives the resulting output:
wrote 65536/65536 bytes at offset 0
64 KiB, 4 ops; 0.0000 sec (121.359 MiB/sec and 7766.9903 ops/sec) /media/scratch/file5:
EXT: FILE-OFFSET BLOCK-RANGE TOTAL FLAGS
0: [0..127]: 24576..24703 128 0x2001
/media/scratch/file5:
EXT: FILE-OFFSET BLOCK-RANGE TOTAL FLAGS
0: [0..127]: 24576..24703 128 0x1
This is because btrfs_check_shared calls find_parent_nodes repeatedly in a loop, passing a share_check struct to report the count of shared extent. But btrfs_check_shared does not re-initialize the count value to zero for subsequent calls from the loop, resulting in a false share count value. This is a regressive behavior from 4.13.
With proper re-initialization the test result is as follows:
wrote 65536/65536 bytes at offset 0
64 KiB, 4 ops; 0.0000 sec (110.035 MiB/sec and 7042.2535 ops/sec) /media/scratch/file5:
EXT: FILE-OFFSET BLOCK-RANGE TOTAL FLAGS
0: [0..127]: 24576..24703 128 0x1
/media/scratch/file5:
EXT: FILE-OFFSET BLOCK-RANGE TOTAL FLAGS
0: [0..127]: 24576..24703 128 0x1
which corrects the regression.
--- fs/btrfs/backref.c | 1 + 1 file changed, 1 insertion(+)
fs/btrfs/backref.c +1 -0
@@ -1509,6 +1509,7 @@ int btrfs_check_shared(struct btrfs_rootif (!node)break ; bytenr = node->val; + shared.share_count =0 ;cond_resched (); }
Greg Kroah-Hartman
maintainerPATCH 34/52 btrfs: alloc_chunk: fix DUP stripe size handling
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hans van Kranenburg <[email protected]>
commit 92e222df7b8f05c565009c7383321b593eca488b upstream.
In case of using DUP, we search for enough unallocated disk space on a device to hold two stripes.
The devices_info[ndevs-1].max_avail that holds the amount of unallocated space found is directly assigned to stripe_size, while it's actually twice the stripe size.
Later on in the code, an unconditional division of stripe_size by dev_stripes corrects the value, but in the meantime there's a check to see if the stripe_size does not exceed max_chunk_size. Since during this check stripe_size is twice the amount as intended, the check will reduce the stripe_size to max_chunk_size if the actual correct to be used stripe_size is more than half the amount of max_chunk_size.
The unconditional division later tries to correct stripe_size, but will actually make sure we can't allocate more than half the max_chunk_size.
Fix this by moving the division by dev_stripes before the max chunk size check, so it always contains the right value, instead of putting a duct tape division in further on to get it fixed again.
Since in all other cases than DUP, dev_stripes is 1, this change only affects DUP.
Other attempts in the past were made to fix this:
* 37db63a400 "Btrfs: fix max chunk size check in chunk allocator" tried to fix the same problem, but still resulted in part of the code acting on a wrongly doubled stripe_size value.
* 86db25785a "Btrfs: fix max chunk size on raid5/6" unintentionally broke this fix again.
The real problem was already introduced with the rest of the code in 73c5de0051.
The user visible result however will be that the max chunk size for DUP will suddenly double, while it's actually acting according to the limits in the code again like it was 5 years ago.
--- fs/btrfs/volumes.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-)
fs/btrfs/volumes.c +6 -5
@@ -4737,10 +4737,13 @@ static int __btrfs_alloc_chunk(struct bt ndevs =min (ndevs, devs_max);/* -* the primary goal is to maximize the number of stripes, so use as many -* devices as possible, even if the stripes are not maximum sized. +* The primary goal is to maximize the number of stripes, so use as +* many devices as possible, even if the stripes are not maximum sized. +* +* The DUP profile stores more than one stripe per device, the +* max_avail is the total size so we have to adjust. */ - stripe_size = devices_info[ndevs-1 ].max_avail; + stripe_size =div_u64 (devices_info[ndevs -1 ].max_avail, dev_stripes); num_stripes = ndevs * dev_stripes;/*
@@ -4775,8 +4778,6 @@ static int __btrfs_alloc_chunk(struct bt stripe_size = devices_info[ndevs-1 ].max_avail; } - stripe_size =div_u64 (stripe_size, dev_stripes); -/* align to BTRFS_STRIPE_LEN */ stripe_size =round_down (stripe_size,BTRFS_STRIPE_LEN );
Greg Kroah-Hartman
maintainerPATCH 35/52 btrfs: Fix use-after-free when cleaning up fs_devs with a single stale device
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nikolay Borisov <[email protected]>
commit fd649f10c3d21ee9d7542c609f29978bdf73ab94 upstream.
Commit 4fde46f0cc71 ("Btrfs: free the stale device") introduced btrfs_free_stale_device which iterates the device lists for all registered btrfs filesystems and deletes those devices which aren't mounted. In a btrfs_devices structure has only 1 device attached to it and it is unused then btrfs_free_stale_devices will proceed to also free the btrfs_fs_devices struct itself. Currently this leads to a use after free since list_for_each_entry will try to perform a check on the already freed memory to see if it has to terminate the loop.
The fix is to use 'break' when we know we are freeing the current fs_devs.
--- fs/btrfs/volumes.c | 1 + 1 file changed, 1 insertion(+)
fs/btrfs/volumes.c +1 -0
@@ -574,6 +574,7 @@ static void btrfs_free_stale_device(strubtrfs_sysfs_remove_fsid (fs_devs);list_del (&fs_devs->list);free_fs_devices (fs_devs); +break ; }else { fs_devs->num_devices--;list_del (&dev->dev_list);
Greg Kroah-Hartman
maintainerPATCH 36/52 btrfs: remove spurious WARN_ON(ref->count < 0) in find_parent_nodes
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Zygo Blaxell <[email protected]>
commit c8195a7b1ad5648857ce20ba24f384faed8512bc upstream.
Until v4.14, this warning was very infrequent:
WARNING: CPU: 3 PID: 18172 at fs/btrfs/backref.c:1391 find_parent_nodes+0xc41/0x14e0 Modules linked in: [...] CPU: 3 PID: 18172 Comm: bees Tainted: G D W L 4.11.9-zb64+ #1 Hardware name: System manufacturer System Product Name/M5A78L-M/USB3, BIOS 2101 12/02/2014 Call Trace: dump_stack+0x85/0xc2 __warn+0xd1/0xf0 warn_slowpath_null+0x1d/0x20 find_parent_nodes+0xc41/0x14e0 __btrfs_find_all_roots+0xad/0x120 ? extent_same_check_offsets+0x70/0x70 iterate_extent_inodes+0x168/0x300 iterate_inodes_from_logical+0x87/0xb0 ? iterate_inodes_from_logical+0x87/0xb0 ? extent_same_check_offsets+0x70/0x70 btrfs_ioctl+0x8ac/0x2820 ? lock_acquire+0xc2/0x200 do_vfs_ioctl+0x91/0x700 ? __fget+0x112/0x200 SyS_ioctl+0x79/0x90 entry_SYSCALL_64_fastpath+0x23/0xc6 ? trace_hardirqs_off_caller+0x1f/0x140
Starting with v4.14 (specifically 86d5f9944252 ("btrfs: convert prelimary reference tracking to use rbtrees")) the WARN_ON occurs three orders of magnitude more frequently--almost once per second while running workloads like bees.
Replace the WARN_ON() with a comment rationale for its removal. The rationale is paraphrased from an explanation by Edmund Nadolski <[email protected]> on the linux-btrfs mailing list.
--- fs/btrfs/backref.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-)
fs/btrfs/backref.c +10 -1
@@ -1263,7 +1263,16 @@ again:while (node) { ref = rb_entry(node, struct prelim_ref, rbnode); node =rb_next (&ref->rbnode); -WARN_ON (ref->count <0 ); +/* +* ref->count < 0 can happen here if there are delayed +* refs with a node->action of BTRFS_DROP_DELAYED_REF. +* prelim_ref_insert() relies on this when merging +* identical refs to keep the overall count correct. +* prelim_ref_insert() will merge only those refs +* which compare identically. Any refs having +* e.g. different offsets would not be merged, +* and would retain their original ref->count < 0. +*/ if (roots && ref->count && ref->root_id && ref->parent ==0 ) {if (sc && sc->root_objectid && ref->root_id != sc->root_objectid) {
Greg Kroah-Hartman
maintainerPATCH 37/52 btrfs: Fix memory barriers usage with device stats counters
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nikolay Borisov <[email protected]>
commit 9deae9689231964972a94bb56a79b669f9d47ac1 upstream.
Commit addc3fa74e5b ("Btrfs: Fix the problem that the dirty flag of dev stats is cleared") reworked the way device stats changes are tracked. A new atomic dev_stats_ccnt counter was introduced which is incremented every time any of the device stats counters are changed. This serves as a flag whether there are any pending stats changes. However, this patch only partially implemented the correct memory barriers necessary:
- It only ordered the stores to the counters but not the reads e.g. btrfs_run_dev_stats
- It completely omitted any comments documenting the intended design and how the memory barriers pair with each-other
This patch provides the necessary comments as well as adds a missing smp_rmb in btrfs_run_dev_stats. Furthermore since dev_stats_cnt is only a snapshot at best there was no point in reading the counter twice - once in btrfs_dev_stats_dirty and then again when assigning stats_cnt. Just collapse both reads into 1.
--- fs/btrfs/volumes.c | 18 ++++++++++++++++-- fs/btrfs/volumes.h | 12 ++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-)
fs/btrfs/volumes.c +16 -2
@@ -7093,10 +7093,24 @@ int btrfs_run_dev_stats(struct btrfs_tramutex_lock (&fs_devices->device_list_mutex);list_for_each_entry (device, &fs_devices->devices, dev_list) { -if (!device->dev_stats_valid || !btrfs_dev_stats_dirty (device)) + stats_cnt =atomic_read (&device->dev_stats_ccnt); +if (!device->dev_stats_valid || stats_cnt ==0 )continue ; - stats_cnt =atomic_read (&device->dev_stats_ccnt); + +/* +* There is a LOAD-LOAD control dependency between the value of +* dev_stats_ccnt and updating the on-disk values which requires +* reading the in-memory counters. Such control dependencies +* require explicit read memory barriers. +* +* This memory barriers pairs with smp_mb__before_atomic in +* btrfs_dev_stat_inc/btrfs_dev_stat_set and with the full +* barrier implied by atomic_xchg in +* btrfs_dev_stats_read_and_reset +*/ +smp_rmb (); + ret =update_dev_stat_item (trans, fs_info, device);if (!ret)atomic_sub (stats_cnt, &device->dev_stats_ccnt);
fs/btrfs/volumes.h +12 -0
@@ -498,6 +498,12 @@ static inline void btrfs_dev_stat_inc(st int index) {atomic_inc (dev->dev_stat_values + index); +/* +* This memory barrier orders stores updating statistics before stores +* updating dev_stats_ccnt. +* +* It pairs with smp_rmb() in btrfs_run_dev_stats(). +*/ smp_mb__before_atomic ();atomic_inc (&dev->dev_stats_ccnt); }
@@ -523,6 +529,12 @@ static inline void btrfs_dev_stat_set(st int index, unsigned long val) {atomic_set (dev->dev_stat_values + index, val); +/* +* This memory barrier orders stores updating statistics before stores +* updating dev_stats_ccnt. +* +* It pairs with smp_rmb() in btrfs_run_dev_stats(). +*/ smp_mb__before_atomic ();atomic_inc (&dev->dev_stats_ccnt); }
Greg Kroah-Hartman
maintainerPATCH 38/52 scsi: qla2xxx: Fix smatch warning in qla25xx_delete_{rsp|req}_que
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Himanshu Madhani <[email protected]>
commit 62aa281470fdb7c0796d63a1cc918a8c1f02dde2 upstream.
This patch fixes following warnings reported by smatch:
drivers/scsi/qla2xxx/qla_mid.c:586 qla25xx_delete_req_que()
error: we previously assumed 'req' could be null (see line 580)
drivers/scsi/qla2xxx/qla_mid.c:602 qla25xx_delete_rsp_que()
error: we previously assumed 'rsp' could be null (see line 596)
--- drivers/scsi/qla2xxx/qla_mid.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
drivers/scsi/qla2xxx/qla_mid.c +4 -2
@@ -582,8 +582,9 @@ qla25xx_delete_req_que(struct scsi_qla_h ret =qla25xx_init_req_que (vha, req);if (ret !=QLA_SUCCESS )return QLA_FUNCTION_FAILED ; + +qla25xx_free_req_que (vha, req); } -qla25xx_free_req_que (vha, req);return ret; }
@@ -598,8 +599,9 @@ qla25xx_delete_rsp_que(struct scsi_qla_h ret =qla25xx_init_rsp_que (vha, rsp);if (ret !=QLA_SUCCESS )return QLA_FUNCTION_FAILED ; + +qla25xx_free_rsp_que (vha, rsp); } -qla25xx_free_rsp_que (vha, rsp);return ret; }
Greg Kroah-Hartman
maintainerPATCH 39/52 scsi: qla2xxx: Fix NULL pointer access for fcport structure
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Quinn Tran <[email protected]>
commit 5c25d451163cab9be80744cbc5448d6b95ab8d1a upstream.
when processing iocb in a timeout case, driver was trying to log messages without verifying if the fcport structure could have valid data. This results in a NULL pointer access.
--- drivers/scsi/qla2xxx/qla_init.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-)
drivers/scsi/qla2xxx/qla_init.c +9 -4
@@ -102,11 +102,16 @@ qla2x00_async_iocb_timeout(void *data)struct srb_iocb *lio = &sp->u.iocb_cmd;struct event_arg ea; -ql_dbg (ql_dbg_disc, fcport->vha,0x2071 , -"Async-%s timeout - hdl=%x portid=%06x %8phC.\n" , - sp->name, sp->handle, fcport->d_id.b24, fcport->port_name); +if (fcport) { +ql_dbg (ql_dbg_disc, fcport->vha,0x2071 , +"Async-%s timeout - hdl=%x portid=%06x %8phC.\n" , + sp->name, sp->handle, fcport->d_id.b24, fcport->port_name); - fcport->flags &= ~FCF_ASYNC_SENT ; + fcport->flags &= ~FCF_ASYNC_SENT ; + }else { +pr_info ("Async-%s timeout - hdl=%x.\n" , + sp->name, sp->handle); + }switch (sp->type) {case SRB_LOGIN_CMD :
Greg Kroah-Hartman
maintainerPATCH 40/52 scsi: qla2xxx: Fix logo flag for qlt_free_session_done()
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Himanshu Madhani <[email protected]>
commit a2390348c19d0819d525d375414a7cfdacb51a68 upstream.
Commit 3515832cc614 ("scsi: qla2xxx: Reset the logo flag, after target re-login.")fixed the target re-login after session relogin is complete, but missed out the qlt_free_session_done() path.
This patch clears send_els_logo flag in qlt_free_session_done() callback.
[mkp: checkpatch]
--- drivers/scsi/qla2xxx/qla_target.c | 1 + 1 file changed, 1 insertion(+)
drivers/scsi/qla2xxx/qla_target.c +1 -0
@@ -982,6 +982,7 @@ static void qlt_free_session_done(struct logo.id = sess->d_id; logo.cmd_count =0 ; + sess->send_els_logo =0 ;qlt_send_first_logo (vha, &logo); }
Greg Kroah-Hartman
maintainerPATCH 41/52 scsi: qla2xxx: Fix crashes in qla2x00_probe_one on probe failure
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Bill Kuzeja <[email protected]>
commit 6a2cf8d3663e13e19af636c2a8d92e766261dc45 upstream.
Because of the shifting around of code in qla2x00_probe_one recently, failures during adapter initialization can lead to problems, i.e. NULL pointer crashes and doubly freed data structures which cause eventual panics.
This V2 version makes the relevant memory free routines idempotent, so repeat calls won't cause any harm. I also removed the problematic probe_init_failed exit point as it is not needed.
--- drivers/scsi/qla2xxx/qla_os.c | 59 ++++++++++++++++++++++++++---------------- 1 file changed, 37 insertions(+), 22 deletions(-)
drivers/scsi/qla2xxx/qla_os.c +37 -22
@@ -449,7 +449,7 @@ static int qla2x00_alloc_queues(struct q ha->req_q_map[0 ] = req;set_bit (0 , ha->rsp_qid_map);set_bit (0 , ha->req_qid_map); -return 1 ; +return 0 ; fail_qpair_map:kfree (ha->base_qpair);
@@ -466,6 +466,9 @@ fail_req_map:static void qla2x00_free_req_que (struct qla_hw_data *ha,struct req_que *req) { +if (!ha->req_q_map) +return ; +if (IS_QLAFX00 (ha)) {if (req && req->ring_fx00) dma_free_coherent(&ha->pdev->dev,
@@ -476,14 +479,17 @@ static void qla2x00_free_req_que(struct (req->length +1 ) *sizeof (request_t), req->ring, req->dma); -if (req) +if (req) {kfree (req->outstanding_cmds); - -kfree (req); +kfree (req); + } }static void qla2x00_free_rsp_que (struct qla_hw_data *ha,struct rsp_que *rsp) { +if (!ha->rsp_q_map) +return ; +if (IS_QLAFX00 (ha)) {if (rsp && rsp->ring) dma_free_coherent(&ha->pdev->dev,
@@ -494,7 +500,8 @@ static void qla2x00_free_rsp_que(struct (rsp->length +1 ) *sizeof (response_t), rsp->ring, rsp->dma); } -kfree (rsp); +if (rsp) +kfree (rsp); }static void qla2x00_free_queues (struct qla_hw_data *ha)
@@ -1717,6 +1724,8 @@ qla2x00_abort_all_cmds(scsi_qla_host_t *struct qla_tgt_cmd *cmd;uint8_t trace =0 ; +if (!ha->req_q_map) +return ;spin_lock_irqsave (&ha->hardware_lock, flags);for (que =0 ; que < ha->max_req_queues; que++) { req = ha->req_q_map[que];
@@ -3071,14 +3080,14 @@ qla2x00_probe_one(struct pci_dev *pdev,/* Set up the irqs */ ret =qla2x00_request_irqs (ha, rsp);if (ret) - goto probe_hw_failed; + goto probe_failed;/* Alloc arrays of request and response ring ptrs */ -if (!qla2x00_alloc_queues (ha, req, rsp)) { +if (qla2x00_alloc_queues (ha, req, rsp)) {ql_log (ql_log_fatal, base_vha,0x003d ,"Failed to allocate memory for queue pointers..." "aborting.\n" ); - goto probe_init_failed; + goto probe_failed; }if (ha->mqenable &&shost_use_blk_mq (host)) {
@@ -3363,15 +3372,6 @@ skip_dpc:return 0 ; -probe_init_failed: -qla2x00_free_req_que (ha, req); - ha->req_q_map[0 ] =NULL ; -clear_bit (0 , ha->req_qid_map); -qla2x00_free_rsp_que (ha, rsp); - ha->rsp_q_map[0 ] =NULL ; -clear_bit (0 , ha->rsp_qid_map); - ha->max_req_queues = ha->max_rsp_queues =0 ; - probe_failed:if (base_vha->timer_active)qla2x00_stop_timer (base_vha);
@@ -4451,11 +4451,17 @@ qla2x00_mem_free(struct qla_hw_data *ha)if (ha->init_cb)dma_free_coherent (&ha->pdev->dev, ha->init_cb_size, ha->init_cb, ha->init_cb_dma); -vfree (ha->optrom_buffer); -kfree (ha->nvram); -kfree (ha->npiv_info); -kfree (ha->swl); -kfree (ha->loop_id_map); + +if (ha->optrom_buffer) +vfree (ha->optrom_buffer); +if (ha->nvram) +kfree (ha->nvram); +if (ha->npiv_info) +kfree (ha->npiv_info); +if (ha->swl) +kfree (ha->swl); +if (ha->loop_id_map) +kfree (ha->loop_id_map); ha->srb_mempool =NULL ; ha->ctx_mempool =NULL ;
@@ -4471,6 +4477,15 @@ qla2x00_mem_free(struct qla_hw_data *ha) ha->ex_init_cb_dma =0 ; ha->async_pd =NULL ; ha->async_pd_dma =0 ; + ha->loop_id_map =NULL ; + ha->npiv_info =NULL ; + ha->optrom_buffer =NULL ; + ha->swl =NULL ; + ha->nvram =NULL ; + ha->mctp_dump =NULL ; + ha->dcbx_tlv =NULL ; + ha->xgmac_data =NULL ; + ha->sfp_data =NULL ; ha->s_dma_pool =NULL ; ha->dl_dma_pool =NULL ;
Greg Kroah-Hartman
maintainerPATCH 42/52 usb: dwc2: fix STM32F7 USB OTG HS compatible
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Amelie Delaunay <[email protected]>
commit 1a149e3554e0324a3d551dfb327bdb67b150a320 upstream.
This patch fixes compatible for STM32F7 USB OTG HS and consistently rename dw2_set_params function.
The v2 former patch [1] had been acked by Paul Young, but v1 was merged.
[1] https://patchwork.kernel.org/patch/9925573/
--- drivers/usb/dwc2/params.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/usb/dwc2/params.c +3 -3
@@ -137,7 +137,7 @@ static void dwc2_set_stm32f4x9_fsotg_par p->activate_stm_fs_transceiver = true; } -static void dwc2_set_stm32f7xx_hsotg_params (struct dwc2_hsotg *hsotg) +static void dwc2_set_stm32f7_hsotg_params (struct dwc2_hsotg *hsotg) {struct dwc2_core_params *p = &hsotg->params;
@@ -164,8 +164,8 @@ const struct of_device_id dwc2_of_match_ { .compatible = "st,stm32f4x9-fsotg", .data = dwc2_set_stm32f4x9_fsotg_params }, { .compatible = "st,stm32f4x9-hsotg" }, - { .compatible = "st,stm32f7xx-hsotg", - .data = dwc2_set_stm32f7xx_hsotg_params }, + { .compatible = "st,stm32f7-hsotg", + .data = dwc2_set_stm32f7_hsotg_params }, {}, };MODULE_DEVICE_TABLE (of, dwc2_of_match_table);
Greg Kroah-Hartman
maintainerPATCH 43/52 dt-bindings: usb: fix the STM32F7 DWC2 OTG HS core binding
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Amelie Delaunay <[email protected]>
commit 4c437920fa216f66f6a5d469cae2a0360cc2d9c7 upstream.
This patch fixes binding documentation for DWC2 controller in HS mode found on STMicroelectronics STM32F7 SoC.
The v2 former patch [1] had been acked by Rob Herring, but v1 was merged.
[1] https://patchwork.kernel.org/patch/9925575/
--- Documentation/devicetree/bindings/usb/dwc2.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
Documentation/devicetree/bindings/usb/dwc2.txt +1 -1
@@ -19,7 +19,7 @@ Required properties: configured in FS mode; - "st,stm32f4x9-hsotg": The DWC2 USB HS controller instance in STM32F4x9 SoCs configured in HS mode; - - "st,stm32f7xx-hsotg": The DWC2 USB HS controller instance in STM32F7xx SoCs + - "st,stm32f7-hsotg": The DWC2 USB HS controller instance in STM32F7 SoCs configured in HS mode; - reg : Should contain 1 register range (address and length) - interrupts : Should contain 1 interrupt
Greg Kroah-Hartman
maintainerPATCH 44/52 USB: gadget: udc: Add missing platform_device_put() on error in bdc_pci_probe()
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Wei Yongjun <[email protected]>
commit 8874ae5f15f3feef3b4a415b9aed51edcf449aa1 upstream.
Add the missing platform_device_put() before return from bdc_pci_probe() in the platform_device_add_resources() error handling case.
--- drivers/usb/gadget/udc/bdc/bdc_pci.c | 1 + 1 file changed, 1 insertion(+)
drivers/usb/gadget/udc/bdc/bdc_pci.c +1 -0
@@ -77,6 +77,7 @@ static int bdc_pci_probe(struct pci_devif (ret) {dev_err (&pci->dev,"couldn't add resources to bdc device\n" ); +platform_device_put (bdc);return ret; }
Greg Kroah-Hartman
maintainerPATCH 45/52 usb: dwc3: Fix GDBGFIFOSPACE_TYPE values
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Thinh Nguyen <[email protected]>
commit b16ea8b9492e99e03b1269fe93ebdbf8e4eabf8a upstream.
The FIFO/Queue type values are incorrect. Correct them according to DWC_usb3 programming guide section 1.2.27 (or DWC_usb31 section 1.2.25).
Additionally, this patch includes ProtocolStatusQ and AuxEventQ types.
--- drivers/usb/dwc3/core.h | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-)
drivers/usb/dwc3/core.h +9 -7
@@ -158,13 +158,15 @@#define DWC3_GDBGFIFOSPACE_TYPE (n) (((n) << 5) & 0x1e0)#define DWC3_GDBGFIFOSPACE_SPACE_AVAILABLE (n) (((n) >> 16) & 0xffff) -#define DWC3_TXFIFOQ 1 -#define DWC3_RXFIFOQ 3 -#define DWC3_TXREQQ 5 -#define DWC3_RXREQQ 7 -#define DWC3_RXINFOQ 9 -#define DWC3_DESCFETCHQ 13 -#define DWC3_EVENTQ 15 +#define DWC3_TXFIFOQ 0 +#define DWC3_RXFIFOQ 1 +#define DWC3_TXREQQ 2 +#define DWC3_RXREQQ 3 +#define DWC3_RXINFOQ 4 +#define DWC3_PSTATQ 5 +#define DWC3_DESCFETCHQ 6 +#define DWC3_EVENTQ 7 +#define DWC3_AUXEVENTQ 8/* Global RX Threshold Configuration Register */ #define DWC3_GRXTHRCFG_MAXRXBURSTSIZE (n) (((n) & 0x1f) << 19)
Greg Kroah-Hartman
maintainerPATCH 46/52 usb: dwc3: core: Power-off core/PHYs on system_suspend in host mode
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Manu Gautam <[email protected]>
commit c4a5153e87fdf6805f63ff57556260e2554155a5 upstream.
Commit 689bf72c6e0d ("usb: dwc3: Don't reinitialize core during host bus-suspend/resume") updated suspend/resume routines to not power_off and reinit PHYs/core for host mode.
It broke platforms that rely on DWC3 core to power_off PHYs to enter low power state on system suspend.
Perform dwc3_core_exit/init only during host mode system_suspend/ resume to addresses power regression from above mentioned patch and also allow USB session to stay connected across runtime_suspend/resume in host mode. While at it also replace existing checks for HOST only dr_mode with current_dr_role to have similar core driver behavior for both Host-only and DRD+Host configurations.
--- drivers/usb/dwc3/core.c | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-)
drivers/usb/dwc3/core.c +22 -14
@@ -100,6 +100,8 @@ static void dwc3_set_prtcap(struct dwc3 reg &= ~(DWC3_GCTL_PRTCAPDIR (DWC3_GCTL_PRTCAP_OTG )); reg |=DWC3_GCTL_PRTCAPDIR (mode);dwc3_writel (dwc->regs,DWC3_GCTL , reg); + + dwc->current_dr_role = mode; }static void __dwc3_set_mode (struct work_struct *work)
@@ -133,8 +135,6 @@ static void __dwc3_set_mode(struct work_dwc3_set_prtcap (dwc, dwc->desired_dr_role); - dwc->current_dr_role = dwc->desired_dr_role; -spin_unlock_irqrestore (&dwc->lock, flags);switch (dwc->desired_dr_role) {
@@ -218,7 +218,7 @@ static int dwc3_core_soft_reset(struct d* XHCI driver will reset the host block. If dwc3 was configured for * host-only mode, then we can return early. */ -if (dwc->dr_mode ==USB_DR_MODE_HOST ) +if (dwc->current_dr_role ==DWC3_GCTL_PRTCAP_HOST )return 0 ; reg =dwc3_readl (dwc->regs,DWC3_DCTL );
@@ -915,7 +915,6 @@ static int dwc3_core_init_mode(struct dwswitch (dwc->dr_mode) {case USB_DR_MODE_PERIPHERAL : - dwc->current_dr_role =DWC3_GCTL_PRTCAP_DEVICE ;dwc3_set_prtcap (dwc,DWC3_GCTL_PRTCAP_DEVICE );if (dwc->usb2_phy)
@@ -931,7 +930,6 @@ static int dwc3_core_init_mode(struct dw }break ;case USB_DR_MODE_HOST : - dwc->current_dr_role =DWC3_GCTL_PRTCAP_HOST ;dwc3_set_prtcap (dwc,DWC3_GCTL_PRTCAP_HOST );if (dwc->usb2_phy)
@@ -1279,7 +1277,7 @@ static int dwc3_remove(struct platform_d }#ifdef CONFIG_PM -static int dwc3_suspend_common (struct dwc3 *dwc) +static int dwc3_suspend_common (struct dwc3 *dwc,pm_message_t msg) {unsigned long flags;
@@ -1291,6 +1289,10 @@ static int dwc3_suspend_common(struct dwdwc3_core_exit (dwc);break ;case DWC3_GCTL_PRTCAP_HOST : +/* do nothing during host runtime_suspend */ +if (!PMSG_IS_AUTO (msg)) +dwc3_core_exit (dwc); +break ;default :/* do nothing */ break ;
@@ -1299,7 +1301,7 @@ static int dwc3_suspend_common(struct dwreturn 0 ; } -static int dwc3_resume_common (struct dwc3 *dwc) +static int dwc3_resume_common (struct dwc3 *dwc,pm_message_t msg) {unsigned long flags;int ret;
@@ -1315,6 +1317,13 @@ static int dwc3_resume_common(struct dwcspin_unlock_irqrestore (&dwc->lock, flags);break ;case DWC3_GCTL_PRTCAP_HOST : +/* nothing to do on host runtime_resume */ +if (!PMSG_IS_AUTO (msg)) { + ret =dwc3_core_init (dwc); +if (ret) +return ret; + } +break ;default :/* do nothing */ break ;
@@ -1326,12 +1335,11 @@ static int dwc3_resume_common(struct dwcstatic int dwc3_runtime_checks (struct dwc3 *dwc) {switch (dwc->current_dr_role) { -case USB_DR_MODE_PERIPHERAL : -case USB_DR_MODE_OTG : +case DWC3_GCTL_PRTCAP_DEVICE :if (dwc->connected)return -EBUSY ;break ; -case USB_DR_MODE_HOST : +case DWC3_GCTL_PRTCAP_HOST :default :/* do nothing */ break ;
@@ -1348,7 +1356,7 @@ static int dwc3_runtime_suspend(struct dif (dwc3_runtime_checks (dwc))return -EBUSY ; - ret =dwc3_suspend_common (dwc); + ret =dwc3_suspend_common (dwc,PMSG_AUTO_SUSPEND );if (ret)return ret;
@@ -1364,7 +1372,7 @@ static int dwc3_runtime_resume(struct dedevice_init_wakeup (dev, false); - ret =dwc3_resume_common (dwc); + ret =dwc3_resume_common (dwc,PMSG_AUTO_RESUME );if (ret)return ret;
@@ -1411,7 +1419,7 @@ static int dwc3_suspend(struct device *dstruct dwc3 *dwc =dev_get_drvdata (dev);int ret; - ret =dwc3_suspend_common (dwc); + ret =dwc3_suspend_common (dwc,PMSG_SUSPEND );if (ret)return ret;
@@ -1427,7 +1435,7 @@ static int dwc3_resume(struct device *depinctrl_pm_select_default_state (dev); - ret =dwc3_resume_common (dwc); + ret =dwc3_resume_common (dwc,PMSG_RESUME );if (ret)return ret;
Greg Kroah-Hartman
maintainerPATCH 47/52 usb: dwc3: of-simple: fix oops by unbalanced clk disable call
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Enric Balletbo i Serra <[email protected]>
commit bff52352e0ccc2481f2b6b0d612ff8ff56c50f3a upstream.
dwc3_of_simple_dev_pm_ops has never been used since commit a0d8c4cfdf31 ("usb: dwc3: of-simple: set dev_pm_ops"), but this commit has brought and oops when unbind the device due this sequence:
dwc3_of_simple_remove
-> clk_disable ...
-> pm_runtime_put_sync
-> dwc3_of_simple_runtime_suspend
-> clk_disable (again)This double call to clk_core_disable causes a kernel oops like this:
WARNING: CPU: 1 PID: 4022 at drivers/clk/clk.c:656 clk_core_disable+0x78/0x80 CPU: 1 PID: 4022 Comm: bash Not tainted 4.15.0-rc4+ #44 Hardware name: Google Kevin (DT) pstate: 80000085 (Nzcv daIf -PAN -UAO) pc : clk_core_disable+0x78/0x80 lr : clk_core_disable_lock+0x20/0x38 sp : ffff00000bbf3a90 ... Call trace: clk_core_disable+0x78/0x80 clk_disable+0x1c/0x30 dwc3_of_simple_runtime_suspend+0x30/0x50 pm_generic_runtime_suspend+0x28/0x40
This patch fixes the unbalanced clk disable call by setting the num_clocks variable to zero once the clocks were disabled.
--- drivers/usb/dwc3/dwc3-of-simple.c | 1 + 1 file changed, 1 insertion(+)
drivers/usb/dwc3/dwc3-of-simple.c +1 -0
@@ -143,6 +143,7 @@ static int dwc3_of_simple_remove(structclk_disable_unprepare (simple->clks[i]);clk_put (simple->clks[i]); } + simple->num_clocks =0 ;reset_control_assert (simple->resets);reset_control_put (simple->resets);
Greg Kroah-Hartman
maintainerPATCH 48/52 usb: gadget: udc: renesas_usb3: fix oops in renesas_usb3_remove()
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Yoshihiro Shimoda <[email protected]>
commit e3190868e5f52fb26544f16463593d54ce46ce61 upstream.
This patch fixes an issue that the renesas_usb3_remove() causes NULL pointer dereference because the usb3_to_dev() macro will use the gadget instance and it will be deleted before.
--- drivers/usb/gadget/udc/renesas_usb3.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/usb/gadget/udc/renesas_usb3.c +1 -1
@@ -2410,7 +2410,7 @@ static int renesas_usb3_remove(struct pl__renesas_usb3_ep_free_request (usb3->ep0_req);if (usb3->phy)phy_put (usb3->phy); -pm_runtime_disable (usb3_to_dev (usb3)); +pm_runtime_disable (&pdev->dev);return 0 ; }
Greg Kroah-Hartman
maintainerPATCH 49/52 phy: phy-brcm-usb: Fix two DT properties to match bindings doc
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Al Cooper <[email protected]>
commit 5e498ff117c19fd80181b5bb09ecb024b552ece8 upstream.
Change "brcm,has_xhci" and "brcm,has_eohci" device tree properties to the preferred "brcm,has-xhci" and "brcm,has-eohci". This also matches the existing device tree bindings document.
--- drivers/phy/broadcom/phy-brcm-usb.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/phy/broadcom/phy-brcm-usb.c +2 -2
@@ -338,9 +338,9 @@ static int brcm_usb_phy_probe(struct plaARRAY_SIZE (brcm_dr_mode_to_name), mode, &priv->ini.mode); } -if (of_property_read_bool (dn,"brcm,has_xhci" )) +if (of_property_read_bool (dn,"brcm,has-xhci" )) priv->has_xhci = true; -if (of_property_read_bool (dn,"brcm,has_eohci" )) +if (of_property_read_bool (dn,"brcm,has-eohci" )) priv->has_eohci = true; err =brcm_usb_phy_dvr_init (dev, priv, dn);
Greg Kroah-Hartman
maintainerPATCH 50/52 phy: phy-brcm-usb-init: Some Low Speed keyboards fail on 7271
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Al Cooper <[email protected]>
commit 279a0cd0e02aa1e506d9acf94a7ecb530821359c upstream.
Enable the the Low Speed Keep Alive signal on the 7271b0 by setting the LS_KEEP_ALIVE bit in the USB CTRL OBRIDGE register otherwise some Dell Low Speed keyboards fail.
Also do a little cleanup of the EBRIDGE ESTOP_SCB_REQ bit. Since this is only used on one platform, remove it from the platform tables and just use "if (family == ").
--- drivers/phy/broadcom/phy-brcm-usb-init.c | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-)
drivers/phy/broadcom/phy-brcm-usb-init.c +7 -12
@@ -50,6 +50,8 @@#define USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_MASK 0x80000000/* option */ #define USB_CTRL_EBRIDGE 0x0c#define USB_CTRL_EBRIDGE_ESTOP_SCB_REQ_MASK 0x00020000/* option */ +#define USB_CTRL_OBRIDGE 0x10 +#define USB_CTRL_OBRIDGE_LS_KEEP_ALIVE_MASK 0x08000000#define USB_CTRL_MDIO 0x14#define USB_CTRL_MDIO2 0x18#define USB_CTRL_UTMI_CTL_1 0x2c
@@ -116,7 +118,6 @@ enum {USB_CTRL_SETUP_STRAP_IPP_SEL_SELECTOR ,USB_CTRL_SETUP_OC3_DISABLE_SELECTOR ,USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_SELECTOR , -USB_CTRL_EBRIDGE_ESTOP_SCB_REQ_SELECTOR ,USB_CTRL_USB_PM_BDC_SOFT_RESETB_SELECTOR ,USB_CTRL_USB_PM_XHC_SOFT_RESETB_SELECTOR , USB_CTRL_USB_PM_USB_PWRDN_SELECTOR,
@@ -203,7 +204,6 @@ usb_reg_bits_map_table[BRCM_FAMILY_COUNTUSB_CTRL_SETUP_STRAP_IPP_SEL_MASK ,USB_CTRL_SETUP_OC3_DISABLE_MASK ,0 ,/* USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_MASK */ -USB_CTRL_EBRIDGE_ESTOP_SCB_REQ_MASK ,0 ,/* USB_CTRL_USB_PM_BDC_SOFT_RESETB_MASK */ USB_CTRL_USB_PM_XHC_SOFT_RESETB_MASK , USB_CTRL_USB_PM_USB_PWRDN_MASK,
@@ -225,7 +225,6 @@ usb_reg_bits_map_table[BRCM_FAMILY_COUNT0 ,/* USB_CTRL_SETUP_STRAP_IPP_SEL_MASK */ USB_CTRL_SETUP_OC3_DISABLE_MASK ,USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_MASK , -USB_CTRL_EBRIDGE_ESTOP_SCB_REQ_MASK ,0 ,/* USB_CTRL_USB_PM_BDC_SOFT_RESETB_MASK */ USB_CTRL_USB_PM_XHC_SOFT_RESETB_VAR_MASK , 0, /* USB_CTRL_USB_PM_USB_PWRDN_MASK */
@@ -247,7 +246,6 @@ usb_reg_bits_map_table[BRCM_FAMILY_COUNTUSB_CTRL_SETUP_STRAP_IPP_SEL_MASK ,USB_CTRL_SETUP_OC3_DISABLE_MASK ,0 ,/* USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_MASK */ -USB_CTRL_EBRIDGE_ESTOP_SCB_REQ_MASK ,USB_CTRL_USB_PM_BDC_SOFT_RESETB_MASK ,USB_CTRL_USB_PM_XHC_SOFT_RESETB_MASK , USB_CTRL_USB_PM_USB_PWRDN_MASK,
@@ -269,7 +267,6 @@ usb_reg_bits_map_table[BRCM_FAMILY_COUNT0 ,/* USB_CTRL_SETUP_STRAP_IPP_SEL_MASK */ USB_CTRL_SETUP_OC3_DISABLE_MASK ,USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_MASK , -USB_CTRL_EBRIDGE_ESTOP_SCB_REQ_MASK ,0 ,/* USB_CTRL_USB_PM_BDC_SOFT_RESETB_MASK */ USB_CTRL_USB_PM_XHC_SOFT_RESETB_VAR_MASK , 0, /* USB_CTRL_USB_PM_USB_PWRDN_MASK */
@@ -291,7 +288,6 @@ usb_reg_bits_map_table[BRCM_FAMILY_COUNT0 ,/* USB_CTRL_SETUP_STRAP_IPP_SEL_MASK */ USB_CTRL_SETUP_OC3_DISABLE_MASK ,0 ,/* USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_MASK */ -USB_CTRL_EBRIDGE_ESTOP_SCB_REQ_MASK ,0 ,/* USB_CTRL_USB_PM_BDC_SOFT_RESETB_MASK */ USB_CTRL_USB_PM_XHC_SOFT_RESETB_VAR_MASK , USB_CTRL_USB_PM_USB_PWRDN_MASK,
@@ -313,7 +309,6 @@ usb_reg_bits_map_table[BRCM_FAMILY_COUNT0 ,/* USB_CTRL_SETUP_STRAP_IPP_SEL_MASK */ 0 ,/* USB_CTRL_SETUP_OC3_DISABLE_MASK */ USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_MASK , -0 ,/* USB_CTRL_EBRIDGE_ESTOP_SCB_REQ_MASK */ 0 ,/* USB_CTRL_USB_PM_BDC_SOFT_RESETB_MASK */ 0 ,/* USB_CTRL_USB_PM_XHC_SOFT_RESETB_MASK */ 0, /* USB_CTRL_USB_PM_USB_PWRDN_MASK */
@@ -335,7 +330,6 @@ usb_reg_bits_map_table[BRCM_FAMILY_COUNTUSB_CTRL_SETUP_STRAP_IPP_SEL_MASK ,USB_CTRL_SETUP_OC3_DISABLE_MASK ,0 ,/* USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_MASK */ -0 ,/* USB_CTRL_EBRIDGE_ESTOP_SCB_REQ_MASK */ USB_CTRL_USB_PM_BDC_SOFT_RESETB_MASK ,USB_CTRL_USB_PM_XHC_SOFT_RESETB_MASK , USB_CTRL_USB_PM_USB_PWRDN_MASK,
@@ -357,7 +351,6 @@ usb_reg_bits_map_table[BRCM_FAMILY_COUNT0 ,/* USB_CTRL_SETUP_STRAP_IPP_SEL_MASK */ USB_CTRL_SETUP_OC3_DISABLE_MASK ,USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_MASK , -0 ,/* USB_CTRL_EBRIDGE_ESTOP_SCB_REQ_MASK */ 0 ,/* USB_CTRL_USB_PM_BDC_SOFT_RESETB_MASK */ 0 ,/* USB_CTRL_USB_PM_XHC_SOFT_RESETB_MASK */ 0, /* USB_CTRL_USB_PM_USB_PWRDN_MASK */
@@ -379,7 +372,6 @@ usb_reg_bits_map_table[BRCM_FAMILY_COUNTUSB_CTRL_SETUP_STRAP_IPP_SEL_MASK ,USB_CTRL_SETUP_OC3_DISABLE_MASK ,0 ,/* USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_MASK */ -USB_CTRL_EBRIDGE_ESTOP_SCB_REQ_MASK ,USB_CTRL_USB_PM_BDC_SOFT_RESETB_MASK ,USB_CTRL_USB_PM_XHC_SOFT_RESETB_MASK , USB_CTRL_USB_PM_USB_PWRDN_MASK,
@@ -401,7 +393,6 @@ usb_reg_bits_map_table[BRCM_FAMILY_COUNTUSB_CTRL_SETUP_STRAP_IPP_SEL_MASK ,USB_CTRL_SETUP_OC3_DISABLE_MASK ,0 ,/* USB_CTRL_PLL_CTL_PLL_IDDQ_PWRDN_MASK */ -USB_CTRL_EBRIDGE_ESTOP_SCB_REQ_MASK ,USB_CTRL_USB_PM_BDC_SOFT_RESETB_MASK ,USB_CTRL_USB_PM_XHC_SOFT_RESETB_MASK , USB_CTRL_USB_PM_USB_PWRDN_MASK,
@@ -952,13 +943,17 @@ void brcm_usb_init_eohci(struct brcm_usb* Don't enable this so the memory controller doesn't read * into memory holes. NOTE: This bit is low true on 7366C0. */ -USB_CTRL_SET_FAMILY (params,EBRIDGE ,ESTOP_SCB_REQ ); +USB_CTRL_SET (ctrl,EBRIDGE ,ESTOP_SCB_REQ );/* Setup the endian bits */ reg =brcmusb_readl (USB_CTRL_REG (ctrl,SETUP )); reg &= ~USB_CTRL_SETUP_ENDIAN_BITS ; reg |=USB_CTRL_MASK_FAMILY (params,SETUP ,ENDIAN );brcmusb_writel (reg,USB_CTRL_REG (ctrl,SETUP )); + +if (params->selected_family ==BRCM_FAMILY_7271A0 ) +/* Enable LS keep alive fix for certain keyboards */ +USB_CTRL_SET (ctrl,OBRIDGE ,LS_KEEP_ALIVE ); }void brcm_usb_init_xhci (struct brcm_usb_init_params *params)
Greg Kroah-Hartman
maintainerPATCH 51/52 phy: phy-brcm-usb-init: DRD mode can cause crash on startup
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Al Cooper <[email protected]>
commit 0aa0c12262fd848c48448c39ff6c1c097be00dd4 upstream.
This is caused by a bug in the BDC core. When the BDC core comes out of reset and it's not selected, it gets a backup clock. When the BDC core is selected, it get's the main clock. If HOST mode is then selected the BDC core has the main clock shut off but the backup clock is not restored.
The failure scenario and cause are as follows:
- DRD mode is active
- Device mode is selected first in bootloader
- When host mode is now selected, the clock to the BDC is cut off.
- BDC registers are inaccessible and therefore the BDC driver crashes upon Linux boot.
The fix is to have the phy driver always force a BDC reset on startup.
--- drivers/phy/broadcom/phy-brcm-usb-init.c | 1 + 1 file changed, 1 insertion(+)
drivers/phy/broadcom/phy-brcm-usb-init.c +1 -0
@@ -917,6 +917,7 @@ void brcm_usb_init_common(struct brcm_usUSB_CTRL_UNSET_FAMILY (params,USB_PM ,BDC_SOFT_RESETB );break ;default : +USB_CTRL_UNSET_FAMILY (params,USB_PM ,BDC_SOFT_RESETB );USB_CTRL_SET_FAMILY (params,USB_PM ,BDC_SOFT_RESETB );break ; }
Greg Kroah-Hartman
maintainerPATCH 52/52 phy: phy-brcm-usb-init: Power down USB 3.0 PHY when XHCI disabled
In reply to Greg Kroah-Hartman4.15-stable review patch. If anyone has any objections, please let me know.
------------------
From: Al Cooper <[email protected]>
commit cd6f769fdea7ff7d77a6cc97658c60ca0b836d0e upstream.
Set PHY3_IDDQ_OVERRIDE in the xhci uninit routine. This will save additional power when the XHCI driver is not enabled.
--- drivers/phy/broadcom/phy-brcm-usb-init.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/phy/broadcom/phy-brcm-usb-init.c +2 -0
@@ -73,6 +73,7 @@#define USB_CTRL_USB30_CTL1_USB3_IPP_MASK 0x20000000/* option */ #define USB_CTRL_USB30_PCTL 0x70#define USB_CTRL_USB30_PCTL_PHY3_SOFT_RESETB_MASK 0x00000002 +#define USB_CTRL_USB30_PCTL_PHY3_IDDQ_OVERRIDE_MASK 0x00008000#define USB_CTRL_USB30_PCTL_PHY3_SOFT_RESETB_P1_MASK 0x00020000#define USB_CTRL_USB_DEVICE_CTL1 0x90#define USB_CTRL_USB_DEVICE_CTL1_PORT_MODE_MASK 0x00000003/* option */
@@ -999,6 +1000,7 @@ void brcm_usb_uninit_eohci(struct brcm_uvoid brcm_usb_uninit_xhci (struct brcm_usb_init_params *params) {brcmusb_xhci_soft_reset (params,1 ); +USB_CTRL_SET (params->ctrl_regs,USB30_PCTL ,PHY3_IDDQ_OVERRIDE ); }void brcm_usb_set_family_map (struct brcm_usb_init_params *params)
stable-rc/linux-4.15.y boot: 118 boots: 1 failed, 103 passed with 11 offline, 3 untried/unknown (v4.15.11-53-g3c07abdbc9bc)
stable-rc/linux-4.15.y boot: 118 boots: 1 failed, 103 passed with 11 offline, 3 untried/unknown (v4.15.11-53-g3c07abdbc9bc)
Full Boot Summary: https://kernelci.org/boot/all/job/stable-rc/branch/linux-4.15.y/kernel/v4.15.11-53-g3c07abdbc9bc/
Full Build Summary: https://kernelci.org/build/stable-rc/branch/linux-4.15.y/kernel/v4.15.11-53-g3c07abdbc9bc/
Tree: stable-rc
Branch: linux-4.15.y
Git Describe: v4.15.11-53-g3c07abdbc9bc
Git Commit: 3c07abdbc9bc2a5e03a0f3be3a967484c4210abe
Git URL: http://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
Tested: 67 unique boards, 23 SoC families, 17 builds out of 185
Boot Regressions Detected:
arm:
sunxi_defconfig:
sun5i-gr8-chip-pro:
lab-free-electrons: new failure (last pass: v4.15.11)
Boot Failure Detected:
arm:
sunxi_defconfig
sun5i-gr8-chip-pro: 1 failed lab
Offline Platforms:
arm:
multi_v7_defconfig:
exynos5410-odroidxu: 1 offline lab
meson8b-odroidc1: 1 offline lab
vf610-colibri-eval-v3: 1 offline lab
exynos_defconfig:
exynos5410-odroidxu: 1 offline lab
exynos5800-peach-pi: 1 offline lab
imx_v6_v7_defconfig:
vf610-colibri-eval-v3: 1 offline lab
arm64:
defconfig:
meson-gxbb-odroidc2: 1 offline lab
meson-gxbb-p200: 1 offline lab meson-gxl-s905x-khadas-vim: 1 offline lab meson-gxl-s905x-nexbox-a95x: 1 offline lab
mt7622-rfb1: 1 offline lab
---
For more info write to <[email protected]>
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.15.12 release. There are 52 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Wed Mar 21 18:07:15 UTC 2018. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.15.12-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.15.y
and the diffstat can be found below.thanks,
greg k-h
Results from Linaro’s test farm.
No regressions on arm64, arm, qemu_x86_64 and x86_64.
Summary
------------------------------------------------------------------------
kernel: 4.15.12-rc1
git repo: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
git branch: linux-4.15.y
git commit: 3c07abdbc9bc2a5e03a0f3be3a967484c4210abe
git describe: v4.15.11-53-g3c07abdbc9bc
Test details: https://qa-reports.linaro.org/lkft/linux-stable-rc-4.15-oe/build/v4.15.11-53-g3c07abdbc9bc
No regressions (compared to build v4.15.11)
Boards, architectures and test suites:
-------------------------------------
dragonboard-410c - arm64
* boot - fail: 2, pass: 20
* kselftest - skip: 20, pass: 45
* libhugetlbfs - skip: 1, pass: 90
* ltp-cap_bounds-tests - pass: 2
* ltp-containers-tests - skip: 17, pass: 64
* ltp-fcntl-locktests-tests - pass: 2
* ltp-filecaps-tests - pass: 2
* ltp-fs-tests - skip: 2, pass: 61
* ltp-fs_bind-tests - pass: 2
* ltp-fs_perms_simple-tests - pass: 19
* ltp-fsx-tests - pass: 2
* ltp-hugetlb-tests - skip: 1, pass: 21
* ltp-io-tests - pass: 3
* ltp-ipc-tests - pass: 9
* ltp-math-tests - pass: 11
* ltp-nptl-tests - pass: 2
* ltp-pty-tests - pass: 4
* ltp-sched-tests - pass: 14
* ltp-securebits-tests - pass: 4
* ltp-syscalls-tests - skip: 148, pass: 1002
* ltp-timers-tests - skip: 1, pass: 12
hi6220-hikey - arm64
* boot - pass: 20
* kselftest - skip: 17, pass: 48
* libhugetlbfs - skip: 1, pass: 90
* ltp-cap_bounds-tests - pass: 2
* ltp-containers-tests - skip: 17, pass: 64
* ltp-fcntl-locktests-tests - pass: 2
* ltp-filecaps-tests - pass: 2
* ltp-fs-tests - skip: 2, pass: 61
* ltp-fs_bind-tests - pass: 2
* ltp-fs_perms_simple-tests - pass: 19
* ltp-fsx-tests - pass: 2
* ltp-hugetlb-tests - skip: 1, pass: 21
* ltp-io-tests - pass: 3
* ltp-ipc-tests - pass: 9
* ltp-math-tests - pass: 11
* ltp-nptl-tests - pass: 2
* ltp-pty-tests - pass: 4
* ltp-sched-tests - skip: 4, pass: 10
* ltp-securebits-tests - pass: 4
* ltp-syscalls-tests - skip: 151, pass: 999
* ltp-timers-tests - skip: 1, pass: 12
juno-r2 - arm64
* boot - pass: 20
* kselftest - skip: 17, pass: 48
* libhugetlbfs - skip: 1, pass: 90
* ltp-cap_bounds-tests - pass: 2
* ltp-containers-tests - skip: 17, pass: 64
* ltp-fcntl-locktests-tests - pass: 2
* ltp-filecaps-tests - pass: 2
* ltp-fs-tests - skip: 2, pass: 61
* ltp-fs_bind-tests - pass: 2
* ltp-fs_perms_simple-tests - pass: 19
* ltp-fsx-tests - pass: 2
* ltp-hugetlb-tests - pass: 22
* ltp-io-tests - pass: 3
* ltp-ipc-tests - pass: 9
* ltp-math-tests - pass: 11
* ltp-nptl-tests - pass: 2
* ltp-pty-tests - pass: 4
* ltp-sched-tests - skip: 4, pass: 10
* ltp-securebits-tests - pass: 4
* ltp-syscalls-tests - skip: 149, pass: 1001
* ltp-timers-tests - skip: 1, pass: 12
qemu_x86_64
* boot - pass: 22
* kselftest - skip: 22, pass: 60
* kselftest-vsyscall-mode-native - skip: 22, pass: 60
* kselftest-vsyscall-mode-none - skip: 22, pass: 60
* libhugetlbfs - skip: 1, pass: 90
* ltp-cap_bounds-tests - pass: 2
* ltp-containers-tests - skip: 17, pass: 64
* ltp-fcntl-locktests-tests - pass: 2
* ltp-filecaps-tests - pass: 2
* ltp-fs-tests - skip: 6, pass: 57
* ltp-fs_bind-tests - pass: 2
* ltp-fs_perms_simple-tests - pass: 19
* ltp-fsx-tests - pass: 2
* ltp-hugetlb-tests - pass: 22
* ltp-io-tests - pass: 3
* ltp-ipc-tests - pass: 9
* ltp-math-tests - pass: 11
* ltp-nptl-tests - pass: 2
* ltp-pty-tests - pass: 4
* ltp-sched-tests - skip: 1, pass: 13
* ltp-securebits-tests - pass: 4
* ltp-syscalls-tests - skip: 148, pass: 1002
* ltp-timers-tests - skip: 1, pass: 12
x15 - arm
* boot - pass: 21
* kselftest - skip: 21, pass: 41
* libhugetlbfs - skip: 1, pass: 87
* ltp-cap_bounds-tests - pass: 2
* ltp-containers-tests - skip: 18, pass: 63
* ltp-fcntl-locktests-tests - pass: 2
* ltp-filecaps-tests - pass: 2
* ltp-fs-tests - skip: 2, pass: 61
* ltp-fs_bind-tests - pass: 2
* ltp-fs_perms_simple-tests - pass: 19
* ltp-fsx-tests - pass: 2
* ltp-hugetlb-tests - skip: 2, pass: 20
* ltp-io-tests - pass: 3
* ltp-ipc-tests - pass: 9
* ltp-math-tests - pass: 11
* ltp-nptl-tests - pass: 2
* ltp-pty-tests - pass: 4
* ltp-sched-tests - skip: 1, pass: 13
* ltp-securebits-tests - pass: 4
* ltp-syscalls-tests - skip: 97, pass: 1053
* ltp-timers-tests - skip: 1, pass: 12
x86_64
* boot - pass: 22
* kselftest - skip: 19, pass: 61
* kselftest-vsyscall-mode-native - skip: 19, pass: 61
* kselftest-vsyscall-mode-none - skip: 19, fail: 1, pass: 60
* libhugetlbfs - skip: 1, pass: 89
* ltp-cap_bounds-tests - pass: 2
* ltp-containers-tests - skip: 17, pass: 64
* ltp-fcntl-locktests-tests - pass: 2
* ltp-filecaps-tests - pass: 2
* ltp-fs-tests - skip: 1, pass: 62
* ltp-fs_bind-tests - pass: 2
* ltp-fs_perms_simple-tests - pass: 19
* ltp-fsx-tests - pass: 2
* ltp-hugetlb-tests - pass: 22
* ltp-io-tests - pass: 3
* ltp-ipc-tests - pass: 9
* ltp-math-tests - pass: 11
* ltp-nptl-tests - pass: 2
* ltp-pty-tests - pass: 4
* ltp-sched-tests - skip: 5, pass: 9
* ltp-securebits-tests - pass: 4
* ltp-syscalls-tests - skip: 119, pass: 1031
* ltp-timers-tests - skip: 1, pass: 12
--
Linaro QA (beta)
https://qa-reports.linaro.org
Greg Kroah-Hartman
maintainerQuoted 16 lines · Naresh Kamboju
Quoted 14 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.15.12 release. There are 52 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Wed Mar 21 18:07:15 UTC 2018. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.15.12-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.15.y
and the diffstat can be found below.
Quoted 7 lines
Quoted 3 lines
thanks,
greg k-h
Results from Linaro’s test farm.
No regressions on arm64, arm,qemu_x86_64andx86_64.
Thanks for testing this and 4.14.y and letting me know.
greg k-h
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.15.12 release. There are 52 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Wed Mar 21 18:07:15 UTC 2018. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.15.12-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.15.y
and the diffstat can be found below.thanks,
greg k-h
Merged with Ubuntu bionic changes, build successfully on amd64, i386, ppc64el, arm64, armhf and s390x.
Boot tested on ppc64el virtual machine and amd64 Thinkpad X200.
Cascardo.
Greg Kroah-Hartman
maintainerQuoted 15 lines · Thadeu Lima de Souza Cascardo
Quoted 14 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.15.12 release. There are 52 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Wed Mar 21 18:07:15 UTC 2018. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.15.12-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.15.y
and the diffstat can be found below.
Quoted 8 lines
Quoted 3 lines
thanks,
greg k-h
Merged with Ubuntu bionic changes, build successfully on amd64, i386, ppc64el, arm64, armhf and s390x.
Boot tested on ppc64el virtual machine and amd64 Thinkpad X200.
Wonderful, thanks for testing this and letting me know.
greg k-h
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.15.12 release. There are 52 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Wed Mar 21 18:07:15 UTC 2018. Anything received after that time might be too late.
For v4.15.11-53-g3c07abd:
Build results:
total: 147 pass: 147 fail: 0 Qemu test results: total: 141 pass: 141 fail: 0
Details are available at http://kerneltests.org/builders.
Guenter
Greg Kroah-Hartman
maintainerQuoted 10 lines · Guenter Roeck
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.15.12 release. There are 52 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Wed Mar 21 18:07:15 UTC 2018. Anything received after that time might be too late.
Quoted 8 lines
For v4.15.11-53-g3c07abd:
Build results:
total: 147 pass: 147 fail: 0 Qemu test results: total: 141 pass: 141 fail: 0Details are available at http://kerneltests.org/builders.
Thanks for testing these and letting me know.
greg k-h
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.15.12 release. There are 52 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Wed Mar 21 18:07:15 UTC 2018. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 9 lines
https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.15.12-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.15.y
and the diffstat can be found below.thanks,
greg k-h
Compiled and booted on my test system. No mdesg regressions.
thanks,
-- Shuah
Greg Kroah-Hartman
maintainerQuoted 15 lines · Shuah Khan
Quoted 14 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.15.12 release. There are 52 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Wed Mar 21 18:07:15 UTC 2018. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.15.12-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.15.y
and the diffstat can be found below.
Quoted 6 lines
Quoted 4 lines
thanks,
greg k-h
Compiled and booted on my test system. No mdesg regressions.
Thanks for testing all of these and letting me know.
greg k-h