1. 29 Apr, 2024 4 commits
    • Sourabh Jain's avatar
      powerpc/fadump: add hotplug_ready sysfs interface · bc446c5a
      Sourabh Jain authored
      The elfcorehdr describes the CPUs and memory of the crashed kernel to
      the kernel that captures the dump, known as the second or fadump kernel.
      The elfcorehdr needs to be updated if the system's memory changes due to
      memory hotplug or online/offline events.
      
      Currently, memory hotplug events are monitored in userspace by udev
      rules, and fadump is re-registered, which recreates the elfcorehdr with
      the latest available memory in the system.
      
      However, the previous patch ("powerpc: make fadump resilient with memory
      add/remove events") moved the creation of elfcorehdr to the second or
      fadump kernel. This eliminates the need to regenerate the elfcorehdr
      during memory hotplug or online/offline events.
      
      Create a sysfs entry at /sys/kernel/fadump/hotplug_ready to let
      userspace know that fadump re-registration is not required for memory
      add/remove events.
      Signed-off-by: default avatarSourabh Jain <sourabhjain@linux.ibm.com>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://msgid.link/20240422195932.1583833-3-sourabhjain@linux.ibm.com
      bc446c5a
    • Sourabh Jain's avatar
      powerpc: make fadump resilient with memory add/remove events · c6c5b14d
      Sourabh Jain authored
      Due to changes in memory resources caused by either memory hotplug or
      online/offline events, the elfcorehdr, which describes the CPUs and
      memory of the crashed kernel to the kernel that collects the dump (known
      as second/fadump kernel), becomes outdated. Consequently, attempting
      dump collection with an outdated elfcorehdr can lead to failed or
      inaccurate dump collection.
      
      Memory hotplug or online/offline events is referred as memory add/remove
      events in reset of the commit message.
      
      The current solution to address the aforementioned issue is as follows:
      Monitor memory add/remove events in userspace using udev rules, and
      re-register fadump whenever there are changes in memory resources. This
      leads to the creation of a new elfcorehdr with updated system memory
      information.
      
      There are several notable issues associated with re-registering fadump
      for every memory add/remove events.
      
      1. Bulk memory add/remove events with udev-based fadump re-registration
         can lead to race conditions and, more importantly, it creates a wide
         window during which fadump is inactive until all memory add/remove
         events are settled.
      2. Re-registering fadump for every memory add/remove event is
         inefficient.
      3. The memory for elfcorehdr is allocated based on the memblock regions
         available during early boot and remains fixed thereafter. However, if
         elfcorehdr is later recreated with additional memblock regions, its
         size will increase, potentially leading to memory corruption.
      
      Address the aforementioned challenges by shifting the creation of
      elfcorehdr from the first kernel (also referred as the crashed kernel),
      where it was created and frequently recreated for every memory
      add/remove event, to the fadump kernel. As a result, the elfcorehdr only
      needs to be created once, thus eliminating the necessity to re-register
      fadump during memory add/remove events.
      
      At present, the first kernel prepares fadump header and stores it in the
      fadump reserved area. The fadump header includes the start address of
      the elfcorehdr, crashing CPU details, and other relevant information. In
      the event of a crash in the first kernel, the second/fadump boots and
      accesses the fadump header prepared by the first kernel. It then
      performs the following steps in a platform-specific function
      [rtas|opal]_fadump_process:
      
      1. Sanity check for fadump header
      2. Update CPU notes in elfcorehdr
      
      Along with the above, update the setup_fadump()/fadump.c to create
      elfcorehdr and set its address to the global variable elfcorehdr_addr
      for the vmcore module to process it in the second/fadump kernel.
      
      Section below outlines the information required to create the elfcorehdr
      and the changes made to make it available to the fadump kernel if it's
      not already.
      
      To create elfcorehdr, the following crashed kernel information is
      required: CPU notes, vmcoreinfo, and memory ranges.
      
      At present, the CPU notes are already prepared in the fadump kernel, so
      no changes are needed in that regard. The fadump kernel has access to
      all crashed kernel memory regions, including boot memory regions that
      are relocated by firmware to fadump reserved areas, so no changes for
      that either. However, it is necessary to add new members to the fadump
      header, i.e., the 'fadump_crash_info_header' structure, in order to pass
      the crashed kernel's vmcoreinfo address and its size to fadump kernel.
      
      In addition to the vmcoreinfo address and size, there are a few other
      attributes also added to the fadump_crash_info_header structure.
      
      1. version:
         It stores the fadump header version, which is currently set to 1.
         This provides flexibility to update the fadump crash info header in
         the future without changing the magic number. For each change in the
         fadump header, the version will be increased. This will help the
         updated kernel determine how to handle kernel dumps from older
         kernels. The magic number remains relevant for checking fadump header
         corruption.
      
      2. pt_regs_sz/cpu_mask_sz:
         Store size of pt_regs and cpu_mask structure of first kernel. These
         attributes are used to prevent dump processing if the sizes of
         pt_regs or cpu_mask structure differ between the first and fadump
         kernels.
      
      Note: if either first/crashed kernel or second/fadump kernel do not have
      the changes introduced here then kernel fail to collect the dump and
      prints relevant error message on the console.
      Signed-off-by: default avatarSourabh Jain <sourabhjain@linux.ibm.com>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://msgid.link/20240422195932.1583833-2-sourabhjain@linux.ibm.com
      c6c5b14d
    • Shrikanth Hegde's avatar
      powerpc/pseries: Add failure related checks for h_get_mpp and h_get_ppp · 6d434163
      Shrikanth Hegde authored
      Couple of Minor fixes:
      
      - hcall return values are long. Fix that for h_get_mpp, h_get_ppp and
      parse_ppp_data
      
      - If hcall fails, values set should be at-least zero. It shouldn't be
      uninitialized values. Fix that for h_get_mpp and h_get_ppp
      Signed-off-by: default avatarShrikanth Hegde <sshegde@linux.ibm.com>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://msgid.link/20240412092047.455483-3-sshegde@linux.ibm.com
      6d434163
    • Shrikanth Hegde's avatar
      powerpc/pseries: Add pool idle time at LPAR boot · 9c74ecfd
      Shrikanth Hegde authored
      When there are no options specified for lparstat, it is expected to
      give reports since LPAR(Logical Partition) boot.
      
      APP(Available Processor Pool) is an indicator of how many cores in the
      shared pool are free to use in Shared Processor LPAR(SPLPAR). APP is
      derived using pool_idle_time which is obtained using H_PIC call.
      
      The interval based reports show correct APP value while since boot
      report shows very high APP values. This happens because in that case APP
      is obtained by dividing pool idle time by LPAR uptime. Since pool idle
      time is reported by the PowerVM hypervisor since its boot, it need not
      align with LPAR boot.
      
      To fix that export boot pool idle time in lparcfg and powerpc-utils will
      use this info to derive APP as below for since boot reports.
      
      APP = (pool idle time - boot pool idle time) / (uptime * timebase)
      
      Results:: Observe APP values.
      ====================== Shared LPAR ================================
      lparstat
      System Configuration
      type=Shared mode=Uncapped smt=8 lcpu=12 mem=15573440 kB cpus=37 ent=12.00
      
      reboot
      stress-ng --cpu=$(nproc) -t 600
      sleep 600
      So in this case app is expected to close to 37-6=31.
      
      ====== 6.9-rc1 and lparstat 1.3.10  =============
      %user  %sys %wait    %idle    physc %entc lbusy   app  vcsw phint
      ----- ----- -----    -----    ----- ----- ----- ----- ----- -----
      47.48  0.01  0.00    52.51     0.00  0.00 47.49 69099.72 541547    21
      
      === With this patch and powerpc-utils patch to do the above equation ===
      %user  %sys %wait    %idle    physc %entc lbusy   app  vcsw phint
      ----- ----- -----    -----    ----- ----- ----- ----- ----- -----
      47.48  0.01  0.00    52.51     5.73 47.75 47.49 31.21 541753    21
      =====================================================================
      
      Note: physc, purr/idle purr being inaccurate is being handled in a
      separate patch in powerpc-utils tree.
      Signed-off-by: default avatarShrikanth Hegde <sshegde@linux.ibm.com>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://msgid.link/20240412092047.455483-2-sshegde@linux.ibm.com
      9c74ecfd
  2. 19 Apr, 2024 3 commits
  3. 18 Apr, 2024 1 commit
  4. 15 Apr, 2024 2 commits
  5. 08 Apr, 2024 2 commits
  6. 03 Apr, 2024 4 commits
  7. 31 Mar, 2024 12 commits
  8. 30 Mar, 2024 8 commits
    • Mikulas Patocka's avatar
      objtool: Fix compile failure when using the x32 compiler · 6205125b
      Mikulas Patocka authored
      When compiling the v6.9-rc1 kernel with the x32 compiler, the following
      errors are reported. The reason is that we take an "unsigned long"
      variable and print it using "PRIx64" format string.
      
      	In file included from check.c:16:
      	check.c: In function ‘add_dead_ends’:
      	/usr/src/git/linux-2.6/tools/objtool/include/objtool/warn.h:46:17: error: format ‘%llx’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘long unsigned int’ [-Werror=format=]
      	   46 |                 "%s: warning: objtool: " format "\n",   \
      	      |                 ^~~~~~~~~~~~~~~~~~~~~~~~
      	check.c:613:33: note: in expansion of macro ‘WARN’
      	  613 |                                 WARN("can't find unreachable insn at %s+0x%" PRIx64,
      	      |                                 ^~~~
      	...
      Signed-off-by: default avatarMikulas Patocka <mpatocka@redhat.com>
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      Cc: Josh Poimboeuf <jpoimboe@redhat.com>
      Cc: linux-kernel@vger.kernel.org
      6205125b
    • Linus Torvalds's avatar
      Merge tag 'xfs-6.9-fixes-1' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux · 712e1425
      Linus Torvalds authored
      Pull xfs fixes from Chandan Babu:
      
       - Allow stripe unit/width value passed via mount option to be written
         over existing values in the super block
      
       - Do not set current->journal_info to avoid its value from being miused
         by another filesystem context
      
      * tag 'xfs-6.9-fixes-1' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux:
        xfs: don't use current->journal_info
        xfs: allow sunit mount option to repair bad primary sb stripe values
      712e1425
    • Linus Torvalds's avatar
      Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi · fe764a75
      Linus Torvalds authored
      Pull SCSI fixes and updates from James Bottomley:
       "Fully half this pull is updates to lpfc and qla2xxx which got
        committed just as the merge window opened. A sizeable fraction of the
        driver updates are simple bug fixes (and lock reworks for bug fixes in
        the case of lpfc), so rather than splitting the few actual
        enhancements out, we're just adding the drivers to the -rc1 pull.
      
        The enhancements for lpfc are log message removals, copyright updates
        and three patches redefining types. For qla2xxx it's just removing a
        debug message on module removal and the manufacturer detail update.
      
        The two major fixes are the sg teardown race and a core error leg
        problem with the procfs directory not being removed if we destroy a
        created host that never got to the running state. The rest are minor
        fixes and constifications"
      
      * tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: (41 commits)
        scsi: bnx2fc: Remove spin_lock_bh while releasing resources after upload
        scsi: core: Fix unremoved procfs host directory regression
        scsi: mpi3mr: Avoid memcpy field-spanning write WARNING
        scsi: sd: Fix TCG OPAL unlock on system resume
        scsi: sg: Avoid sg device teardown race
        scsi: lpfc: Copyright updates for 14.4.0.1 patches
        scsi: lpfc: Update lpfc version to 14.4.0.1
        scsi: lpfc: Define types in a union for generic void *context3 ptr
        scsi: lpfc: Define lpfc_dmabuf type for ctx_buf ptr
        scsi: lpfc: Define lpfc_nodelist type for ctx_ndlp ptr
        scsi: lpfc: Use a dedicated lock for ras_fwlog state
        scsi: lpfc: Release hbalock before calling lpfc_worker_wake_up()
        scsi: lpfc: Replace hbalock with ndlp lock in lpfc_nvme_unregister_port()
        scsi: lpfc: Update lpfc_ramp_down_queue_handler() logic
        scsi: lpfc: Remove IRQF_ONESHOT flag from threaded IRQ handling
        scsi: lpfc: Move NPIV's transport unregistration to after resource clean up
        scsi: lpfc: Remove unnecessary log message in queuecommand path
        scsi: qla2xxx: Update version to 10.02.09.200-k
        scsi: qla2xxx: Delay I/O Abort on PCI error
        scsi: qla2xxx: Change debug message during driver unload
        ...
      fe764a75
    • Linus Torvalds's avatar
      Merge tag 'i2c-for-6.9-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux · ac672718
      Linus Torvalds authored
      Pull i2c fix from Wolfram Sang:
       "A fix from Andi for I2C host drivers"
      
      * tag 'i2c-for-6.9-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux:
        i2c: i801: Fix a refactoring that broke a touchpad on Lenovo P1
      ac672718
    • Linus Torvalds's avatar
      Merge tag 'usb-6.9-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb · ff789a26
      Linus Torvalds authored
      Pull USB fixes from Greg KH:
       "Here are a bunch of small USB fixes for reported problems and
        regressions for 6.9-rc2. Included in here are:
      
         - deadlock fixes for long-suffering issues
      
         - USB phy driver revert for reported problem
      
         - typec fixes for reported problems
      
         - duplicate id in dwc3 dropped
      
         - dwc2 driver fixes
      
         - udc driver warning fix
      
         - cdc-wdm race bugfix
      
         - other tiny USB bugfixes
      
        All of these have been in linux-next this past week with no reported
        issues"
      
      * tag 'usb-6.9-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb: (26 commits)
        USB: core: Fix deadlock in port "disable" sysfs attribute
        USB: core: Add hub_get() and hub_put() routines
        usb: typec: ucsi: Check capabilities before cable and identity discovery
        usb: typec: ucsi: Clear UCSI_CCI_RESET_COMPLETE before reset
        usb: typec: ucsi_acpi: Refactor and fix DELL quirk
        usb: typec: ucsi: Ack unsupported commands
        usb: typec: ucsi: Check for notifications after init
        usb: typec: ucsi: Clear EVENT_PENDING under PPM lock
        usb: typec: Return size of buffer if pd_set operation succeeds
        usb: udc: remove warning when queue disabled ep
        usb: dwc3: pci: Drop duplicate ID
        usb: dwc3: Properly set system wakeup
        Revert "usb: phy: generic: Get the vbus supply"
        usb: cdc-wdm: close race between read and workqueue
        usb: dwc2: gadget: LPM flow fix
        usb: dwc2: gadget: Fix exiting from clock gating
        usb: dwc2: host: Fix ISOC flow in DDMA mode
        usb: dwc2: host: Fix remote wakeup from hibernation
        usb: dwc2: host: Fix hibernation flow
        USB: core: Fix deadlock in usb_deauthorize_interface()
        ...
      ff789a26
    • Linus Torvalds's avatar
      Merge tag 'staging-6.9-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging · 4e6e4229
      Linus Torvalds authored
      Pull staging driver fixes from Greg KH:
       "Here are two small staging driver fixes for the vc04_services driver
        that resolve reported problems:
      
         - strncpy fix for information leak
      
         - another information leak discovered by the previous strncpy fix
      
        Both of these have been in linux-next all this past week with no
        reported issues"
      
      * tag 'staging-6.9-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging:
        staging: vc04_services: fix information leak in create_component()
        staging: vc04_services: changen strncpy() to strscpy_pad()
      4e6e4229
    • Wolfram Sang's avatar
      Merge tag 'i2c-host-fixes-6.9-rc2' of... · 2953eb02
      Wolfram Sang authored
      Merge tag 'i2c-host-fixes-6.9-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/andi.shyti/linux into i2c/for-current
      
      One fix in the i801 driver where a bug caused touchpad
      malfunctions on some Lenovo P1 models by incorrectly overwriting
      a status variable during successful SMBUS transactions.
      2953eb02
    • Masahiro Yamada's avatar
      x86/build: Use obj-y to descend into arch/x86/virt/ · 3f1a9bc5
      Masahiro Yamada authored
      Commit c33621b4 ("x86/virt/tdx: Wire up basic SEAMCALL functions")
      introduced a new instance of core-y instead of the standardized obj-y
      syntax.
      
      X86 Makefiles descend into subdirectories of arch/x86/virt inconsistently;
      into arch/x86/virt/ via core-y defined in arch/x86/Makefile, but into
      arch/x86/virt/svm/ via obj-y defined in arch/x86/Kbuild.
      
      This is problematic when you build a single object in parallel because
      multiple threads attempt to build the same file.
      
        $ make -j$(nproc) arch/x86/virt/vmx/tdx/seamcall.o
          [ snip ]
          AS      arch/x86/virt/vmx/tdx/seamcall.o
          AS      arch/x86/virt/vmx/tdx/seamcall.o
        fixdep: error opening file: arch/x86/virt/vmx/tdx/.seamcall.o.d: No such file or directory
        make[4]: *** [scripts/Makefile.build:362: arch/x86/virt/vmx/tdx/seamcall.o] Error 2
      
      Use the obj-y syntax, as it works correctly.
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      Link: https://lore.kernel.org/r/20240330060554.18524-1-masahiroy@kernel.org
      3f1a9bc5
  9. 29 Mar, 2024 4 commits
    • Linus Torvalds's avatar
      Merge tag 'drm-fixes-2024-03-30' of https://gitlab.freedesktop.org/drm/kernel · 486291a0
      Linus Torvalds authored
      Pull drm fixes from Dave Airlie:
       "Regular fixes for rc2, quite a few i915/amdgpu as usual, some xe, and
        then mostly scattered around. rc3 might be quieter with the holidays
        but we shall see.
      
        bridge:
         - select DRM_KMS_HELPER
      
        dma-buf:
         - fix NULL-pointer deref
      
        dp:
         - fix div-by-zero in DP MST unplug code
      
        fbdev:
         - select FB_IOMEM_FOPS for SBus
      
        sched:
         - fix NULL-pointer deref
      
        xe:
         - Fix build on mips
         - Fix wrong bound checks
         - Fix use of msec rather than jiffies
         - Remove dead code
      
        amdgpu:
         - SMU 14.0.1 updates
         - DCN 3.5.x updates
         - VPE fix
         - eDP panel flickering fix
         - Suspend fix
         - PSR fix
         - DCN 3.0+ fix
         - VCN 4.0.6 updates
         - debugfs fix
      
        amdkfd:
         - DMA-Buf fix
         - GFX 9.4.2 TLB flush fix
         - CP interrupt fix
      
        i915:
         - Fix for BUG_ON/BUILD_BUG_ON IN I915_memcpy.c
         - Update a MTL workaround
         - Fix locking inversion in hwmon's sysfs
         - Remove a bogus error message around PXP
         - Fix UAF on VMA
         - Reset queue_priority_hint on parking
         - Display Fixes:
         - Remove duplicated audio enable/disable on SDVO and DP
         - Disable AuxCCS for Xe driver
         - Revert init order of MIPI DSI
         - DRRS debugfs fix with an extra refactor patch
         - VRR related fixes
         - Fix a JSL eDP corruption
         - Fix the cursor physical dma address
         - BIOS VBT related fix
      
        nouveau:
         - dmem: handle kcalloc() allocation failures
      
        qxl:
         - remove unused variables
      
        rockchip:
         - vop2: remove support for AR30 and AB30 formats
      
        vmwgfx:
         - debugfs: create ttm_resource_manager entry only if needed"
      
      * tag 'drm-fixes-2024-03-30' of https://gitlab.freedesktop.org/drm/kernel: (55 commits)
        drm/i915/bios: Tolerate devdata==NULL in intel_bios_encoder_supports_dp_dual_mode()
        drm/i915: Pre-populate the cursor physical dma address
        drm/i915/gt: Reset queue_priority_hint on parking
        drm/i915/vma: Fix UAF on destroy against retire race
        drm/i915: Do not print 'pxp init failed with 0' when it succeed
        drm/i915: Do not match JSL in ehl_combo_pll_div_frac_wa_needed()
        drm/i915/hwmon: Fix locking inversion in sysfs getter
        drm/i915/dsb: Fix DSB vblank waits when using VRR
        drm/i915/vrr: Generate VRR "safe window" for DSB
        drm/i915/display/debugfs: Fix duplicate checks in i915_drrs_status
        drm/i915/drrs: Refactor CPU transcoder DRRS check
        drm/i915/mtl: Update workaround 14018575942
        drm/i915/dsi: Go back to the previous INIT_OTP/DISPLAY_ON order, mostly
        drm/i915/display: Disable AuxCCS framebuffers if built for Xe
        drm/i915: Stop doing double audio enable/disable on SDVO and g4x+ DP
        drm/i915: Add includes for BUG_ON/BUILD_BUG_ON in i915_memcpy.c
        drm/qxl: remove unused variable from `qxl_process_single_command()`
        drm/qxl: remove unused `count` variable from `qxl_surface_id_alloc()`
        drm/i915: add bug.h include to i915_memcpy.c
        drm/vmwgfx: Create debugfs ttm_resource_manager entry only if needed
        ...
      486291a0
    • Linus Torvalds's avatar
      Merge tag 'linux_kselftest-fixes-6.9-rc2' of... · 1ab5c8a3
      Linus Torvalds authored
      Merge tag 'linux_kselftest-fixes-6.9-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest
      
      Pull kselftest fixes from Shuah Khan:
       "Fixes to seccomp and ftrace tests and a change to add config file for
        dmabuf-heap test to increase coverage"
      
      * tag 'linux_kselftest-fixes-6.9-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest:
        selftests: dmabuf-heap: add config file for the test
        selftests/seccomp: Try to fit runtime of benchmark into timeout
        selftests/ftrace: Fix event filter target_func selection
      1ab5c8a3
    • Linus Torvalds's avatar
      Merge tag 'linux_kselftest-kunit-fixes-6.9-rc2' of... · a2ad5d9e
      Linus Torvalds authored
      Merge tag 'linux_kselftest-kunit-fixes-6.9-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest
      
      Pull KUnit fixes from Shuah Khan:
       "One urgent fix for --alltests build failure related to renaming of
        CONFIG_DAMON_DBGFS to DAMON_DBGFS_DEPRECATED to the missing config
        option"
      
      * tag 'linux_kselftest-kunit-fixes-6.9-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest:
        kunit: configs: Enable CONFIG_DAMON_DBGFS_DEPRECATED for --alltests
      a2ad5d9e
    • Muhammad Usama Anjum's avatar
      selftests: dmabuf-heap: add config file for the test · 224fe424
      Muhammad Usama Anjum authored
      The config fragment enlists all the config options needed for the test.
      This config is merged into the kernel's config on which this test is
      run.
      
      Fixed whitespace errors during commit:
      Shuah Khan <skhan@linuxfoundation.org>
      Reviewed-by: default avatarT.J. Mercier <tjmercier@google.com>
      Signed-off-by: default avatarMuhammad Usama Anjum <usama.anjum@collabora.com>
      Signed-off-by: default avatarShuah Khan <skhan@linuxfoundation.org>
      224fe424