1. 18 6月, 2009 3 次提交
    • H
      thinkpad-acpi: support the second fan on the X61 · d7377247
      Henrique de Moraes Holschuh 提交于
      Support reading the tachometer of the auxiliary fan of a X60/X61.
      
      It was found out by sheer luck, that bit 0 of EC register 0x31
      (formely HBRV) selects which fan is active for tachometer readings
      through EC 0x84/0x085: 0 for fan1, 1 for fan2.
      
      Many thanks to Christoph Kl??nter, to Whoopie, and to weasel, who
      helped confirm that behaviour.
      
      Fan control through EC HFSP applies to both fans equally, regardless
      of the state of bit 0 of EC 0x31.  That matches the way the DSDT uses
      HFSP.
      
      In order to better support the secondary fan, export a second
      tachometer over hwmon, and add defensive measures to make sure we are
      reading the correct tachometer.
      
      Support for the second fan is whitelist-based, as I have not found
      anything obvious to look for in the DSDT to detect the presence of
      the second fan.
      Signed-off-by: NHenrique de Moraes Holschuh <hmh@hmh.eng.br>
      Signed-off-by: NLen Brown <len.brown@intel.com>
      d7377247
    • H
      thinkpad-acpi: forbid the use of HBRV on Lenovo ThinkPads · d7880f10
      Henrique de Moraes Holschuh 提交于
      Forcing thinkpad-acpi to do EC-based brightness control (HBRV) on a
      X61 has very... interesting effects, instead of doing nothing (since
      it doesn't have EC-based backlight control), it causes "weirdness" in
      the fan tachometer readings, for example.
      
      This means the EC register that used to be HBRV has been reused by
      Lenovo for something else, but they didn't remove it from the DSDT.
      
      Make sure the documentation reflects this data, and forbid the user
      from forcing the driver to access HBRV on Lenovo ThinkPads.
      Signed-off-by: NHenrique de Moraes Holschuh <hmh@hmh.eng.br>
      Signed-off-by: NLen Brown <len.brown@intel.com>
      d7880f10
    • H
      thinkpad-acpi: enhance led support · f21179a4
      Henrique de Moraes Holschuh 提交于
      Add support for extra LEDs on recent ThinkPads, and avoid registering
      with the led class the LEDs which are not available for a given
      ThinkPad model.
      
      All non-restricted LEDs are always available through the procfs
      interface, as the firmware doesn't care if an attempt is made to
      access an invalid LED.
      Signed-off-by: NHenrique de Moraes Holschuh <hmh@hmh.eng.br>
      Signed-off-by: NLen Brown <len.brown@intel.com>
      f21179a4
  2. 01 6月, 2009 1 次提交
  3. 27 5月, 2009 1 次提交
    • T
      ALSA: Enable PCM hw_ptr_jiffies check only in xrun_debug mode · c87d9732
      Takashi Iwai 提交于
      The PCM hw_ptr jiffies check results sometimes in problems when a
      hardware doesn't give smooth hw_ptr updates.  So far, au88x0 and some
      other drivers appear not working due to this strict check.
      However, this check is a nice debug tool, and the capability should be
      still kept.
      
      Hence, we disable this check now as default unless the user enables it
      by setting the xrun_debug mode to the specific stream via a proc file.
      Signed-off-by: NTakashi Iwai <tiwai@suse.de>
      c87d9732
  4. 25 5月, 2009 1 次提交
  5. 24 5月, 2009 1 次提交
  6. 23 5月, 2009 1 次提交
  7. 22 5月, 2009 1 次提交
  8. 18 5月, 2009 1 次提交
  9. 15 5月, 2009 2 次提交
  10. 09 5月, 2009 1 次提交
  11. 07 5月, 2009 2 次提交
  12. 03 5月, 2009 3 次提交
    • A
      mm: prevent divide error for small values of vm_dirty_bytes · 9e4a5bda
      Andrea Righi 提交于
      Avoid setting less than two pages for vm_dirty_bytes: this is necessary to
      avoid potential division by 0 (like the following) in get_dirty_limits().
      
      [   49.951610] divide error: 0000 [#1] PREEMPT SMP
      [   49.952195] last sysfs file: /sys/devices/pci0000:00/0000:00:01.1/host0/target0:0:0/0:0:0:0/block/sda/uevent
      [   49.952195] CPU 1
      [   49.952195] Modules linked in: pcspkr
      [   49.952195] Pid: 3064, comm: dd Not tainted 2.6.30-rc3 #1
      [   49.952195] RIP: 0010:[<ffffffff802d39a9>]  [<ffffffff802d39a9>] get_dirty_limits+0xe9/0x2c0
      [   49.952195] RSP: 0018:ffff88001de03a98  EFLAGS: 00010202
      [   49.952195] RAX: 00000000000000c0 RBX: ffff88001de03b80 RCX: 28f5c28f5c28f5c3
      [   49.952195] RDX: 0000000000000000 RSI: 00000000000000c0 RDI: 0000000000000000
      [   49.952195] RBP: ffff88001de03ae8 R08: 0000000000000000 R09: 0000000000000000
      [   49.952195] R10: ffff88001ddda9a0 R11: 0000000000000001 R12: 0000000000000001
      [   49.952195] R13: ffff88001fbc8218 R14: ffff88001de03b70 R15: ffff88001de03b78
      [   49.952195] FS:  00007fe9a435b6f0(0000) GS:ffff8800025d9000(0000) knlGS:0000000000000000
      [   49.952195] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [   49.952195] CR2: 00007fe9a39ab000 CR3: 000000001de38000 CR4: 00000000000006e0
      [   49.952195] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      [   49.952195] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
      [   49.952195] Process dd (pid: 3064, threadinfo ffff88001de02000, task ffff88001ddda250)
      [   49.952195] Stack:
      [   49.952195]  ffff88001fa0de00 ffff88001f2dbd70 ffff88001f9fe800 000080b900000000
      [   49.952195]  00000000000000c0 ffff8800027a6100 0000000000000400 ffff88001fbc8218
      [   49.952195]  0000000000000000 0000000000000600 ffff88001de03bb8 ffffffff802d3ed7
      [   49.952195] Call Trace:
      [   49.952195]  [<ffffffff802d3ed7>] balance_dirty_pages_ratelimited_nr+0x1d7/0x3f0
      [   49.952195]  [<ffffffff80368f8e>] ? ext3_writeback_write_end+0x9e/0x120
      [   49.952195]  [<ffffffff802cc7df>] generic_file_buffered_write+0x12f/0x330
      [   49.952195]  [<ffffffff802cce8d>] __generic_file_aio_write_nolock+0x26d/0x460
      [   49.952195]  [<ffffffff802cda32>] ? generic_file_aio_write+0x52/0xd0
      [   49.952195]  [<ffffffff802cda49>] generic_file_aio_write+0x69/0xd0
      [   49.952195]  [<ffffffff80365fa6>] ext3_file_write+0x26/0xc0
      [   49.952195]  [<ffffffff803034d1>] do_sync_write+0xf1/0x140
      [   49.952195]  [<ffffffff80290d1a>] ? get_lock_stats+0x2a/0x60
      [   49.952195]  [<ffffffff80280730>] ? autoremove_wake_function+0x0/0x40
      [   49.952195]  [<ffffffff8030411b>] vfs_write+0xcb/0x190
      [   49.952195]  [<ffffffff803042d0>] sys_write+0x50/0x90
      [   49.952195]  [<ffffffff8022ff6b>] system_call_fastpath+0x16/0x1b
      [   49.952195] Code: 00 00 00 2b 05 09 1c 17 01 48 89 c6 49 0f af f4 48 c1 ee 02 48 89 f0 48 f7 e1 48 89 d6 31 d2 48 c1 ee 02 48 0f af 75 d0 48 89 f0 <48> f7 f7 41 8b 95 ac 01 00 00 48 89 c7 49 0f af d4 48 c1 ea 02
      [   49.952195] RIP  [<ffffffff802d39a9>] get_dirty_limits+0xe9/0x2c0
      [   49.952195]  RSP <ffff88001de03a98>
      [   50.096523] ---[ end trace 008d7aa02f244d7b ]---
      Signed-off-by: NAndrea Righi <righi.andrea@gmail.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: David Rientjes <rientjes@google.com>
      Cc: Dave Chinner <david@fromorbit.com>
      Cc: Christoph Lameter <cl@linux-foundation.org>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      9e4a5bda
    • R
      kernel-doc: restrict syntax for private: and public: · 52dc5aec
      Randy Dunlap 提交于
      scripts/kernel-doc can (incorrectly) delete struct members that are
      surrounded by /* ...  */ <struct members> /* ...  */ if there is a /*
      private: */ comment in there somewhere also.
      
      Fix that by making the "/* private:" only allow whitespace between /* and
      "private:", not anything/everything in the world.
      
      This fixes some erroneous kernel-doc warnings that popped up while
      processing include/linux/usb/composite.h.
      Signed-off-by: NRandy Dunlap <randy.dunlap@oracle.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      52dc5aec
    • N
      mm: close page_mkwrite races · b827e496
      Nick Piggin 提交于
      Change page_mkwrite to allow implementations to return with the page
      locked, and also change it's callers (in page fault paths) to hold the
      lock until the page is marked dirty.  This allows the filesystem to have
      full control of page dirtying events coming from the VM.
      
      Rather than simply hold the page locked over the page_mkwrite call, we
      call page_mkwrite with the page unlocked and allow callers to return with
      it locked, so filesystems can avoid LOR conditions with page lock.
      
      The problem with the current scheme is this: a filesystem that wants to
      associate some metadata with a page as long as the page is dirty, will
      perform this manipulation in its ->page_mkwrite.  It currently then must
      return with the page unlocked and may not hold any other locks (according
      to existing page_mkwrite convention).
      
      In this window, the VM could write out the page, clearing page-dirty.  The
      filesystem has no good way to detect that a dirty pte is about to be
      attached, so it will happily write out the page, at which point, the
      filesystem may manipulate the metadata to reflect that the page is no
      longer dirty.
      
      It is not always possible to perform the required metadata manipulation in
      ->set_page_dirty, because that function cannot block or fail.  The
      filesystem may need to allocate some data structure, for example.
      
      And the VM cannot mark the pte dirty before page_mkwrite, because
      page_mkwrite is allowed to fail, so we must not allow any window where the
      page could be written to if page_mkwrite does fail.
      
      This solution of holding the page locked over the 3 critical operations
      (page_mkwrite, setting the pte dirty, and finally setting the page dirty)
      closes out races nicely, preventing page cleaning for writeout being
      initiated in that window.  This provides the filesystem with a strong
      synchronisation against the VM here.
      
      - Sage needs this race closed for ceph filesystem.
      - Trond for NFS (http://bugzilla.kernel.org/show_bug.cgi?id=12913).
      - I need it for fsblock.
      - I suspect other filesystems may need it too (eg. btrfs).
      - I have converted buffer.c to the new locking. Even simple block allocation
        under dirty pages might be susceptible to i_size changing under partial page
        at the end of file (we also have a buffer.c-side problem here, but it cannot
        be fixed properly without this patch).
      - Other filesystems (eg. NFS, maybe btrfs) will need to change their
        page_mkwrite functions themselves.
      
      [ This also moves page_mkwrite another step closer to fault, which should
        eventually allow page_mkwrite to be moved into ->fault, and thus avoiding a
        filesystem calldown and page lock/unlock cycle in __do_fault. ]
      
      [akpm@linux-foundation.org: fix derefs of NULL ->mapping]
      Cc: Sage Weil <sage@newdream.net>
      Cc: Trond Myklebust <trond.myklebust@fys.uio.no>
      Signed-off-by: NNick Piggin <npiggin@suse.de>
      Cc: Valdis Kletnieks <Valdis.Kletnieks@vt.edu>
      Cc: <stable@kernel.org>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      b827e496
  13. 01 5月, 2009 2 次提交
  14. 29 4月, 2009 1 次提交
  15. 28 4月, 2009 2 次提交
  16. 27 4月, 2009 4 次提交
  17. 25 4月, 2009 1 次提交
  18. 23 4月, 2009 1 次提交
  19. 22 4月, 2009 1 次提交
  20. 21 4月, 2009 2 次提交
  21. 19 4月, 2009 4 次提交
  22. 18 4月, 2009 3 次提交
  23. 17 4月, 2009 1 次提交
    • M
      Driver Core: early platform driver · 13977091
      Magnus Damm 提交于
      V3 of the early platform driver implementation.
      
      Platform drivers are great for embedded platforms because we can separate
      driver configuration from the actual driver.  So base addresses,
      interrupts and other configuration can be kept with the processor or board
      code, and the platform driver can be reused by many different platforms.
      
      For early devices we have nothing today.  For instance, to configure early
      timers and early serial ports we cannot use platform devices.  This
      because the setup order during boot.  Timers are needed before the
      platform driver core code is available.  The same goes for early printk
      support.  Early in this case means before initcalls.
      
      These early drivers today have their configuration either hard coded or
      they receive it using some special configuration method.  This is working
      quite well, but if we want to support both regular kernel modules and
      early devices then we need to have two ways of configuring the same
      driver.  A single way would be better.
      
      The early platform driver patch is basically a set of functions that allow
      drivers to register themselves and architecture code to locate them and
      probe.  Registration happens through early_param().  The time for the
      probe is decided by the architecture code.
      
      See Documentation/driver-model/platform.txt for more details.
      
      [akpm@linux-foundation.org: coding-style fixes]
      Signed-off-by: NMagnus Damm <damm@igel.co.jp>
      Cc: Paul Mundt <lethal@linux-sh.org>
      Cc: Kay Sievers <kay.sievers@vrfy.org>
      Cc: David Brownell <david-b@pacbell.net>
      Cc: Tejun Heo <htejun@gmail.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      13977091