1. 28 Mar, 2013 1 commit
  2. 27 Mar, 2013 1 commit
    • Roland Stigge's avatar
      usb: Fix compile error by selecting USB_OTG_UTILS · c8fa48d3
      Roland Stigge authored
      The current lpc32xx_defconfig breaks like this, caused by recent phy
      restructuring:
      
        LD      init/built-in.o
      drivers/built-in.o: In function `usb_hcd_nxp_probe':
      drivers/usb/host/ohci-nxp.c:224: undefined reference to `isp1301_get_client'
      drivers/built-in.o: In function `lpc32xx_udc_probe':
      drivers/usb/gadget/lpc32xx_udc.c:3104: undefined reference to
      `isp1301_get_client' distcc[27867] ERROR: compile (null) on localhost failed
      make: *** [vmlinux] Error 1
      
      Caused by 1c208881 (usb: Makefile: fix
      drivers/usb/phy/ Makefile entry)
      
      This patch fixes this by selecting USB_OTG_UTILS in Kconfig which
      causes the phy driver to be built again.
      Signed-off-by: default avatarRoland Stigge <stigge@antcom.de>
      Acked-by: default avatarFelipe Balbi <balbi@ti.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      c8fa48d3
  3. 26 Mar, 2013 2 commits
    • Greg Kroah-Hartman's avatar
      Merge tag 'for-usb-linus-2013-03-26' of... · d78658d4
      Greg Kroah-Hartman authored
      Merge tag 'for-usb-linus-2013-03-26' of git://git.kernel.org/pub/scm/linux/kernel/git/sarah/xhci into usb-linus
      
      Misc xHCI fixes for 3.9
      
      Hi Greg,
      
      Here's a couple of fixes for the xHCI driver.  Three patches are nothing
      major: build warning fix, macro field width fix, and removing some
      unnecessary log spam.
      
      The only interesting thing here is Tianyu's two patches to fix the USB
      port connection type discovery, for the USB port power off mechanism.
      This adds new USB host API, but as discussed, it's necessary to avoid
      powering off the wrong USB port.  It's not marked for backport to stable
      kernels, since the sysfs mechanism to manually power off a port didn't
      go in until 3.9.
      
      I've smoke tested these, including system suspend, USB device suspend,
      and rocking out in my cube with a pair of USB headphones.  They look
      fine to me.
      
      Hibernate is currently broken on my system, due to some nouveau MMIO
      read faults.  I'll report that separately.
      
      Sarah Sharp
      d78658d4
    • Ming Lei's avatar
      USB: serial: fix hang when opening port · eba0e3c3
      Ming Lei authored
      Johan's 'fix use-after-free in TIOCMIWAIT' patchset[1] introduces
      one bug which can cause kernel hang when opening port.
      
      This patch initialized the 'port->delta_msr_wait' waitqueue head
      to fix the bug which is introduced in 3.9-rc4.
      
      [1], http://marc.info/?l=linux-usb&m=136368139627876&w=2
      
      Cc: stable <stable@vger.kernel.org>
      Signed-off-by: default avatarMing Lei <tom.leiming@gmail.com>
      Acked-by: default avatarJohan Hovold <jhovold@gmail.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      eba0e3c3
  4. 25 Mar, 2013 6 commits
    • Soeren Moch's avatar
      USB: EHCI: fix bug in iTD/siTD DMA pool allocation · 85ecd032
      Soeren Moch authored
      [Description written by Alan Stern]
      
      Soeren tracked down a very difficult bug in ehci-hcd's DMA pool
      management of iTD and siTD structures.  Some background: ehci-hcd
      gives each isochronous endpoint its own set of active and free itd's
      (or sitd's for full-speed devices).  When a new itd is needed, it is
      taken from the head of the free list, if possible.  However, itd's
      must not be used twice in a single frame because the hardware
      continues to access the data structure for the entire duration of a
      frame.  Therefore if the itd at the head of the free list has its
      "frame" member equal to the current value of ehci->now_frame, it
      cannot be reused and instead a new itd is allocated from the DMA pool.
      The entries on the free list are not released back to the pool until
      the endpoint is no longer in use.
      
      The bug arises from the fact that sometimes an itd can be moved back
      onto the free list before itd->frame has been set properly.  In
      Soeren's case, this happened because ehci-hcd can allocate one more
      itd than it actually needs for an URB; the extra itd may or may not be
      required depending on how the transfer aligns with a frame boundary.
      For example, an URB with 8 isochronous packets will cause two itd's to
      be allocated.  If the URB is scheduled to start in microframe 3 of
      frame N then it will require both itds: one for microframes 3 - 7 of
      frame N and one for microframes 0 - 2 of frame N+1.  But if the URB
      had been scheduled to start in microframe 0 then it would require only
      the first itd, which could cover microframes 0 - 7 of frame N.  The
      second itd would be returned to the end of the free list.
      
      The itd allocation routine initializes the entire structure to 0, so
      the extra itd ends up on the free list with itd->frame set to 0
      instead of a meaningful value.  After a while the itd reaches the head
      of the list, and occasionally this happens when ehci->now_frame is
      equal to 0.  Then, even though it would be okay to reuse this itd, the
      driver thinks it must get another itd from the DMA pool.
      
      For as long as the isochronous endpoint remains in use, this flaw in
      the mechanism causes more and more itd's to be taken slowly from the
      DMA pool.  Since none are released back, the pool eventually becomes
      exhausted.
      
      This reuslts in memory allocation failures, which typically show up
      during a long-running audio stream.  Video might suffer the same
      effect.
      
      The fix is very simple.  To prevent allocations from the pool when
      they aren't needed, make sure that itd's sent back to the free list
      prematurely have itd->frame set to an invalid value which can never be
      equal to ehci->now_frame.
      
      This should be applied to -stable kernels going back to 3.6.
      Signed-off-by: default avatarSoeren Moch <smoch@web.de>
      Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
      Cc: stable <stable@vger.kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      85ecd032
    • Sarah Sharp's avatar
      xhci: Don't warn on empty ring for suspended devices. · a83d6755
      Sarah Sharp authored
      When a device attached to the roothub is suspended, the endpoint rings
      are stopped.  The host may generate a completion event with the
      completion code set to 'Stopped' or 'Stopped Invalid' when the ring is
      halted.  The current xHCI code prints a warning in that case, which can
      be really annoying if the USB device is coming into and out of suspend.
      
      Remove the unnecessary warning.
      Signed-off-by: default avatarSarah Sharp <sarah.a.sharp@linux.intel.com>
      Tested-by: default avatarStephen Hemminger <stephen@networkplumber.org>
      a83d6755
    • Vivek Gautam's avatar
      usb: xhci: Fix TRB transfer length macro used for Event TRB. · 1c11a172
      Vivek Gautam authored
      Use proper macro while extracting TRB transfer length from
      Transfer event TRBs. Adding a macro EVENT_TRB_LEN (bits 0:23)
      for the same, and use it instead of TRB_LEN (bits 0:16) in
      case of event TRBs.
      
      This patch should be backported to kernels as old as 2.6.31, that
      contain the commit b10de142 "USB: xhci:
      Bulk transfer support".  This patch will have issues applying to older
      kernels.
      Signed-off-by: default avatarVivek gautam <gautam.vivek@samsung.com>
      Signed-off-by: default avatarSarah Sharp <sarah.a.sharp@linux.intel.com>
      Cc: stable@vger.kernel.org
      1c11a172
    • Lan Tianyu's avatar
      usb/acpi: binding xhci root hub usb port with ACPI · bafcaf6d
      Lan Tianyu authored
      This patch is to bind xhci root hub usb port with its acpi node.
      The port num in the acpi table matches with the sequence in the xhci
      extended capabilities table. So call usb_hcd_find_raw_port_number() to
      transfer hub port num into raw port number which associates with
      the sequence in the xhci extended capabilities table before binding.
      Signed-off-by: default avatarLan Tianyu <tianyu.lan@intel.com>
      Signed-off-by: default avatarSarah Sharp <sarah.a.sharp@linux.intel.com>
      bafcaf6d
    • Lan Tianyu's avatar
      usb: add find_raw_port_number callback to struct hc_driver() · 3f5eb141
      Lan Tianyu authored
      xhci driver divides the root hub into two logical hubs which work
      respectively for usb 2.0 and usb 3.0 devices. They are independent
      devices in the usb core. But in the ACPI table, it's one device node
      and all usb2.0 and usb3.0 ports are under it. Binding usb port with
      its acpi node needs the raw port number which is reflected in the xhci
      extended capabilities table. This patch is to add find_raw_port_number
      callback to struct hc_driver(), fill it with xhci_find_raw_port_number()
      which will return raw port number and add a wrap usb_hcd_find_raw_port_number().
      
      Otherwise, refactor xhci_find_real_port_number(). Using
      xhci_find_raw_port_number() to get real index in the HW port status
      registers instead of scanning through the xHCI roothub port array.
      This can help to speed up.
      
      All addresses in xhci->usb2_ports and xhci->usb3_ports array are
      kown good ports and don't include following bad ports in the extended
      capabilities talbe.
           (1) root port that doesn't have an entry
           (2) root port with unknown speed
           (3) root port that is listed twice and with different speeds.
      
      So xhci_find_raw_port_number() will only return port num of good ones
      and never touch bad ports above.
      Signed-off-by: default avatarLan Tianyu <tianyu.lan@intel.com>
      Signed-off-by: default avatarSarah Sharp <sarah.a.sharp@linux.intel.com>
      3f5eb141
    • Peter Chen's avatar
      usb: xhci: fix build warning · 09ce0c0c
      Peter Chen authored
      /home/b29397/work/code/git/linus/linux-2.6/drivers/usb/host/xhci-ring.c: In function ‘handle_port_status’:
      /home/b29397/work/code/git/linus/linux-2.6/drivers/usb/host/xhci-ring.c:1580: warning: ‘hcd’ may be used uninitialized in this function
      Signed-off-by: default avatarPeter Chen <peter.chen@freescale.com>
      Signed-off-by: default avatarSarah Sharp <sarah.a.sharp@linux.intel.com>
      09ce0c0c
  5. 23 Mar, 2013 8 commits
  6. 22 Mar, 2013 22 commits
    • Linus Torvalds's avatar
      Merge git://git.infradead.org/users/willy/linux-nvme · 5da273fe
      Linus Torvalds authored
      Pull NVMe driver update from Matthew Wilcox:
       "These patches have mostly been baking for a few months; sorry I didn't
        get them in during the merge window.  They're all bug fixes, except
        for the addition of the SMART log and the addition to MAINTAINERS."
      
      * git://git.infradead.org/users/willy/linux-nvme:
        NVMe: Add namespaces with no LBA range feature
        MAINTAINERS: Add entry for the NVMe driver
        NVMe: Initialize iod nents to 0
        NVMe: Define SMART log
        NVMe: Add result to nvme_get_features
        NVMe: Set result from user admin command
        NVMe: End queued bio requests when freeing queue
        NVMe: Free cmdid on nvme_submit_bio error
      5da273fe
    • Linus Torvalds's avatar
      Merge branch 'akpm' (fixes from Andrew) · 14629ed3
      Linus Torvalds authored
      Merge misc fixes from Andrew Morton.
      
      * emailed patches from Andrew Morton <akpm@linux-foundation.org>:
        mqueue: sys_mq_open: do not call mnt_drop_write() if read-only
        mm/hotplug: only free wait_table if it's allocated by vmalloc
        dma-debug: update DMA debug API to better handle multiple mappings of a buffer
        dma-debug: fix locking bug in check_unmap()
        drivers/rtc/rtc-at91rm9200.c: use a variable for storing IMR
        drivers/video/ep93xx-fb.c: include <linux/io.h> for devm_ioremap()
        drivers/rtc/rtc-da9052.c: fix for rtc device registration
        mm: zone_end_pfn is too small
        poweroff: change orderly_poweroff() to use schedule_work()
        mm/hugetlb: fix total hugetlbfs pages count when using memory overcommit accouting
        printk: Provide a wake_up_klogd() off-case
        irq_work.h: fix warning when CONFIG_IRQ_WORK=n
      14629ed3
    • Vladimir Davydov's avatar
      mqueue: sys_mq_open: do not call mnt_drop_write() if read-only · 38d78e58
      Vladimir Davydov authored
      mnt_drop_write() must be called only if mnt_want_write() succeeded,
      otherwise the mnt_writers counter will diverge.
      
      mnt_writers counters are used to check if remounting FS as read-only is
      OK, so after an extra mnt_drop_write() call, it would be impossible to
      remount mqueue FS as read-only.  Besides, on umount a warning would be
      printed like this one:
      
        =====================================
        [ BUG: bad unlock balance detected! ]
        3.9.0-rc3 #5 Not tainted
        -------------------------------------
        a.out/12486 is trying to release lock (sb_writers) at:
        mnt_drop_write+0x1f/0x30
        but there are no more locks to release!
      Signed-off-by: default avatarVladimir Davydov <vdavydov@parallels.com>
      Cc: Doug Ledford <dledford@redhat.com>
      Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
      Cc: "Eric W. Biederman" <ebiederm@xmission.com>
      Cc: Al Viro <viro@zeniv.linux.org.uk>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      38d78e58
    • Jianguo Wu's avatar
      mm/hotplug: only free wait_table if it's allocated by vmalloc · ca4b3f30
      Jianguo Wu authored
      zone->wait_table may be allocated from bootmem, it can not be freed.
      Signed-off-by: default avatarJianguo Wu <wujianguo@huawei.com>
      Reviewed-by: default avatarTang Chen <tangchen@cn.fujitsu.com>
      Cc: Tang Chen <tangchen@cn.fujitsu.com>
      Cc: Jiang Liu <jiang.liu@huawei.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      ca4b3f30
    • Alexander Duyck's avatar
      dma-debug: update DMA debug API to better handle multiple mappings of a buffer · 96e7d7a1
      Alexander Duyck authored
      There were reports of the igb driver unmapping buffers without calling
      dma_mapping_error.  On closer inspection issues were found in the DMA
      debug API and how it handled multiple mappings of the same buffer.
      
      The issue I found is the fact that the debug_dma_mapping_error would
      only set the map_err_type to MAP_ERR_CHECKED in the case that the was
      only one match for device and device address.  However in the case of
      non-IOMMU, multiple addresses existed and as a result it was not setting
      this field once a second mapping was instantiated.  I have resolved this
      by changing the search so that it instead will now set MAP_ERR_CHECKED
      on the first buffer that matches the device and DMA address that is
      currently in the state MAP_ERR_NOT_CHECKED.
      
      A secondary side effect of this patch is that in the case of multiple
      buffers using the same address only the last mapping will have a valid
      map_err_type.  The previous mappings will all end up with map_err_type
      set to MAP_ERR_CHECKED because of the dma_mapping_error call in
      debug_dma_map_page.  However this behavior may be preferable as it means
      you will likely only see one real error per multi-mapped buffer, versus
      the current behavior of multiple false errors mer multi-mapped buffer.
      Signed-off-by: default avatarAlexander Duyck <alexander.h.duyck@intel.com>
      Cc: Joerg Roedel <joro@8bytes.org>
      Reviewed-by: default avatarShuah Khan <shuah.khan@hp.com>
      Tested-by: default avatarShuah Khan <shuah.khan@hp.com>
      Cc: Jakub Kicinski <kubakici@wp.pl>
      Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      96e7d7a1
    • Alexander Duyck's avatar
      dma-debug: fix locking bug in check_unmap() · 8d640a51
      Alexander Duyck authored
      In check_unmap() it is possible to get into a dead-locked state if
      dma_mapping_error is called.  The problem is that the bucket is locked in
      check_unmap, and locked again by debug_dma_mapping_error which is called
      by dma_mapping_error.  To resolve that we must release the lock on the
      bucket before making the call to dma_mapping_error.
      
      [akpm@linux-foundation.org: restore 80-col trickery to be consistent with the rest of the file]
      Signed-off-by: default avatarAlexander Duyck <alexander.h.duyck@intel.com>
      Cc: Joerg Roedel <joro@8bytes.org>
      Reviewed-by: default avatarShuah Khan <shuah.khan@hp.com>
      Tested-by: default avatarShuah Khan <shuah.khan@hp.com>
      Cc: Jakub Kicinski <kubakici@wp.pl>
      Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      8d640a51
    • Nicolas Ferre's avatar
      drivers/rtc/rtc-at91rm9200.c: use a variable for storing IMR · 0ef1594c
      Nicolas Ferre authored
      On some revisions of AT91 SoCs, the RTC IMR register is not working.
      Instead of elaborating a workaround for that specific SoC or IP version,
      we simply use a software variable to store the Interrupt Mask Register
      and modify it for each enabling/disabling of an interrupt.  The overhead
      of this is negligible anyway.
      
      The interrupt mask register (IMR) for the RTC is broken on the AT91SAM9x5
      sub-family of SoCs (good overview of the members here:
      http://www.eewiki.net/display/linuxonarm/AT91SAM9x5 ).  The "user visible
      effect" is the RTC doesn't work.
      
      That sub-family is less than two years old and only has devicetree (DT)
      support and came online circa lk 3.7 .  The dust is yet to settle on the
      DT stuff at least for AT91 SoCs (translation: lots of stuff is still
      broken, so much that it is hard to know where to start).
      
      The fix in the patch is pretty simple: just shadow the silicon IMR
      register with a variable in the driver.  Some older SoCs (pre-DT) use the
      the rtc-at91rm9200 driver (e.g.  obviously the AT91RM9200) and they should
      not be impacted by the change.  There shouldn't be a large volume of
      interrupts associated with a RTC.
      Signed-off-by: default avatarNicolas Ferre <nicolas.ferre@atmel.com>
      Reported-by: default avatarDouglas Gilbert <dgilbert@interlog.com>
      Cc: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
      Cc: Ludovic Desroches <ludovic.desroches@atmel.com>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      0ef1594c
    • H Hartley Sweeten's avatar
      drivers/video/ep93xx-fb.c: include <linux/io.h> for devm_ioremap() · e66b0587
      H Hartley Sweeten authored
      Commit be867814 ("drivers/video/ep93xx-fb.c: use devm_ functions")
      introduced a build error:
      
        drivers/video/ep93xx-fb.c: In function 'ep93xxfb_probe':
        drivers/video/ep93xx-fb.c:532: error: implicit declaration of function 'devm_ioremap'
        drivers/video/ep93xx-fb.c:533: warning: assignment makes pointer from integer without a cast
      
      Include <linux/io.h> to pickup the declaration of 'devm_ioremap'.
      Signed-off-by: default avatarH Hartley Sweeten <hsweeten@visionengravers.com>
      Cc: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
      Acked-by: default avatarRyan Mallon <rmallon@gmail.com>
      Cc: Damien Cassou <damien.cassou@lifl.fr>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      e66b0587
    • Ashish Jangam's avatar
      drivers/rtc/rtc-da9052.c: fix for rtc device registration · 925e8ea6
      Ashish Jangam authored
      Add support for the virtual irq since now MFD only handles virtual irq
      Without this patch rtc device will fail in registration.
      
      (akpm: Ashish has a different version whcih will be needed for 3.8.x and
      earlier kernels)
      Signed-off-by: default avatarAshish <ashish.jangam@kpitcummins.com>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      925e8ea6
    • Russ Anderson's avatar
      mm: zone_end_pfn is too small · f9228b20
      Russ Anderson authored
      Booting with 32 TBytes memory hits BUG at mm/page_alloc.c:552! (output
      below).
      
      The key hint is "page 4294967296 outside zone".
      4294967296 = 0x100000000 (bit 32 is set).
      
      The problem is in include/linux/mmzone.h:
      
        530 static inline unsigned zone_end_pfn(const struct zone *zone)
        531 {
        532         return zone->zone_start_pfn + zone->spanned_pages;
        533 }
      
      zone_end_pfn is "unsigned" (32 bits).  Changing it to "unsigned long"
      (64 bits) fixes the problem.
      
      zone_end_pfn() was added recently in commit 108bcc96 ("mm: add & use
      zone_end_pfn() and zone_spans_pfn()")
      
      Output from the failure.
      
        No AGP bridge found
        page 4294967296 outside zone [ 4294967296 - 4327469056 ]
        ------------[ cut here ]------------
        kernel BUG at mm/page_alloc.c:552!
        invalid opcode: 0000 [#1] SMP
        Modules linked in:
        CPU 0
        Pid: 0, comm: swapper Not tainted 3.9.0-rc2.dtp+ #10
        RIP: free_one_page+0x382/0x430
        Process swapper (pid: 0, threadinfo ffffffff81942000, task ffffffff81955420)
        Call Trace:
          __free_pages_ok+0x96/0xb0
          __free_pages+0x25/0x50
          __free_pages_bootmem+0x8a/0x8c
          __free_memory_core+0xea/0x131
          free_low_memory_core_early+0x4a/0x98
          free_all_bootmem+0x45/0x47
          mem_init+0x7b/0x14c
          start_kernel+0x216/0x433
          x86_64_start_reservations+0x2a/0x2c
          x86_64_start_kernel+0x144/0x153
        Code: 89 f1 ba 01 00 00 00 31 f6 d3 e2 4c 89 ef e8 66 a4 01 00 e9 2c fe ff ff 0f 0b eb fe 0f 0b 66 66 2e 0f 1f 84 00 00 00 00 00 eb f3 <0f> 0b eb fe 0f 0b 0f 1f 84 00 00 00 00 00 eb f6 0f 0b eb fe 49
      Signed-off-by: default avatarRuss Anderson <rja@sgi.com>
      Reported-by: default avatarGeorge Beshers <gbeshers@sgi.com>
      Acked-by: default avatarHedi Berriche <hedi@sgi.com>
      Cc: Cody P Schafer <cody@linux.vnet.ibm.com>
      Cc: Michal Hocko <mhocko@suse.cz>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      f9228b20
    • Oleg Nesterov's avatar
      poweroff: change orderly_poweroff() to use schedule_work() · 2ca067ef
      Oleg Nesterov authored
      David said:
      
          Commit 6c0c0d4d ("poweroff: fix bug in orderly_poweroff()")
          apparently fixes one bug in orderly_poweroff(), but introduces
          another.  The comments on orderly_poweroff() claim it can be called
          from any context - and indeed we call it from interrupt context in
          arch/powerpc/platforms/pseries/ras.c for example.  But since that
          commit this is no longer safe, since call_usermodehelper_fns() is not
          safe in interrupt context without the UMH_NO_WAIT option.
      
      orderly_poweroff() can be used from any context but UMH_WAIT_EXEC is
      sleepable.  Move the "force" logic into __orderly_poweroff() and change
      orderly_poweroff() to use the global poweroff_work which simply calls
      __orderly_poweroff().
      
      While at it, remove the unneeded "int argc" and change argv_split() to
      use GFP_KERNEL.
      
      We use the global "bool poweroff_force" to pass the argument, this can
      obviously affect the previous request if it is pending/running.  So we
      only allow the "false => true" transition assuming that the pending
      "true" should succeed anyway.  If schedule_work() fails after that we
      know that work->func() was not called yet, it must see the new value.
      
      This means that orderly_poweroff() becomes async even if we do not run
      the command and always succeeds, schedule_work() can only fail if the
      work is already pending.  We can export __orderly_poweroff() and change
      the non-atomic callers which want the old semantics.
      Signed-off-by: default avatarOleg Nesterov <oleg@redhat.com>
      Reported-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Reported-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
      Cc: Lucas De Marchi <lucas.demarchi@profusion.mobi>
      Cc: Feng Hong <hongfeng@marvell.com>
      Cc: Kees Cook <keescook@chromium.org>
      Cc: Serge Hallyn <serge.hallyn@canonical.com>
      Cc: "Eric W. Biederman" <ebiederm@xmission.com>
      Cc: "Rafael J. Wysocki" <rjw@sisk.pl>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      2ca067ef
    • Wanpeng Li's avatar
      mm/hugetlb: fix total hugetlbfs pages count when using memory overcommit accouting · d0028588
      Wanpeng Li authored
      hugetlb_total_pages is used for overcommit calculations but the current
      implementation considers only the default hugetlb page size (which is
      either the first defined hugepage size or the one specified by
      default_hugepagesz kernel boot parameter).
      
      If the system is configured for more than one hugepage size, which is
      possible since commit a137e1cc ("hugetlbfs: per mount huge page
      sizes") then the overcommit estimation done by __vm_enough_memory()
      (resp.  shown by meminfo_proc_show) is not precise - there is an
      impression of more available/allowed memory.  This can lead to an
      unexpected ENOMEM/EFAULT resp.  SIGSEGV when memory is accounted.
      
      Testcase:
        boot: hugepagesz=1G hugepages=1
        the default overcommit ratio is 50
        before patch:
      
          egrep 'CommitLimit' /proc/meminfo
          CommitLimit:     55434168 kB
      
        after patch:
      
          egrep 'CommitLimit' /proc/meminfo
          CommitLimit:     54909880 kB
      
      [akpm@linux-foundation.org: coding-style tweak]
      Signed-off-by: default avatarWanpeng Li <liwanp@linux.vnet.ibm.com>
      Acked-by: default avatarMichal Hocko <mhocko@suse.cz>
      Cc: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
      Cc: Hillf Danton <dhillf@gmail.com>
      Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
      Cc: <stable@vger.kernel.org>		[3.0+]
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      d0028588
    • Frederic Weisbecker's avatar
      printk: Provide a wake_up_klogd() off-case · dc72c32e
      Frederic Weisbecker authored
      wake_up_klogd() is useless when CONFIG_PRINTK=n because neither printk()
      nor printk_sched() are in use and there are actually no waiter on
      log_wait waitqueue.  It should be a stub in this case for users like
      bust_spinlocks().
      
      Otherwise this results in this warning when CONFIG_PRINTK=n and
      CONFIG_IRQ_WORK=n:
      
      	kernel/built-in.o In function `wake_up_klogd':
      	(.text.wake_up_klogd+0xb4): undefined reference to `irq_work_queue'
      
      To fix this, provide an off-case for wake_up_klogd() when
      CONFIG_PRINTK=n.
      
      There is much more from console_unlock() and other console related code
      in printk.c that should be moved under CONFIG_PRINTK.  But for now,
      focus on a minimal fix as we passed the merged window already.
      
      [akpm@linux-foundation.org: include printk.h in bust_spinlocks.c]
      Signed-off-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
      Reported-by: default avatarJames Hogan <james.hogan@imgtec.com>
      Cc: James Hogan <james.hogan@imgtec.com>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Ingo Molnar <mingo@kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      dc72c32e
    • James Hogan's avatar
      irq_work.h: fix warning when CONFIG_IRQ_WORK=n · fe8d5261
      James Hogan authored
      A randconfig caught repeated compiler warnings when CONFIG_IRQ_WORK=n
      due to the definition of a non-inline static function in
      <linux/irq_work.h>:
      
        include/linux/irq_work.h +40 : warning: 'irq_work_needs_cpu' defined but not used
      
      Make it inline to supress the warning.  This is caused commit
      00b42959 ("irq_work: Don't stop the tick with pending works") merged
      in v3.9-rc1.
      Signed-off-by: default avatarJames Hogan <james.hogan@imgtec.com>
      Signed-off-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Paul Gortmaker <paul.gortmaker@windriver.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      fe8d5261
    • Takahisa Tanaka's avatar
      watchdog: sp5100_tco: Set the AcpiMmioSel bitmask value to 1 instead of 2 · 81fc933f
      Takahisa Tanaka authored
      The AcpiMmioSel bit is bit 1 in the AcpiMmioEn register, but the current
      sp5100_tco driver is using bit 2.
      
      See 2.3.3 Power Management (PM) Registers page 150 of the
      AMD SB800-Series Southbridges Register Reference Guide [1].
      
              AcpiMmioEn - RW – 8/16/32 bits - [PM_Reg: 24h]
              Field Name        Bits  Default  Description
              AcpiMMioDecodeEn  0     0b       Set to 1 to enable AcpiMMio space.
              AcpiMMIoSel       1     0b       Set AcpiMMio registers to be memory-mapped or IO-mapped space.
                                               0: Memory-mapped space
                                               1: I/O-mapped space
      
      The sp5100_tco driver expects zero as a value of AcpiMmioSel (bit 1).
      
      Fortunately, no problems were caused by this typo, because the default
      value of the undocumented misused bit 2 seems to be zero.
      
      However, the sp5100_tco driver should use the correct bitmask value.
      
      [1] http://support.amd.com/us/Embedded_TechDocs/45482.pdfSigned-off-by: default avatarTakahisa Tanaka <mc74hc00@gmail.com>
      Signed-off-by: default avatarPaul Menzel <paulepanter@users.sourceforge.net>
      Signed-off-by: default avatarWim Van Sebroeck <wim@iguana.be>
      Cc: stable <stable@vger.kernel.org>
      81fc933f
    • Takahisa Tanaka's avatar
      watchdog: sp5100_tco: Remove code that may cause a boot failure · 18e43212
      Takahisa Tanaka authored
      A problem was found on PC's with the SB700 chipset: The PC fails to
      load BIOS after running the 3.8.x kernel until the power is completely
      cut off. It occurs in all 3.8.x versions and the mainline version as of
      2/4. The issue does not occur with the 3.7.x builds.
      
      There are two methods for accessing the watchdog registers.
      
       1. Re-programming a resource address obtained by allocate_resource()
      to chipset.
       2. Use the direct memory-mapped IO access.
      
      The method 1 can be used by all the chipsets (SP5100, SB7x0, SB8x0 or
      later). However, experience shows that only PC with the SB8x0 (or
      later) chipsets can use the method 2.
      
      This patch removes the method 1, because the critical problem was found.
      That's why the watchdog timer was able to be used on SP5100 and SB7x0
      chipsets until now.
      
      Link: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1116835
      Link: https://lkml.org/lkml/2013/2/14/271Signed-off-by: default avatarTakahisa Tanaka <mc74hc00@gmail.com>
      Signed-off-by: default avatarWim Van Sebroeck <wim@iguana.be>
      Cc: stable <stable@vger.kernel.org>
      18e43212
    • Linus Torvalds's avatar
      Merge git://git.kernel.org/pub/scm/virt/kvm/kvm · b9cb3bf4
      Linus Torvalds authored
      Pull KVM fix from Marcelo Tosatti:
       "Fix compilation on PPC with !CONFIG_KVM"
      
      * git://git.kernel.org/pub/scm/virt/kvm/kvm:
        Revert "KVM: allow host header to be included even for !CONFIG_KVM"
      b9cb3bf4
    • Linus Torvalds's avatar
      Merge tag 'usb-3.9-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb · 8f46c507
      Linus Torvalds authored
      Pull USB fixes from Greg Kroah-Hartman:
       "Here are a number of USB fixes that resolve issues that have been
        reported against 3.9-rc3."
      
      * tag 'usb-3.9-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb: (37 commits)
        USB: ti_usb_3410_5052: fix use-after-free in TIOCMIWAIT
        USB: ssu100: fix use-after-free in TIOCMIWAIT
        USB: spcp8x5: fix use-after-free in TIOCMIWAIT
        USB: quatech2: fix use-after-free in TIOCMIWAIT
        USB: pl2303: fix use-after-free in TIOCMIWAIT
        USB: oti6858: fix use-after-free in TIOCMIWAIT
        USB: mos7840: fix use-after-free in TIOCMIWAIT
        USB: mos7840: fix broken TIOCMIWAIT
        USB: mct_u232: fix use-after-free in TIOCMIWAIT
        USB: io_ti: fix use-after-free in TIOCMIWAIT
        USB: io_edgeport: fix use-after-free in TIOCMIWAIT
        USB: ftdi_sio: fix use-after-free in TIOCMIWAIT
        USB: f81232: fix use-after-free in TIOCMIWAIT
        USB: cypress_m8: fix use-after-free in TIOCMIWAIT
        USB: ch341: fix use-after-free in TIOCMIWAIT
        USB: ark3116: fix use-after-free in TIOCMIWAIT
        USB: serial: add modem-status-change wait queue
        USB: serial: fix interface refcounting
        USB: io_ti: fix get_icount for two port adapters
        USB: garmin_gps: fix memory leak on disconnect
        ...
      8f46c507
    • Linus Torvalds's avatar
      Merge tag 'sound-3.9' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound · 70dc52fa
      Linus Torvalds authored
      Pull sound fixes from Takashi Iwai:
       "Mostly HD-audio and USB-audio regression fixes:
         - Oops fix at unloading of snd-hda-codec-conexant module
         - A few trivial regression fixes for Cirrus and Conexant HD-audio
           codecs
         - Relax the USB-audio descriptor parse errors as non-fatal
         - Fix locking of HD-audio CA0132 DSP loader
         - Fix the generic HD-audio parser for VIA codecs"
      
      * tag 'sound-3.9' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
        ALSA: hda - Fix DAC assignment for independent HP
        ALSA: hda - Fix abuse of snd_hda_lock_devices() for DSP loader
        ALSA: hda - Fix typo in checking IEC958 emphasis bit
        ALSA: snd-usb: mixer: ignore -EINVAL in snd_usb_mixer_controls()
        ALSA: snd-usb: mixer: propagate errors up the call chain
        ALSA: usb: Parse UAC2 extension unit like for UAC1
        ALSA: hda - Fix yet missing GPIO/EAPD setup in cirrus driver
        ALSA: hda/cirrus - Fix the digital beep registration
        ALSA: hda - Fix missing beep detach in patch_conexant.c
        ALSA: documentation: Fix typo in Documentation/sound
      70dc52fa
    • Linus Torvalds's avatar
      Merge tag 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/bp/bp · 1e0695cb
      Linus Torvalds authored
      Pull EDAC fixes from Borislav Petkov:
       "A fix from Mauro to correct csrow size accounting in sysfs and a
        sparse fix from Stephen Hemminger."
      
      * tag 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/bp/bp:
        EDAC: Merge mci.mem_is_per_rank with mci.csbased
        amd64_edac: Correct DIMM sizes
        EDAC: Make sysfs functions static
      1e0695cb
    • Keith Busch's avatar
      NVMe: Add namespaces with no LBA range feature · 12209036
      Keith Busch authored
      The LBA Range Type feature is optional in the NVMe specification,
      so we should continue with adding namespaces for controllers that do
      not implement this feature.
      Signed-off-by: default avatarKeith Busch <keith.busch@intel.com>
      Signed-off-by: default avatarMatthew Wilcox <matthew.r.wilcox@intel.com>
      12209036
    • Linus Torvalds's avatar
      vfs,proc: guarantee unique inodes in /proc · 51f0885e
      Linus Torvalds authored
      Dave Jones found another /proc issue with his Trinity tool: thanks to
      the namespace model, we can have multiple /proc dentries that point to
      the same inode, aliasing directories in /proc/<pid>/net/ for example.
      
      This ends up being a total disaster, because it acts like hardlinked
      directories, and causes locking problems.  We rely on the topological
      sort of the inodes pointed to by dentries, and if we have aliased
      directories, that odering becomes unreliable.
      
      In short: don't do this.  Multiple dentries with the same (directory)
      inode is just a bad idea, and the namespace code should never have
      exposed things this way.  But we're kind of stuck with it.
      
      This solves things by just always allocating a new inode during /proc
      dentry lookup, instead of using "iget_locked()" to look up existing
      inodes by superblock and number.  That actually simplies the code a bit,
      at the cost of potentially doing more inode [de]allocations.
      
      That said, the inode lookup wasn't free either (and did a lot of locking
      of inodes), so it is probably not that noticeable.  We could easily keep
      the old lookup model for non-directory entries, but rather than try to
      be excessively clever this just implements the minimal and simplest
      workaround for the problem.
      Reported-and-tested-by: default avatarDave Jones <davej@redhat.com>
      Analyzed-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      51f0885e