1. 07 Sep, 2016 25 commits
  2. 20 Aug, 2016 15 commits
    • Greg Kroah-Hartman's avatar
      Linux 4.7.2 · 84fae3f8
      Greg Kroah-Hartman authored
      84fae3f8
    • Yoshihiro Shimoda's avatar
      phy: rcar-gen3-usb2: fix mutex_lock calling in interrupt · 300a15d7
      Yoshihiro Shimoda authored
      commit c14f8a40 upstream.
      
      This patch fixes an issue that the extcon_set_cable_state_() is possible
      to cause "BUG: scheduling while atomic" because this driver calls
      extcon_set_cable_state_() in the interrupt handler and mutex_lock()
      is possible to be called by like the following call trace.
      So, this patch adds a workqueue function to resolve this issue.
      
      [    9.706504] BUG: scheduling while atomic: systemd-journal/25893/0x00010303
      [    9.714569] Modules linked in:
      [    9.717629] CPU: 0 PID: 25893 Comm: systemd-journal Not tainted 4.7.0-rc4+ #86
      [    9.724844] Hardware name: Renesas Salvator-X board based on r8a7795 (DT)
      [    9.731624] Call trace:
      [    9.734077] [<ffff0000080889f0>] dump_backtrace+0x0/0x1a8
      [    9.739470] [<ffff000008088bac>] show_stack+0x14/0x20
      [    9.744520] [<ffff000008348ab4>] dump_stack+0x94/0xb8
      [    9.749568] [<ffff0000080da18c>] __schedule_bug+0x44/0x58
      [    9.754966] [<ffff0000087c6394>] __schedule+0x4e4/0x598
      [    9.760185] [<ffff0000087c6484>] schedule+0x3c/0xa8
      [    9.765057] [<ffff0000087c6928>] schedule_preempt_disabled+0x20/0x38
      [    9.771408] [<ffff0000080f20dc>] mutex_optimistic_spin+0x18c/0x1d0
      [    9.777583] [<ffff0000087c7ef0>] __mutex_lock_slowpath+0x38/0x140
      [    9.783669] [<ffff0000087c803c>] mutex_lock+0x44/0x60
      [    9.788717] [<ffff00000834ca48>] kobject_uevent_env+0x250/0x500
      [    9.794634] [<ffff0000086ae8c0>] extcon_update_state+0x220/0x298
      [    9.800634] [<ffff0000086ae9d8>] extcon_set_cable_state_+0x78/0x88
      [    9.806812] [<ffff000008376004>] rcar_gen3_device_recognition+0x5c/0xe0
      [    9.813420] [<ffff0000083761bc>] rcar_gen3_phy_usb2_irq+0x3c/0x48
      [    9.819509] [<ffff0000080fae94>] handle_irq_event_percpu+0x94/0x140
      [    9.825769] [<ffff0000080faf88>] handle_irq_event+0x48/0x78
      [    9.831334] [<ffff0000080fe620>] handle_fasteoi_irq+0xb8/0x1b0
      [    9.837162] [<ffff0000080fa3c4>] generic_handle_irq+0x24/0x38
      [    9.842900] [<ffff0000080fa6fc>] __handle_domain_irq+0x5c/0xb8
      [    9.848727] [<ffff000008081520>] gic_handle_irq+0x58/0xb0
      Reported-by: default avatarSimon Horman <horms@verge.net.au>
      Fixes: 2b38543c ("phy: rcar-gen3-usb2: add extcon support")
      Signed-off-by: default avatarYoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
      Signed-off-by: default avatarKishon Vijay Abraham I <kishon@ti.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      300a15d7
    • Ben Hutchings's avatar
      Documentation/module-signing.txt: Note need for version info if reusing a key · 799c8305
      Ben Hutchings authored
      commit b8612e51 upstream.
      
      Signing a module should only make it trusted by the specific kernel it
      was built for, not anything else.  If a module signing key is used for
      multiple ABI-incompatible kernels, the modules need to include enough
      version information to distinguish them.
      Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
      Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      799c8305
    • Ben Hutchings's avatar
      module: Invalidate signatures on force-loaded modules · c528032b
      Ben Hutchings authored
      commit bca014ca upstream.
      
      Signing a module should only make it trusted by the specific kernel it
      was built for, not anything else.  Loading a signed module meant for a
      kernel with a different ABI could have interesting effects.
      Therefore, treat all signatures as invalid when a module is
      force-loaded.
      Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
      Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      c528032b
    • Mike Snitzer's avatar
      dm flakey: error READ bios during the down_interval · dbf8fc37
      Mike Snitzer authored
      commit 99f3c90d upstream.
      
      When the corrupt_bio_byte feature was introduced it caused READ bios to
      no longer be errored with -EIO during the down_interval.  This had to do
      with the complexity of needing to submit READs if the corrupt_bio_byte
      feature was used.
      
      Fix it so READ bios are properly errored with -EIO; doing so early in
      flakey_map() as long as there isn't a match for the corrupt_bio_byte
      feature.
      
      Fixes: a3998799 ("dm flakey: add corrupt_bio_byte feature")
      Reported-by: default avatarAkira Hayakawa <ruby.wktk@gmail.com>
      Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      dbf8fc37
    • Alim Akhtar's avatar
      rtc: s3c: Add s3c_rtc_{enable/disable}_clk in s3c_rtc_setfreq() · 5dac5e40
      Alim Akhtar authored
      commit 70c96dfa upstream.
      
      As per code flow s3c_rtc_setfreq() will get called with rtc clock disabled
      and in set_freq we perform h/w registers read/write, which results in a
      kernel crash on exynos7 platform while probing rtc driver.
      Below is code flow:
      s3c_rtc_probe()
          clk_prepare_enable(info->rtc_clk) // rtc clock enabled
          s3c_rtc_gettime() // will enable clk if not done, and disable it upon exit
          s3c_rtc_setfreq() //then this will be called with clk disabled
      
      This patch take cares of such issue by adding s3c_rtc_{enable/disable}_clk in
      s3c_rtc_setfreq().
      
      Fixes: 24e14554 ("drivers/rtc/rtc-s3c.c: delete duplicate clock control")
      Signed-off-by: default avatarAlim Akhtar <alim.akhtar@samsung.com>
      Reviewed-by: default avatarKrzysztof Kozlowski <k.kozlowski@samsung.com>
      Reviewed-by: default avatarPankaj Dubey <pankaj.dubey@samsung.com>
      Tested-by: default avatarPankaj Dubey <pankaj.dubey@samsung.com>
      Signed-off-by: default avatarAlexandre Belloni <alexandre.belloni@free-electrons.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      5dac5e40
    • Mauricio Faria de Oliveira's avatar
      lpfc: fix oops in lpfc_sli4_scmd_to_wqidx_distr() from lpfc_send_taskmgmt() · e055ad0f
      Mauricio Faria de Oliveira authored
      commit 05a05872 upstream.
      
      The lpfc_sli4_scmd_to_wqidx_distr() function expects the scsi_cmnd
      'lpfc_cmd->pCmd' not to be null, and point to the midlayer command.
      
      That's not true in the .eh_(device|target|bus)_reset_handler path,
      because lpfc_send_taskmgmt() sends commands not from the midlayer, so
      does not set 'lpfc_cmd->pCmd'.
      
      That is true in the .queuecommand path because lpfc_queuecommand()
      stores the scsi_cmnd from midlayer in lpfc_cmd->pCmd; and lpfc_cmd is
      stored by lpfc_scsi_prep_cmnd() in piocbq->context1 -- which is passed
      to lpfc_sli4_scmd_to_wqidx_distr() as lpfc_cmd parameter.
      
      This problem can be hit on SCSI EH, and immediately with sg_reset.
      These 2 test-cases demonstrate the problem/fix with next-20160601.
      
      Test-case 1) sg_reset
      
          # strace sg_reset --device /dev/sdm
          <...>
          open("/dev/sdm", O_RDWR|O_NONBLOCK)     = 3
          ioctl(3, SG_SCSI_RESET, 0x3fffde6d0994 <unfinished ...>
          +++ killed by SIGSEGV +++
          Segmentation fault
      
          # dmesg
          Unable to handle kernel paging request for data at address 0x00000000
          Faulting instruction address: 0xd00000001c88442c
          Oops: Kernel access of bad area, sig: 11 [#1]
          <...>
          CPU: 104 PID: 16333 Comm: sg_reset Tainted: G        W       4.7.0-rc1-next-20160601-00004-g95b89dc #6
          <...>
          NIP [d00000001c88442c] lpfc_sli4_scmd_to_wqidx_distr+0xc/0xd0 [lpfc]
          LR [d00000001c826fe8] lpfc_sli_calc_ring.part.27+0x98/0xd0 [lpfc]
          Call Trace:
          [c000003c9ec876f0] [c000003c9ec87770] 0xc000003c9ec87770 (unreliable)
          [c000003c9ec87720] [d00000001c82e004] lpfc_sli_issue_iocb+0xd4/0x260 [lpfc]
          [c000003c9ec87780] [d00000001c831a3c] lpfc_sli_issue_iocb_wait+0x15c/0x5b0 [lpfc]
          [c000003c9ec87880] [d00000001c87f27c] lpfc_send_taskmgmt+0x24c/0x650 [lpfc]
          [c000003c9ec87950] [d00000001c87fd7c] lpfc_device_reset_handler+0x10c/0x200 [lpfc]
          [c000003c9ec87a10] [c000000000610694] scsi_try_bus_device_reset+0x44/0xc0
          [c000003c9ec87a40] [c0000000006113e8] scsi_ioctl_reset+0x198/0x2c0
          [c000003c9ec87bf0] [c00000000060fe5c] scsi_ioctl+0x13c/0x4b0
          [c000003c9ec87c80] [c0000000006629b0] sd_ioctl+0xf0/0x120
          [c000003c9ec87cd0] [c00000000046e4f8] blkdev_ioctl+0x248/0xb70
          [c000003c9ec87d30] [c0000000002a1f60] block_ioctl+0x70/0x90
          [c000003c9ec87d50] [c00000000026d334] do_vfs_ioctl+0xc4/0x890
          [c000003c9ec87de0] [c00000000026db60] SyS_ioctl+0x60/0xc0
          [c000003c9ec87e30] [c000000000009120] system_call+0x38/0x108
          Instruction dump:
          <...>
      
          With fix:
      
          # strace sg_reset --device /dev/sdm
          <...>
          open("/dev/sdm", O_RDWR|O_NONBLOCK)     = 3
          ioctl(3, SG_SCSI_RESET, 0x3fffe103c554) = 0
          close(3)                                = 0
          exit_group(0)                           = ?
          +++ exited with 0 +++
      
          # dmesg
          [  424.658649] lpfc 0006:01:00.4: 4:(0):0713 SCSI layer issued Device Reset (1, 0) return x2002
      
      Test-case 2) SCSI EH
      
          Using this debug patch to wire an SCSI EH trigger, for lpfc_scsi_cmd_iocb_cmpl():
          -       cmd->scsi_done(cmd);
          +       if ((phba->pport ? phba->pport->cfg_log_verbose : phba->cfg_log_verbose) == 0x32100000)
          +               printk(KERN_ALERT "lpfc: skip scsi_done()\n");
          +       else
          +               cmd->scsi_done(cmd);
      
          # echo 0x32100000 > /sys/class/scsi_host/host11/lpfc_log_verbose
      
          # dd if=/dev/sdm of=/dev/null iflag=direct &
          <...>
      
          After a while:
      
          # dmesg
          lpfc 0006:01:00.4: 4:(0):3053 lpfc_log_verbose changed from 0 (x0) to 839909376 (x32100000)
          lpfc: skip scsi_done()
          <...>
          Unable to handle kernel paging request for data at address 0x00000000
          Faulting instruction address: 0xd0000000199e448c
          Oops: Kernel access of bad area, sig: 11 [#1]
          <...>
          CPU: 96 PID: 28556 Comm: scsi_eh_11 Tainted: G        W       4.7.0-rc1-next-20160601-00004-g95b89dc #6
          <...>
          NIP [d0000000199e448c] lpfc_sli4_scmd_to_wqidx_distr+0xc/0xd0 [lpfc]
          LR [d000000019986fe8] lpfc_sli_calc_ring.part.27+0x98/0xd0 [lpfc]
          Call Trace:
          [c000000ff0d0b890] [c000000ff0d0b900] 0xc000000ff0d0b900 (unreliable)
          [c000000ff0d0b8c0] [d00000001998e004] lpfc_sli_issue_iocb+0xd4/0x260 [lpfc]
          [c000000ff0d0b920] [d000000019991a3c] lpfc_sli_issue_iocb_wait+0x15c/0x5b0 [lpfc]
          [c000000ff0d0ba20] [d0000000199df27c] lpfc_send_taskmgmt+0x24c/0x650 [lpfc]
          [c000000ff0d0baf0] [d0000000199dfd7c] lpfc_device_reset_handler+0x10c/0x200 [lpfc]
          [c000000ff0d0bbb0] [c000000000610694] scsi_try_bus_device_reset+0x44/0xc0
          [c000000ff0d0bbe0] [c0000000006126cc] scsi_eh_ready_devs+0x49c/0x9c0
          [c000000ff0d0bcb0] [c000000000614160] scsi_error_handler+0x580/0x680
          [c000000ff0d0bd80] [c0000000000ae848] kthread+0x108/0x130
          [c000000ff0d0be30] [c0000000000094a8] ret_from_kernel_thread+0x5c/0xb4
          Instruction dump:
          <...>
      
          With fix:
      
          # dmesg
          lpfc 0006:01:00.4: 4:(0):3053 lpfc_log_verbose changed from 0 (x0) to 839909376 (x32100000)
          lpfc: skip scsi_done()
          <...>
          lpfc 0006:01:00.4: 4:(0):0713 SCSI layer issued Device Reset (0, 0) return x2002
          <...>
          lpfc 0006:01:00.4: 4:(0):0723 SCSI layer issued Target Reset (1, 0) return x2002
          <...>
          lpfc 0006:01:00.4: 4:(0):0714 SCSI layer issued Bus Reset Data: x2002
          <...>
          lpfc 0006:01:00.4: 4:(0):3172 SCSI layer issued Host Reset Data:
          <...>
      
      Fixes: 8b0dff14 ("lpfc: Add support for using block multi-queue")
      Signed-off-by: default avatarMauricio Faria de Oliveira <mauricfo@linux.vnet.ibm.com>
      Reviewed-by: default avatarJohannes Thumshirn <jthumshirn@suse.de>
      Acked-by: default avatarJames Smart <james.smart@broadcom.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e055ad0f
    • Lv Zheng's avatar
      ACPI / EC: Work around method reentrancy limit in ACPICA for _Qxx · eba117fe
      Lv Zheng authored
      commit e1191bd4 upstream.
      
      A regression is caused by the following commit:
      
        Commit: 02b771b6
        Subject: ACPI / EC: Fix an issue caused by the serialized _Qxx evaluations
      
      In this commit, using system workqueue causes that the maximum parallel
      executions of _Qxx can exceed 255. This violates the method reentrancy
      limit in ACPICA and generates the following error log:
      
        ACPI Error: Method reached maximum reentrancy limit (255) (20150818/dsmethod-341)
      
      This patch creates a seperate workqueue and limits the number of parallel
      _Qxx evaluations down to a configurable value (can be tuned against number
      of online CPUs).
      
      Since EC events are handled after driver probe, we can create the workqueue
      in acpi_ec_init().
      
      Fixes: 02b771b6 (ACPI / EC: Fix an issue caused by the serialized _Qxx evaluations)
      Link: https://bugzilla.kernel.org/show_bug.cgi?id=135691Reported-and-tested-by: default avatarHelen Buus <ubuntu@hbuus.com>
      Signed-off-by: default avatarLv Zheng <lv.zheng@intel.com>
      Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      eba117fe
    • Andy Shevchenko's avatar
      x86/platform/intel_mid_pci: Rework IRQ0 workaround · 6dda994f
      Andy Shevchenko authored
      commit bb275705 upstream.
      
      On Intel Merrifield platform several PCI devices have a bogus configuration,
      i.e. the IRQ0 had been assigned to few of them. These are PCI root bridge,
      eMMC0, HS UART common registers, PWM, and HDMI. The actual interrupt line can
      be allocated to one device exclusively, in our case to eMMC0, the rest should
      cope without it and basically known drivers for them are not using interrupt
      line at all.
      
      Rework IRQ0 workaround, which was previously done to avoid conflict between
      eMMC0 and HS UART common registers, to behave differently based on the device
      in question, i.e. allocate interrupt line to eMMC0, but silently skip interrupt
      allocation for the rest except HS UART common registers which are not used
      anyway. With this rework IOSF MBI driver in particular would be used.
      Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
      Acked-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Cc: Bjorn Helgaas <bhelgaas@google.com>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Fixes: 39d9b77b ("x86/pci/intel_mid_pci: Work around for IRQ0 assignment")
      Link: http://lkml.kernel.org/r/1465842481-136852-1-git-send-email-andriy.shevchenko@linux.intel.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      6dda994f
    • Chris Blake's avatar
      PCI: Mark Atheros AR9485 and QCA9882 to avoid bus reset · 82c71226
      Chris Blake authored
      commit 9ac0108c upstream.
      
      Similar to the AR93xx series, the AR94xx and the Qualcomm QCA988x also have
      the same quirk for the Bus Reset.
      
      Fixes: c3e59ee4 ("PCI: Mark Atheros AR93xx to avoid bus reset")
      Signed-off-by: default avatarChris Blake <chrisrblake93@gmail.com>
      Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      82c71226
    • Huacai Chen's avatar
      MIPS: hpet: Increase HPET_MIN_PROG_DELTA and decrease HPET_MIN_CYCLES · 2f8e3e96
      Huacai Chen authored
      commit 3ef06653 upstream.
      
      At first, we prefer to use mips clockevent device, so we decrease the
      rating of hpet clockevent device.
      
      For hpet, if HPET_MIN_PROG_DELTA (minimum delta of hpet programming) is
      too small and HPET_MIN_CYCLES (threshold of -ETIME checking) is too
      large, then hpet_next_event() can easily return -ETIME. After commit
      c6eb3f70 ("hrtimer: Get rid of hrtimer softirq") this will cause
      a RCU stall.
      
      So, HPET_MIN_PROG_DELTA must be sufficient that we don't re-trip the
      -ETIME check -- if we do, we will return -ETIME, forward the next event
      time, try to set it, return -ETIME again, and basically lock the system
      up. Meanwhile, HPET_MIN_CYCLES doesn't need to be too large, 16 cycles
      is enough.
      
      This solution is similar to commit f9eccf24 ("clocksource/drivers
      /vt8500: Increase the minimum delta").
      
      By the way, this patch ensures hpet count/compare to be 32-bit long.
      Signed-off-by: default avatarHuacai Chen <chenhc@lemote.com>
      Cc: John Crispin <john@phrozen.org>
      Cc: Steven J . Hill <Steven.Hill@imgtec.com>
      Cc: Fuxin Zhang <zhangfx@lemote.com>
      Cc: Zhangjin Wu <wuzhangjin@gmail.com>
      Cc: linux-mips@linux-mips.org
      Patchwork: https://patchwork.linux-mips.org/patch/13819/Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      2f8e3e96
    • Huacai Chen's avatar
      MIPS: Don't register r4k sched clock when CPUFREQ enabled · 1cdfa885
      Huacai Chen authored
      commit 07d69579 upstream.
      
      Don't register r4k sched clock when CPUFREQ enabled because sched clock
      need a constant frequency.
      Signed-off-by: default avatarHuacai Chen <chenhc@lemote.com>
      Cc: John Crispin <john@phrozen.org>
      Cc: Steven J . Hill <Steven.Hill@caviumnetworks.com>
      Cc: Fuxin Zhang <zhangfx@lemote.com>
      Cc: Zhangjin Wu <wuzhangjin@gmail.com>
      Cc: linux-mips@linux-mips.org
      Patchwork: https://patchwork.linux-mips.org/patch/13820/Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      1cdfa885
    • Huacai Chen's avatar
      MIPS: Fix r4k clockevents registration · 7b0e6042
      Huacai Chen authored
      commit 6dabf2b7 upstream.
      
      CPUFreq need min_delta_ticks/max_delta_ticks to be initialized, and
      this can be done by clockevents_config_and_register().
      Signed-off-by: default avatarHeiher <r@hev.cc>
      Signed-off-by: default avatarHuacai Chen <chenhc@lemote.com>
      Cc: John Crispin <john@phrozen.org>
      Cc: Steven J . Hill <Steven.Hill@imgtec.com>
      Cc: Fuxin Zhang <zhangfx@lemote.com>
      Cc: Zhangjin Wu <wuzhangjin@gmail.com>
      Cc: linux-mips@linux-mips.org
      Patchwork: https://patchwork.linux-mips.org/patch/13817/Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      7b0e6042
    • Matt Redfearn's avatar
      MIPS: mm: Fix definition of R6 cache instruction · d2be3b4e
      Matt Redfearn authored
      commit 4f53989b upstream.
      
      Commit a168b8f1 ("MIPS: mm: Add MIPS R6 instruction encodings") added
      an incorrect definition of the redefined MIPSr6 cache instruction.
      
      Executing any kernel code including this instuction results in a
      reserved instruction exception and kernel panic.
      
      Fix the instruction definition.
      
      Fixes: a168b8f1Signed-off-by: default avatarMatt Redfearn <matt.redfearn@imgtec.com>
      Cc: linux-mips@linux-mips.org
      Cc: linux-kernel@vger.kernel.org
      Patchwork: https://patchwork.linux-mips.org/patch/13663/Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      d2be3b4e
    • Trond Myklebust's avatar
      SUNRPC: Don't allocate a full sockaddr_storage for tracing · 09bde790
      Trond Myklebust authored
      commit db1bb44c upstream.
      
      We're always tracing IPv4 or IPv6 addresses, so we can save a lot
      of space on the ringbuffer by allocating the correct sockaddr size.
      Signed-off-by: default avatarTrond Myklebust <trond.myklebust@primarydata.com>
      Fixes: 83a712e0 "sunrpc: add some tracepoints around ..."
      Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      09bde790