Skip to content
Snippets Groups Projects
  1. Feb 17, 2025
  2. Feb 16, 2025
    • Linus Torvalds's avatar
      Merge tag 'irq_urgent_for_v6.14_rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · ba643b6d
      Linus Torvalds authored
      Pull irq Kconfig cleanup from Borislav Petkov:
      
       - Remove an unused config item GENERIC_PENDING_IRQ_CHIPFLAGS
      
      * tag 'irq_urgent_for_v6.14_rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        genirq: Remove unused CONFIG_GENERIC_PENDING_IRQ_CHIPFLAGS
      ba643b6d
    • Linus Torvalds's avatar
      Merge tag 'perf_urgent_for_v6.14_rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · ff1848d8
      Linus Torvalds authored
      Pull x86 perf fixes from Borislav Petkov:
      
       - Explicitly clear DEBUGCTL.LBR to prevent LBRs continuing being
         enabled after handoff to the OS
      
       - Check CPUID(0x23) leaf and subleafs presence properly
      
       - Remove the PEBS-via-PT feature from being supported on hybrid systems
      
       - Fix perf record/top default commands on systems without a raw PMU
         registered
      
      * tag 'perf_urgent_for_v6.14_rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        perf/x86/intel: Ensure LBRs are disabled when a CPU is starting
        perf/x86/intel: Fix ARCH_PERFMON_NUM_COUNTER_LEAF
        perf/x86/intel: Clean up PEBS-via-PT on hybrid
        perf/x86/rapl: Fix the error checking order
      ff1848d8
    • Linus Torvalds's avatar
      Merge tag 'sched_urgent_for_v6.14_rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · ff3b373e
      Linus Torvalds authored
      Pull scheduler fix from Borislav Petkov:
      
       - Clarify what happens when a task is woken up from the wake queue and
         make clear its removal from that queue is atomic
      
      * tag 'sched_urgent_for_v6.14_rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        sched: Clarify wake_up_q()'s write to task->wake_q.next
      ff3b373e
    • Linus Torvalds's avatar
      Merge tag 'objtool_urgent_for_v6.14_rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 592c358e
      Linus Torvalds authored
      Pull objtool fixes from Borislav Petkov:
      
       - Move a warning about a lld.ld breakage into the verbose setting as
         said breakage has been fixed in the meantime
      
       - Teach objtool to ignore dangling jump table entries added by Clang
      
      * tag 'objtool_urgent_for_v6.14_rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        objtool: Move dodgy linker warn to verbose
        objtool: Ignore dangling jump table entries
      592c358e
    • Linus Torvalds's avatar
      Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm · 82ff3164
      Linus Torvalds authored
      Pull kvm fixes from Paolo Bonzini:
       "ARM:
      
         - Large set of fixes for vector handling, especially in the
           interactions between host and guest state.
      
           This fixes a number of bugs affecting actual deployments, and
           greatly simplifies the FP/SIMD/SVE handling. Thanks to Mark Rutland
           for dealing with this thankless task.
      
         - Fix an ugly race between vcpu and vgic creation/init, resulting in
           unexpected behaviours
      
         - Fix use of kernel VAs at EL2 when emulating timers with nVHE
      
         - Small set of pKVM improvements and cleanups
      
        x86:
      
         - Fix broken SNP support with KVM module built-in, ensuring the PSP
           module is initialized before KVM even when the module
           infrastructure cannot be used to order initcalls
      
         - Reject Hyper-V SEND_IPI hypercalls if the local APIC isn't being
           emulated by KVM to fix a NULL pointer dereference
      
         - Enter guest mode (L2) from KVM's perspective before initializing
           the vCPU's nested NPT MMU so that the MMU is properly tagged for
           L2, not L1
      
         - Load the guest's DR6 outside of the innermost .vcpu_run() loop, as
           the guest's value may be stale if a VM-Exit is handled in the
           fastpath"
      
      * tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm: (25 commits)
        x86/sev: Fix broken SNP support with KVM module built-in
        KVM: SVM: Ensure PSP module is initialized if KVM module is built-in
        crypto: ccp: Add external API interface for PSP module initialization
        KVM: arm64: vgic: Hoist SGI/PPI alloc from vgic_init() to kvm_create_vgic()
        KVM: arm64: timer: Drop warning on failed interrupt signalling
        KVM: arm64: Fix alignment of kvm_hyp_memcache allocations
        KVM: arm64: Convert timer offset VA when accessed in HYP code
        KVM: arm64: Simplify warning in kvm_arch_vcpu_load_fp()
        KVM: arm64: Eagerly switch ZCR_EL{1,2}
        KVM: arm64: Mark some header functions as inline
        KVM: arm64: Refactor exit handlers
        KVM: arm64: Refactor CPTR trap deactivation
        KVM: arm64: Remove VHE host restore of CPACR_EL1.SMEN
        KVM: arm64: Remove VHE host restore of CPACR_EL1.ZEN
        KVM: arm64: Remove host FPSIMD saving for non-protected KVM
        KVM: arm64: Unconditionally save+flush host FPSIMD/SVE/SME state
        KVM: x86: Load DR6 with guest value only before entering .vcpu_run() loop
        KVM: nSVM: Enter guest mode before initializing nested NPT MMU
        KVM: selftests: Add CPUID tests for Hyper-V features that need in-kernel APIC
        KVM: selftests: Manage CPUID array in Hyper-V CPUID test's core helper
        ...
      82ff3164
    • Linus Torvalds's avatar
      Merge tag 'mips-fixes_6.14_1' of git://git.kernel.org/pub/scm/linux/kernel/git/mips/linux · b878a1c0
      Linus Torvalds authored
      Pull MIPS fixes from Thomas Bogendoerfer:
       "Fix for o32 ptrace/get_syscall_info"
      
      * tag 'mips-fixes_6.14_1' of git://git.kernel.org/pub/scm/linux/kernel/git/mips/linux:
        MIPS: fix mips_get_syscall_arg() for o32
        MIPS: Export syscall stack arguments properly for remote use
      b878a1c0
    • Linus Torvalds's avatar
      Merge tag 'devicetree-fixes-for-6.14-1' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux · ad1b832b
      Linus Torvalds authored
      Pull devicetree fixes from Rob Herring:
      
       - Add bindings for QCom QCS8300 clocks, QCom SAR2130P qfprom, and
         powertip,{st7272|hx8238a} displays
      
       - Fix compatible for TI am62a7 dss
      
       - Add a kunit test for __of_address_resource_bounds()
      
      * tag 'devicetree-fixes-for-6.14-1' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux:
        dt-bindings: display: Add powertip,{st7272|hx8238a} as DT Schema description
        dt-bindings: nvmem: qcom,qfprom: Add SAR2130P compatible
        dt-bindings: display: ti: Fix compatible for am62a7 dss
        of: address: Add kunit test for __of_address_resource_bounds()
        dt-bindings: clock: qcom: Add QCS8300 video clock controller
        dt-bindings: clock: qcom: Add CAMCC clocks for QCS8300
        dt-bindings: clock: qcom: Add GPU clocks for QCS8300
      ad1b832b
    • Linus Torvalds's avatar
      Merge tag 'uml-for-linus-6.14-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/uml/linux · ad73b9a1
      Linus Torvalds authored
      Pull UML fixes from Richard Weinberger:
      
       - Align signal stack correctly
      
       - Convert to raw spinlocks where needed (irq and virtio)
      
       - FPU related fixes
      
      * tag 'uml-for-linus-6.14-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/uml/linux:
        um: convert irq_lock to raw spinlock
        um: virtio_uml: use raw spinlock
        um: virt-pci: don't use kmalloc()
        um: fix execve stub execution on old host OSs
        um: properly align signal stack on x86_64
        um: avoid copying FP state from init_task
        um: add back support for FXSAVE registers
      ad73b9a1
    • Linus Torvalds's avatar
      Merge tag 'trace-ring-buffer-v6.14-rc2' of... · 5784d8c9
      Linus Torvalds authored
      Merge tag 'trace-ring-buffer-v6.14-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace
      
      Pull trace ring buffer fixes from Steven Rostedt:
      
       - Enable resize on mmap() error
      
         When a process mmaps a ring buffer, its size is locked and resizing
         is disabled. But if the user passes in a wrong parameter, the mmap()
         can fail after the resize was disabled and the mmap() exits with
         error without reenabling the ring buffer resize. This prevents the
         ring buffer from ever being resized after that. Reenable resizing of
         the ring buffer on mmap() error.
      
       - Have resizing return proper error and not always -ENOMEM
      
         If the ring buffer is mmapped by one task and another task tries to
         resize the buffer it will error with -ENOMEM. This is confusing to
         the user as there may be plenty of memory available. Have it return
         the error that actually happens (in this case -EBUSY) where the user
         can understand why the resize failed.
      
       - Test the sub-buffer array to validate persistent memory buffer
      
         On boot up, the initialization of the persistent memory buffer will
         do a validation check to see if the content of the data is valid, and
         if so, it will use the memory as is, otherwise it re-initializes it.
         There's meta data in this persistent memory that keeps track of which
         sub-buffer is the reader page and an array that states the order of
         the sub-buffers. The values in this array are indexes into the
         sub-buffers. The validator checks to make sure that all the entries
         in the array are within the sub-buffer list index, but it does not
         check for duplications.
      
         While working on this code, the array got corrupted and had
         duplicates, where not all the sub-buffers were accounted for. This
         passed the validator as all entries were valid, but the link list was
         incorrect and could have caused a crash. The corruption only produced
         incorrect data, but it could have been more severe. To fix this,
         create a bitmask that covers all the sub-buffer indexes and set it to
         all zeros. While iterating the array checking the values of the array
         content, have it set a bit corresponding to the index in the array.
         If the bit was already set, then it is a duplicate and mark the
         buffer as invalid and reset it.
      
       - Prevent mmap()ing persistent ring buffer
      
         The persistent ring buffer uses vmap() to map the persistent memory.
         Currently, the mmap() logic only uses virt_to_page() to get the page
         from the ring buffer memory and use that to map to user space. This
         works because a normal ring buffer uses alloc_page() to allocate its
         memory. But because the persistent ring buffer use vmap() it causes a
         kernel crash.
      
         Fixing this to work with vmap() is not hard, but since mmap() on
         persistent memory buffers never worked, just have the mmap() return
         -ENODEV (what was returned before mmap() for persistent memory ring
         buffers, as they never supported mmap. Normal buffers will still
         allow mmap(). Implementing mmap() for persistent memory ring buffers
         can wait till the next merge window.
      
       - Fix polling on persistent ring buffers
      
         There's a "buffer_percent" option (default set to 50), that is used
         to have reads of the ring buffer binary data block until the buffer
         fills to that percentage. The field "pages_touched" is incremented
         every time a new sub-buffer has content added to it. This field is
         used in the calculations to determine the amount of content is in the
         buffer and if it exceeds the "buffer_percent" then it will wake the
         task polling on the buffer.
      
         As persistent ring buffers can be created by the content from a
         previous boot, the "pages_touched" field was not updated. This means
         that if a task were to poll on the persistent buffer, it would block
         even if the buffer was completely full. It would block even if the
         "buffer_percent" was zero, because with "pages_touched" as zero, it
         would be calculated as the buffer having no content. Update
         pages_touched when initializing the persistent ring buffer from a
         previous boot.
      
      * tag 'trace-ring-buffer-v6.14-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace:
        ring-buffer: Update pages_touched to reflect persistent buffer content
        tracing: Do not allow mmap() of persistent ring buffer
        ring-buffer: Validate the persistent meta data subbuf array
        tracing: Have the error of __tracing_resize_ring_buffer() passed to user
        ring-buffer: Unlock resize on mmap error
      5784d8c9
  3. Feb 15, 2025
    • Steven Rostedt's avatar
      ring-buffer: Update pages_touched to reflect persistent buffer content · 97937834
      Steven Rostedt authored
      The pages_touched field represents the number of subbuffers in the ring
      buffer that have content that can be read. This is used in accounting of
      "dirty_pages" and "buffer_percent" to allow the user to wait for the
      buffer to be filled to a certain amount before it reads the buffer in
      blocking mode.
      
      The persistent buffer never updated this value so it was set to zero, and
      this accounting would take it as it had no content. This would cause user
      space to wait for content even though there's enough content in the ring
      buffer that satisfies the buffer_percent.
      
      Cc: stable@vger.kernel.org
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
      Cc: Vincent Donnefort <vdonnefort@google.com>
      Link: https://lore.kernel.org/20250214123512.0631436e@gandalf.local.home
      
      
      Fixes: 5f3b6e83 ("ring-buffer: Validate boot range memory events")
      Signed-off-by: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
      97937834
    • Steven Rostedt's avatar
      tracing: Do not allow mmap() of persistent ring buffer · 129fe718
      Steven Rostedt authored
      When trying to mmap a trace instance buffer that is attached to
      reserve_mem, it would crash:
      
       BUG: unable to handle page fault for address: ffffe97bd00025c8
       #PF: supervisor read access in kernel mode
       #PF: error_code(0x0000) - not-present page
       PGD 2862f3067 P4D 2862f3067 PUD 0
       Oops: Oops: 0000 [#1] PREEMPT_RT SMP PTI
       CPU: 4 UID: 0 PID: 981 Comm: mmap-rb Not tainted 6.14.0-rc2-test-00003-g7f1a5e3fbf9e-dirty #233
       Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
       RIP: 0010:validate_page_before_insert+0x5/0xb0
       Code: e2 01 89 d0 c3 cc cc cc cc 66 66 2e 0f 1f 84 00 00 00 00 00 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 0f 1f 44 00 00 <48> 8b 46 08 a8 01 75 67 66 90 48 89 f0 8b 50 34 85 d2 74 76 48 89
       RSP: 0018:ffffb148c2f3f968 EFLAGS: 00010246
       RAX: ffff9fa5d3322000 RBX: ffff9fa5ccff9c08 RCX: 00000000b879ed29
       RDX: ffffe97bd00025c0 RSI: ffffe97bd00025c0 RDI: ffff9fa5ccff9c08
       RBP: ffffb148c2f3f9f0 R08: 0000000000000004 R09: 0000000000000004
       R10: 0000000000000000 R11: 0000000000000200 R12: 0000000000000000
       R13: 00007f16a18d5000 R14: ffff9fa5c48db6a8 R15: 0000000000000000
       FS:  00007f16a1b54740(0000) GS:ffff9fa73df00000(0000) knlGS:0000000000000000
       CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
       CR2: ffffe97bd00025c8 CR3: 00000001048c6006 CR4: 0000000000172ef0
       Call Trace:
        <TASK>
        ? __die_body.cold+0x19/0x1f
        ? __die+0x2e/0x40
        ? page_fault_oops+0x157/0x2b0
        ? search_module_extables+0x53/0x80
        ? validate_page_before_insert+0x5/0xb0
        ? kernelmode_fixup_or_oops.isra.0+0x5f/0x70
        ? __bad_area_nosemaphore+0x16e/0x1b0
        ? bad_area_nosemaphore+0x16/0x20
        ? do_kern_addr_fault+0x77/0x90
        ? exc_page_fault+0x22b/0x230
        ? asm_exc_page_fault+0x2b/0x30
        ? validate_page_before_insert+0x5/0xb0
        ? vm_insert_pages+0x151/0x400
        __rb_map_vma+0x21f/0x3f0
        ring_buffer_map+0x21b/0x2f0
        tracing_buffers_mmap+0x70/0xd0
        __mmap_region+0x6f0/0xbd0
        mmap_region+0x7f/0x130
        do_mmap+0x475/0x610
        vm_mmap_pgoff+0xf2/0x1d0
        ksys_mmap_pgoff+0x166/0x200
        __x64_sys_mmap+0x37/0x50
        x64_sys_call+0x1670/0x1d70
        do_syscall_64+0xbb/0x1d0
        entry_SYSCALL_64_after_hwframe+0x77/0x7f
      
      The reason was that the code that maps the ring buffer pages to user space
      has:
      
      	page = virt_to_page((void *)cpu_buffer->subbuf_ids[s]);
      
      And uses that in:
      
      	vm_insert_pages(vma, vma->vm_start, pages, &nr_pages);
      
      But virt_to_page() does not work with vmap()'d memory which is what the
      persistent ring buffer has. It is rather trivial to allow this, but for
      now just disable mmap() of instances that have their ring buffer from the
      reserve_mem option.
      
      If an mmap() is performed on a persistent buffer it will return -ENODEV
      just like it would if the .mmap field wasn't defined in the
      file_operations structure.
      
      Cc: stable@vger.kernel.org
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
      Cc: Vincent Donnefort <vdonnefort@google.com>
      Link: https://lore.kernel.org/20250214115547.0d7287d3@gandalf.local.home
      
      
      Fixes: 9b7bdf6f ("tracing: Have trace_printk not use binary prints if boot buffer")
      Signed-off-by: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
      129fe718
    • Linus Torvalds's avatar
      Merge tag 'i2c-for-6.14-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux · 49665900
      Linus Torvalds authored
      Pull i2c fixes from Wolfram Sang:
       "MAINTAINERS maintenance.
      
        Changed email, added entry, deleted entry falling back to a generic
        one"
      
      * tag 'i2c-for-6.14-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux:
        MAINTAINERS: Add maintainer for Qualcomm's I2C GENI driver
        MAINTAINERS: delete entry for AXXIA I2C
        MAINTAINERS: Use my kernel.org address for I2C ACPI work
      49665900
    • Linus Torvalds's avatar
      Merge tag 's390-6.14-4' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux · f3d8b0eb
      Linus Torvalds authored
      Pull s390 fixes from Vasily Gorbik:
      
       - Fix isolated VFs handling by verifying that a VF’s parent PF is
         locally owned before registering it in an existing PCI domain
      
       - Disable arch_test_bit() optimization for PROFILE_ALL_BRANCHES to
         workaround gcc failure in handling __builtin_constant_p() in this
         case
      
       - Fix CHPID "configure" attribute caching in CIO by not updating the
         cache when SCLP returns no data, ensuring consistent sysfs output
      
       - Remove CONFIG_LSM from default configs and rely on defaults, which
         enables BPF LSM hook
      
      * tag 's390-6.14-4' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux:
        s390/pci: Fix handling of isolated VFs
        s390/pci: Pull search for parent PF out of zpci_iov_setup_virtfn()
        s390/bitops: Disable arch_test_bit() optimization for PROFILE_ALL_BRANCHES
        s390/cio: Fix CHPID "configure" attribute caching
        s390/configs: Remove CONFIG_LSM
      f3d8b0eb
    • Linus Torvalds's avatar
      Merge tag 'rust-fixes-6.14-2' of git://git.kernel.org/pub/scm/linux/kernel/git/ojeda/linux · 24389907
      Linus Torvalds authored
      Pull rust fixes from Miguel Ojeda:
      
       - Fix objtool warning due to future Rust 1.85.0 (to be released in a
         few days)
      
       - Clean future Rust 1.86.0 (to be released 2025-04-03) Clippy warning
      
      * tag 'rust-fixes-6.14-2' of git://git.kernel.org/pub/scm/linux/kernel/git/ojeda/linux:
        rust: rbtree: fix overindented list item
        objtool/rust: add one more `noreturn` Rust function
      24389907
    • Linus Torvalds's avatar
      tegra210-adma: fix 32-bit x86 build · d4401484
      Linus Torvalds authored
      
      The Tegra210 Audio DMA controller driver did a plain divide:
      
      	page_no = (res_page->start - res_base->start) / cdata->ch_base_offset;
      
      which causes problems on 32-bit x86 configurations that have 64-bit
      resource sizes:
      
        x86_64-linux-ld: drivers/dma/tegra210-adma.o: in function `tegra_adma_probe':
        tegra210-adma.c:(.text+0x1322): undefined reference to `__udivdi3'
      
      because gcc doesn't generate the trivial code for a 64-by-32 divide,
      turning it into a function call to do a full 64-by-64 divide.  And the
      kernel intentionally doesn't provide that helper function, because 99%
      of the time all you want is the narrower version.
      
      Of course, tegra210 is a 64-bit architecture and the 32-bit x86 build is
      purely for build testing, so this really is just about build coverage
      failure.
      
      But build coverage is good.
      
      Side note: div_u64() would be suboptimal if you actually have a 32-bit
      resource_t, so our "helper" for divides are admittedly making it harder
      than it should be to generate good code for all the possible cases.
      
      At some point, I'll consider 32-bit x86 so entirely legacy that I can't
      find it in myself to care any more, and we'll just add the __udivdi3
      library function.
      
      But for now, the right thing to do is to use "div_u64()" to show that
      you know that you are doing the simpler divide with a 32-bit number.
      And the build error enforces that.
      
      While fixing the build issue, also check for division-by-zero, and for
      overflow.  Which hopefully cannot happen on real production hardware,
      but the value of 'ch_base_offset' can definitely be zero in other
      places.
      
      Reported-by: default avatarGuenter Roeck <linux@roeck-us.net>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      d4401484
    • Linus Torvalds's avatar
      Merge tag 'gpio-fixes-for-v6.14-rc3-take2' of... · 6452feaf
      Linus Torvalds authored
      Merge tag 'gpio-fixes-for-v6.14-rc3-take2' of git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux
      
      Pull gpio fixes from Bartosz Golaszewski:
      
       - fix interrupt handling issues in gpio-bcm-kona
      
       - add an ACPI quirk for Acer Nitro ANV14 fixing an issue with spurious
         wake up events
      
       - add missing return value checks to gpio-stmpe
      
       - fix a crash in error path in gpiochip_get_ngpios()
      
      * tag 'gpio-fixes-for-v6.14-rc3-take2' of git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux:
        gpiolib: Fix crash on error in gpiochip_get_ngpios()
        gpio: stmpe: Check return value of stmpe_reg_read in stmpe_gpio_irq_sync_unlock
        gpiolib: acpi: Add a quirk for Acer Nitro ANV14
        gpio: bcm-kona: Add missing newline to dev_err format string
        gpio: bcm-kona: Make sure GPIO bits are unlocked when requesting IRQ
        gpio: bcm-kona: Fix GPIO lock/unlock for banks above bank 0
      6452feaf
    • Linus Torvalds's avatar
      Merge tag 'alpha-fixes-v6.14-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/mattst88/alpha · 7ff71e6d
      Linus Torvalds authored
      Pull alpha fixes from Matt Turner:
       "A few changes for alpha, including some important fixes for kernel
        stack alignment"
      
      * tag 'alpha-fixes-v6.14-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/mattst88/alpha:
        alpha: Use str_yes_no() helper in pci_dac_dma_supported()
        alpha: Replace one-element array with flexible array member
        alpha: align stack for page fault and user unaligned trap handlers
        alpha: make stack 16-byte aligned (most cases)
        alpha: replace hardcoded stack offsets with autogenerated ones
      7ff71e6d
    • Linus Torvalds's avatar
      Merge tag 'pci-v6.14-fixes-3' of git://git.kernel.org/pub/scm/linux/kernel/git/pci/pci · 78a632a2
      Linus Torvalds authored
      Pull pci fixes from Bjorn Helgaas:
      
       - Update a BUILD_BUG_ON() usage that works on current compilers, but
         breaks compilation on gcc 5.3.1 (Alex Williamson)
      
       - Avoid use of FLR for Mediatek MT7922 WiFi; the device previously
         worked after a long timeout and fallback to SBR, but after a recent
         RRS change it doesn't work at all after FLR (Bjorn Helgaas)
      
      * tag 'pci-v6.14-fixes-3' of git://git.kernel.org/pub/scm/linux/kernel/git/pci/pci:
        PCI: Avoid FLR for Mediatek MT7922 WiFi
        PCI: Fix BUILD_BUG_ON usage for old gcc
      78a632a2
    • Paolo Bonzini's avatar
      Merge tag 'kvm-x86-fixes-6.14-rcN' of https://github.com/kvm-x86/linux into HEAD · d3d0b8df
      Paolo Bonzini authored
      KVM fixes for 6.14 part 1
      
       - Reject Hyper-V SEND_IPI hypercalls if the local APIC isn't being emulated
         by KVM to fix a NULL pointer dereference.
      
       - Enter guest mode (L2) from KVM's perspective before initializing the vCPU's
         nested NPT MMU so that the MMU is properly tagged for L2, not L1.
      
       - Load the guest's DR6 outside of the innermost .vcpu_run() loop, as the
         guest's value may be stale if a VM-Exit is handled in the fastpath.
      d3d0b8df
  4. Feb 14, 2025
    • Ashish Kalra's avatar
      x86/sev: Fix broken SNP support with KVM module built-in · 409f4538
      Ashish Kalra authored
      Fix issues with enabling SNP host support and effectively SNP support
      which is broken with respect to the KVM module being built-in.
      
      SNP host support is enabled in snp_rmptable_init() which is invoked as
      device_initcall(). SNP check on IOMMU is done during IOMMU PCI init
      (IOMMU_PCI_INIT stage). And for that reason snp_rmptable_init() is
      currently invoked via device_initcall() and cannot be invoked via
      subsys_initcall() as core IOMMU subsystem gets initialized via
      subsys_initcall().
      
      Now, if kvm_amd module is built-in, it gets initialized before SNP host
      support is enabled in snp_rmptable_init() :
      
      [   10.131811] kvm_amd: TSC scaling supported
      [   10.136384] kvm_amd: Nested Virtualization enabled
      [   10.141734] kvm_amd: Nested Paging enabled
      [   10.146304] kvm_amd: LBR virtualization supported
      [   10.151557] kvm_amd: SEV enabled (ASIDs 100 - 509)
      [   10.156905] kvm_amd: SEV-ES enabled (ASIDs 1 - 99)
      [   10.162256] kvm_amd: SEV-SNP enabled (ASIDs 1 - 99)
      [   10.171508] kvm_amd: Virtual VMLOAD VMSAVE supported
      [   10.177052] kvm_amd: Virtual GIF supported
      ...
      ...
      [   10.201648] kvm_amd: in svm_enable_virtualization_cpu
      
      And then svm_x86_ops->enable_virtualization_cpu()
      (svm_enable_virtualization_cpu) programs MSR_VM_HSAVE_PA as following:
      wrmsrl(MSR_VM_HSAVE_PA, sd->save_area_pa);
      
      So VM_HSAVE_PA is non-zero before SNP support is enabled on all CPUs.
      
      snp_rmptable_init() gets invoked after svm_enable_virtualization_cpu()
      as following :
      ...
      [   11.256138] kvm_amd: in svm_enable_virtualization_cpu
      ...
      [   11.264918] SEV-SNP: in snp_rmptable_init
      
      This triggers a #GP exception in snp_rmptable_init() when snp_enable()
      is invoked to set SNP_EN in SYSCFG MSR:
      
      [   11.294289] unchecked MSR access error: WRMSR to 0xc0010010 (tried to write 0x0000000003fc0000) at rIP: 0xffffffffaf5d5c28 (native_write_msr+0x8/0x30)
      ...
      [   11.294404] Call Trace:
      [   11.294482]  <IRQ>
      [   11.294513]  ? show_stack_regs+0x26/0x30
      [   11.294522]  ? ex_handler_msr+0x10f/0x180
      [   11.294529]  ? search_extable+0x2b/0x40
      [   11.294538]  ? fixup_exception+0x2dd/0x340
      [   11.294542]  ? exc_general_protection+0x14f/0x440
      [   11.294550]  ? asm_exc_general_protection+0x2b/0x30
      [   11.294557]  ? __pfx_snp_enable+0x10/0x10
      [   11.294567]  ? native_write_msr+0x8/0x30
      [   11.294570]  ? __snp_enable+0x5d/0x70
      [   11.294575]  snp_enable+0x19/0x20
      [   11.294578]  __flush_smp_call_function_queue+0x9c/0x3a0
      [   11.294586]  generic_smp_call_function_single_interrupt+0x17/0x20
      [   11.294589]  __sysvec_call_function+0x20/0x90
      [   11.294596]  sysvec_call_function+0x80/0xb0
      [   11.294601]  </IRQ>
      [   11.294603]  <TASK>
      [   11.294605]  asm_sysvec_call_function+0x1f/0x30
      ...
      [   11.294631]  arch_cpu_idle+0xd/0x20
      [   11.294633]  default_idle_call+0x34/0xd0
      [   11.294636]  do_idle+0x1f1/0x230
      [   11.294643]  ? complete+0x71/0x80
      [   11.294649]  cpu_startup_entry+0x30/0x40
      [   11.294652]  start_secondary+0x12d/0x160
      [   11.294655]  common_startup_64+0x13e/0x141
      [   11.294662]  </TASK>
      
      This #GP exception is getting triggered due to the following errata for
      AMD family 19h Models 10h-1Fh Processors:
      
      Processor may generate spurious #GP(0) Exception on WRMSR instruction:
      Description:
      The Processor will generate a spurious #GP(0) Exception on a WRMSR
      instruction if the following conditions are all met:
      - the target of the WRMSR is a SYSCFG register.
      - the write changes the value of SYSCFG.SNPEn from 0 to 1.
      - One of the threads that share the physical core has a non-zero
      value in the VM_HSAVE_PA MSR.
      
      The document being referred to above:
      https://www.amd.com/content/dam/amd/en/documents/processor-tech-docs/revision-guides/57095-PUB_1_01.pdf
      
      
      
      To summarize, with kvm_amd module being built-in, KVM/SVM initialization
      happens before host SNP is enabled and this SVM initialization
      sets VM_HSAVE_PA to non-zero, which then triggers a #GP when
      SYSCFG.SNPEn is being set and this will subsequently cause
      SNP_INIT(_EX) to fail with INVALID_CONFIG error as SYSCFG[SnpEn] is not
      set on all CPUs.
      
      Essentially SNP host enabling code should be invoked before KVM
      initialization, which is currently not the case when KVM is built-in.
      
      Add fix to call snp_rmptable_init() early from iommu_snp_enable()
      directly and not invoked via device_initcall() which enables SNP host
      support before KVM initialization with kvm_amd module built-in.
      
      Add additional handling for `iommu=off` or `amd_iommu=off` options.
      
      Note that IOMMUs need to be enabled for SNP initialization, therefore,
      if host SNP support is enabled but late IOMMU initialization fails
      then that will cause PSP driver's SNP_INIT to fail as IOMMU SNP sanity
      checks in SNP firmware will fail with invalid configuration error as
      below:
      
      [    9.723114] ccp 0000:23:00.1: sev enabled
      [    9.727602] ccp 0000:23:00.1: psp enabled
      [    9.732527] ccp 0000:a2:00.1: enabling device (0000 -> 0002)
      [    9.739098] ccp 0000:a2:00.1: no command queues available
      [    9.745167] ccp 0000:a2:00.1: psp enabled
      [    9.805337] ccp 0000:23:00.1: SEV-SNP: failed to INIT rc -5, error 0x3
      [    9.866426] ccp 0000:23:00.1: SEV API:1.53 build:5
      
      Fixes: c3b86e61 ("x86/cpufeatures: Enable/unmask SEV-SNP CPU feature")
      Co-developed-by: default avatarSean Christopherson <seanjc@google.com>
      Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
      Co-developed-by: default avatarVasant Hegde <vasant.hegde@amd.com>
      Signed-off-by: default avatarVasant Hegde <vasant.hegde@amd.com>
      Cc: <Stable@vger.kernel.org>
      Signed-off-by: default avatarAshish Kalra <ashish.kalra@amd.com>
      Acked-by: default avatarJoerg Roedel <jroedel@suse.de>
      Message-ID: <138b520fb83964782303b43ade4369cd181fdd9c.1739226950.git.ashish.kalra@amd.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      409f4538
    • Sean Christopherson's avatar
      KVM: SVM: Ensure PSP module is initialized if KVM module is built-in · 44e70718
      Sean Christopherson authored
      
      The kernel's initcall infrastructure lacks the ability to express
      dependencies between initcalls, whereas the modules infrastructure
      automatically handles dependencies via symbol loading.  Ensure the
      PSP SEV driver is initialized before proceeding in sev_hardware_setup()
      if KVM is built-in as the dependency isn't handled by the initcall
      infrastructure.
      
      Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
      Reviewed-by: default avatarTom Lendacky <thomas.lendacky@amd.com>
      Signed-off-by: default avatarAshish Kalra <ashish.kalra@amd.com>
      Message-ID: <f78ddb64087df27e7bcb1ae0ab53f55aa0804fab.1739226950.git.ashish.kalra@amd.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      44e70718
    • Sean Christopherson's avatar
      crypto: ccp: Add external API interface for PSP module initialization · 435b344a
      Sean Christopherson authored
      
      KVM is dependent on the PSP SEV driver and PSP SEV driver needs to be
      loaded before KVM module. In case of module loading any dependent
      modules are automatically loaded but in case of built-in modules there
      is no inherent mechanism available to specify dependencies between
      modules and ensure that any dependent modules are loaded implicitly.
      
      Add a new external API interface for PSP module initialization which
      allows PSP SEV driver to be loaded explicitly if KVM is built-in.
      
      Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
      Co-developed-by: default avatarAshish Kalra <ashish.kalra@amd.com>
      Signed-off-by: default avatarAshish Kalra <ashish.kalra@amd.com>
      Reviewed-by: default avatarTom Lendacky <thomas.lendacky@amd.com>
      Message-ID: <15279ca0cad56a07cf12834ec544310f85ff5edc.1739226950.git.ashish.kalra@amd.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      435b344a
    • Paolo Bonzini's avatar
      Merge tag 'kvmarm-fixes-6.14-2' of... · 3bb7dceb
      Paolo Bonzini authored
      Merge tag 'kvmarm-fixes-6.14-2' of git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm into HEAD
      
      KVM/arm64 fixes for 6.14, take #2
      
      - Large set of fixes for vector handling, specially in the interactions
        between host and guest state. This fixes a number of bugs affecting
        actual deployments, and greatly simplifies the FP/SIMD/SVE handling.
        Thanks to Mark Rutland for dealing with this thankless task.
      
      - Fix an ugly race between vcpu and vgic creation/init, resulting in
        unexpected behaviours.
      
      - Fix use of kernel VAs at EL2 when emulating timers with nVHE.
      
      - Small set of pKVM improvements and cleanups.
      3bb7dceb
    • Linus Torvalds's avatar
      Merge tag 'thermal-6.14-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm · 3f2ca7b8
      Linus Torvalds authored
      Pull thermal control fixes from Rafael Wysocki:
       "Fix a regression caused by an inadvertent change of the
        THERMAL_GENL_ATTR_CPU_CAPABILITY value in one of the recent thermal
        commits (Zhang Rui) and drop a stale piece of documentation (Daniel
        Lezcano)"
      
      * tag 'thermal-6.14-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
        thermal/cpufreq_cooling: Remove structure member documentation
        thermal/netlink: Prevent userspace segmentation fault by adjusting UAPI header
      3f2ca7b8
    • Linus Torvalds's avatar
      Merge tag 'mmc-v6.14-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc · f92a80bd
      Linus Torvalds authored
      Pull MMC host fixes from Ulf Hansson:
      
       - mtk-sd: Fix register settings for hs400(es) mode
      
       - sdhci_am654: Revert patch for start-signal-voltage-switch
      
      * tag 'mmc-v6.14-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc:
        mmc: mtk-sd: Fix register settings for hs400(es) mode
        Revert "mmc: sdhci_am654: Add sdhci_am654_start_signal_voltage_switch"
      f92a80bd
    • Linus Torvalds's avatar
      Merge tag 'v6.14-rc2-smb3-client-fixes' of git://git.samba.org/sfrench/cifs-2.6 · cabb162e
      Linus Torvalds authored
      Pull smb client fix from Steve French:
       "SMB3 client multichannel fix"
      
      * tag 'v6.14-rc2-smb3-client-fixes' of git://git.samba.org/sfrench/cifs-2.6:
        cifs: pick channels for individual subrequests
      cabb162e
    • Linus Torvalds's avatar
      Merge tag 'efi-fixes-for-v6.14-1' of git://git.kernel.org/pub/scm/linux/kernel/git/efi/efi · c7ab7b2a
      Linus Torvalds authored
      Pull EFI fixes from Ard Biesheuvel:
       "Take the newly introduced EFI_MEMORY_HOT_PLUGGABLE memory attribute
        into account when placing the kernel image in memory at boot.
      
        Otherwise, the presence of the kernel image could prevent such a
        memory region from being unplugged at runtime if it was 'cold
        plugged', i.e., already plugged in at boot time (and exposed via the
        EFI memory map).
      
        This should ensure that the new EFI_MEMORY_HOT_PLUGGABLE memory
        attribute is used consistently by Linux before it ever turns up in
        production, ensuring that we can make meaningful use of it without
        running the risk of regressing existing users"
      
      * tag 'efi-fixes-for-v6.14-1' of git://git.kernel.org/pub/scm/linux/kernel/git/efi/efi:
        efi: Use BIT_ULL() constants for memory attributes
        efi: Avoid cold plugged memory for placing the kernel
      c7ab7b2a
    • Linus Torvalds's avatar
      Merge tag 'block-6.14-20250214' of git://git.kernel.dk/linux · 1b8c8cda
      Linus Torvalds authored
      Pull block fixes from Jens Axboe:
      
       - Fix for request rejection for batch addition
      
       - Fix a few issues for bogus mac partition tables
      
      * tag 'block-6.14-20250214' of git://git.kernel.dk/linux:
        partitions: mac: fix handling of bogus partition table
        block: cleanup and fix batch completion adding conditions
      1b8c8cda
    • Linus Torvalds's avatar
      Merge tag 'io_uring-6.14-20250214' of git://git.kernel.dk/linux · ea717324
      Linus Torvalds authored
      Pull io_uring fixes from Jens Axboe:
      
       - fixes for a potential data corruption issue with IORING_OP_URING_CMD,
         where not all the SQE data is stable. Will be revisited in the
         future, for now it ends up with just always copying it beyond prep to
         provide the same guarantees as all other opcodes
      
       - make the waitid opcode setup async data like any other opcodes (no
         real fix here, just a consistency thing)
      
       - fix for waitid io_tw_state abuse
      
       - when a buffer group is type is changed, do so by allocating a new
         buffer group entry and discard the old one, rather than migrating
      
      * tag 'io_uring-6.14-20250214' of git://git.kernel.dk/linux:
        io_uring/uring_cmd: unconditionally copy SQEs at prep time
        io_uring/waitid: setup async data in the prep handler
        io_uring/uring_cmd: remove dead req_has_async_data() check
        io_uring/uring_cmd: switch sqe to async_data on EAGAIN
        io_uring/uring_cmd: don't assume io_uring_cmd_data layout
        io_uring/kbuf: reallocate buf lists on upgrade
        io_uring/waitid: don't abuse io_tw_state
      ea717324
    • Linus Torvalds's avatar
      Merge tag 'sched_ext-for-6.14-rc2-fixes' of... · 04f41cbf
      Linus Torvalds authored
      Merge tag 'sched_ext-for-6.14-rc2-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/sched_ext
      
      Pull sched_ext fixes from Tejun Heo:
      
       - Fix lock imbalance in a corner case of dispatch_to_local_dsq()
      
       - Migration disabled tasks were confusing some BPF schedulers and its
         handling had a bug. Fix it and simplify the default behavior by
         dispatching them automatically
      
       - ops.tick(), ops.disable() and ops.exit_task() were incorrectly
         disallowing kfuncs that require the task argument to be the rq
         operation is currently operating on and thus is rq-locked.
         Allow them.
      
       - Fix autogroup migration handling bug which was occasionally
         triggering a warning in the cgroup migration path
      
       - tools/sched_ext, selftest and other misc updates
      
      * tag 'sched_ext-for-6.14-rc2-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/sched_ext:
        sched_ext: Use SCX_CALL_OP_TASK in task_tick_scx
        sched_ext: Fix the incorrect bpf_list kfunc API in common.bpf.h.
        sched_ext: selftests: Fix grammar in tests description
        sched_ext: Fix incorrect assumption about migration disabled tasks in task_can_run_on_remote_rq()
        sched_ext: Fix migration disabled handling in targeted dispatches
        sched_ext: Implement auto local dispatching of migration disabled tasks
        sched_ext: Fix incorrect time delta calculation in time_delta()
        sched_ext: Fix lock imbalance in dispatch_to_local_dsq()
        sched_ext: selftests/dsp_local_on: Fix selftest on UP systems
        tools/sched_ext: Add helper to check task migration state
        sched_ext: Fix incorrect autogroup migration detection
        sched_ext: selftests/dsp_local_on: Fix sporadic failures
        selftests/sched_ext: Fix enum resolution
        sched_ext: Include task weight in the error state dump
        sched_ext: Fixes typos in comments
      04f41cbf
    • Thorsten Blum's avatar
      alpha: Use str_yes_no() helper in pci_dac_dma_supported() · 1523226e
      Thorsten Blum authored and Matt Turner's avatar Matt Turner committed
      
      Remove hard-coded strings by using the str_yes_no() helper function.
      
      Reviewed-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
      Signed-off-by: default avatarThorsten Blum <thorsten.blum@linux.dev>
      Signed-off-by: default avatarMatt Turner <mattst88@gmail.com>
      1523226e
    • Thorsten Blum's avatar
      alpha: Replace one-element array with flexible array member · 757f051a
      Thorsten Blum authored and Matt Turner's avatar Matt Turner committed
      
      Replace the deprecated one-element array with a modern flexible array
      member in the struct crb_struct.
      
      Reviewed-by: default avatarKees Cook <kees@kernel.org>
      Signed-off-by: default avatarThorsten Blum <thorsten.blum@linux.dev>
      Signed-off-by: default avatarMatt Turner <mattst88@gmail.com>
      757f051a
    • Ivan Kokshaysky's avatar
      alpha: align stack for page fault and user unaligned trap handlers · 3b35a171
      Ivan Kokshaysky authored and Matt Turner's avatar Matt Turner committed
      
      do_page_fault() and do_entUna() are special because they use
      non-standard stack frame layout. Fix them manually.
      
      Cc: stable@vger.kernel.org
      Tested-by: default avatarMaciej W. Rozycki <macro@orcam.me.uk>
      Tested-by: default avatarMagnus Lindholm <linmag7@gmail.com>
      Tested-by: default avatarMatt Turner <mattst88@gmail.com>
      Reviewed-by: default avatarMaciej W. Rozycki <macro@orcam.me.uk>
      Suggested-by: default avatarMaciej W. Rozycki <macro@orcam.me.uk>
      Signed-off-by: default avatarIvan Kokshaysky <ink@unseen.parts>
      Signed-off-by: default avatarMatt Turner <mattst88@gmail.com>
      3b35a171
    • Ivan Kokshaysky's avatar
      alpha: make stack 16-byte aligned (most cases) · 0a0f7362
      Ivan Kokshaysky authored and Matt Turner's avatar Matt Turner committed
      The problem is that GCC expects 16-byte alignment of the incoming stack
      since early 2004, as Maciej found out [1]:
        Having actually dug speculatively I can see that the psABI was changed in
       GCC 3.5 with commit e5e10fb4a350 ("re PR target/14539 (128-bit long double
       improperly aligned)") back in Mar 2004, when the stack pointer alignment
       was increased from 8 bytes to 16 bytes, and arch/alpha/kernel/entry.S has
       various suspicious stack pointer adjustments, starting with SP_OFF which
       is not a whole multiple of 16.
      
      Also, as Magnus noted, "ALPHA Calling Standard" [2] required the same:
       D.3.1 Stack Alignment
        This standard requires that stacks be octaword aligned at the time a
        new procedure is invoked.
      
      However:
      - the "normal" kernel stack is always misaligned by 8 bytes, thanks to
        the odd number of 64-bit words in 'struct pt_regs', which is the very
        first thing pushed onto the kernel thread stack;
      - syscall, fault, interrupt etc. handlers may, or may not, receive aligned
        stack depending on numerous factors.
      
      Somehow we got away with it until recently, when we ended up with
      a stack corruption in kernel/smp.c:smp_call_function_single() due to
      its use of 32-byte aligned local data and the compiler doing clever
      things allocating it on the stack.
      
      This adds padding between the PAL-saved and kernel-saved registers
      so that 'struct pt_regs' have an even number of 64-bit words.
      This makes the stack properly aligned for most of the kernel
      code, except two handlers which need special threatment.
      
      Note: struct pt_regs doesn't belong in uapi/asm; this should be fixed,
      but let's put this off until later.
      
      Link: https://lore.kernel.org/rcu/alpine.DEB.2.21.2501130248010.18889@angie.orcam.me.uk/ [1]
      Link: https://bitsavers.org/pdf/dec/alpha/Alpha_Calling_Standard_Rev_2.0_19900427.pdf
      
       [2]
      
      Cc: stable@vger.kernel.org
      Tested-by: default avatarMaciej W. Rozycki <macro@orcam.me.uk>
      Tested-by: default avatarMagnus Lindholm <linmag7@gmail.com>
      Tested-by: default avatarMatt Turner <mattst88@gmail.com>
      Reviewed-by: default avatarMaciej W. Rozycki <macro@orcam.me.uk>
      Signed-off-by: default avatarIvan Kokshaysky <ink@unseen.parts>
      Signed-off-by: default avatarMatt Turner <mattst88@gmail.com>
      0a0f7362
    • Ivan Kokshaysky's avatar
      alpha: replace hardcoded stack offsets with autogenerated ones · 77b823fa
      Ivan Kokshaysky authored and Matt Turner's avatar Matt Turner committed
      
      This allows the assembly in entry.S to automatically keep in sync with
      changes in the stack layout (struct pt_regs and struct switch_stack).
      
      Cc: stable@vger.kernel.org
      Tested-by: default avatarMaciej W. Rozycki <macro@orcam.me.uk>
      Tested-by: default avatarMatt Turner <mattst88@gmail.com>
      Reviewed-by: default avatarMaciej W. Rozycki <macro@orcam.me.uk>
      Signed-off-by: default avatarIvan Kokshaysky <ink@unseen.parts>
      Signed-off-by: default avatarMatt Turner <mattst88@gmail.com>
      77b823fa
Loading