1. 25 2月, 2013 1 次提交
    • M
      thinkpad-acpi: enable loading module with new B-series Lenovo BIOS · 16a3d9f5
      Manoj Iyer 提交于
      The new B series BIOS has version string 43CN46WW. The driver
      requires that 2nd and 3rd characters be 'E' and 'T' respectively,
      where as the newer BIOS has 'C' and 'N' respectively. Failing to
      load the module causes some of the hotkeys to not work.
      
      Before the patch
      ================
      sudo modprobe thinkpad_acpi
      FATAL: Error inserting thinkpad_acpi (/lib/modules/3.5.0-15-generic/kernel/drivers/platform/x86/thinkpad_acpi.ko): No such device
      
      After the patch
      ===============
      [44937.265438] thinkpad_acpi: ThinkPad ACPI Extras v0.24
      [44937.265445] thinkpad_acpi: http://ibm-acpi.sf.net/
      [44937.265449] thinkpad_acpi: ThinkPad BIOS 43CN46WW, EC unknown
      [44937.265453] thinkpad_acpi: Lenovo Lenovo B470e, model HuronRiver Platform
      [44937.266479] thinkpad_acpi: detected a 8-level brightness capable ThinkPad
      [44937.266557] thinkpad_acpi: Standard ACPI backlight interface available, not loading native one
      [44937.267846] thinkpad_acpi: Console audio control enabled, mode: monitor (read only)
      [44937.268131] input: ThinkPad Extra Buttons as /devices/platform/thinkpad_acpi/input/input17
      Signed-off-by: NManoj Iyer <manoj.iyer@canonical.com>
      Tested-by: NJames Ferguson <james.ferguson@canonical.com>
      Signed-off-by: NMatthew Garrett <matthew.garrett@nebula.com>
      16a3d9f5
  2. 04 1月, 2013 1 次提交
    • G
      Drivers: platform: x86: remove __dev* attributes. · b859f159
      Greg Kroah-Hartman 提交于
      CONFIG_HOTPLUG is going away as an option.  As a result, the __dev*
      markings need to be removed.
      
      This change removes the use of __devinit, __devexit_p, __devinitdata,
      __devinitconst, and __devexit from these drivers.
      
      Based on patches originally written by Bill Pemberton, but redone by me
      in order to handle some of the coding style issues better, by hand.
      
      Cc: Bill Pemberton <wfp5p@virginia.edu>
      Cc: Joey Lee <jlee@novell.com>
      Cc: Matthew Garrett <mjg@redhat.com>
      Cc: Peter Feuerer <peter@piie.net>
      Cc: Corentin Chary <corentin.chary@gmail.com>
      Cc: Cezary Jackiewicz <cezary.jackiewicz@gmail.com>
      Cc: Robert Gerlach <khnz@gmx.de>
      Cc: Ike Panhc <ike.pan@canonical.com>
      Cc: Henrique de Moraes Holschuh <ibm-acpi@hmh.eng.br>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      b859f159
  3. 29 12月, 2012 1 次提交
  4. 06 10月, 2012 1 次提交
  5. 14 9月, 2012 1 次提交
  6. 18 8月, 2012 1 次提交
    • M
      thinkpad-acpi: recognize latest V-Series using DMI_BIOS_VENDOR · a4f46bb9
      Manoj Iyer 提交于
      In the latest V-series bios DMI_PRODUCT_VERSION does not contain
      the string Lenovo or Thinkpad, but is set to the model number, this
      causes the thinkpad_acpi module to fail to load. Recognize laptop
      as Lenovo using DMI_BIOS_VENDOR instead, which is set to Lenovo.
      
      Test on V490u
      =============
      == After the patch ==
      
      [ 1350.295757] thinkpad_acpi: ThinkPad ACPI Extras v0.24
      [ 1350.295760] thinkpad_acpi: http://ibm-acpi.sf.net/
      [ 1350.295761] thinkpad_acpi: ThinkPad BIOS H7ET21WW (1.00 ), EC unknown
      [ 1350.295763] thinkpad_acpi: Lenovo LENOVO, model LV5DXXX
      [ 1350.296086] thinkpad_acpi: detected a 8-level brightness capable ThinkPad
      [ 1350.296694] thinkpad_acpi: radio switch found; radios are enabled
      [ 1350.296703] thinkpad_acpi: possible tablet mode switch found; ThinkPad in laptop mode
      [ 1350.306466] thinkpad_acpi: rfkill switch tpacpi_bluetooth_sw: radio is unblocked
      [ 1350.307082] Registered led device: tpacpi::thinklight
      [ 1350.307215] Registered led device: tpacpi::power
      [ 1350.307255] Registered led device: tpacpi::standby
      [ 1350.307294] Registered led device: tpacpi::thinkvantage
      [ 1350.308160] thinkpad_acpi: Standard ACPI backlight interface available, not loading native one
      [ 1350.308333] thinkpad_acpi: Console audio control enabled, mode: monitor (read only)
      [ 1350.312287] input: ThinkPad Extra Buttons as /devices/platform/thinkpad_acpi/input/input14
      
      == Before the patch ==
      sudo modprobe thinkpad_acpi
      FATAL: Error inserting thinkpad_acpi (/lib/modules/3.2.0-27-generic/kernel/drivers/platform/x86/thinkpad_acpi.ko): No such device
      
      Test on B485
      =============
      This patch was also test in a B485 where the thinkpad_acpi module does not
      have any issues loading. But, I tested it to make sure this patch does not
      break on already functioning models of Lenovo products.
      
      [13486.746359] thinkpad_acpi: ThinkPad ACPI Extras v0.24
      [13486.746364] thinkpad_acpi: http://ibm-acpi.sf.net/
      [13486.746368] thinkpad_acpi: ThinkPad BIOS HJET15WW(1.01), EC unknown
      [13486.746373] thinkpad_acpi: Lenovo Lenovo LB485, model 814TR01
      [13486.747300] thinkpad_acpi: detected a 8-level brightness capable ThinkPad
      [13486.752435] thinkpad_acpi: rfkill switch tpacpi_bluetooth_sw: radio is unblocked
      [13486.752883] Registered led device: tpacpi::thinklight
      [13486.752915] thinkpad_acpi: Standard ACPI backlight interface available, not loading native one
      [13486.753216] thinkpad_acpi: Console audio control enabled, mode: monitor (read only)
      [13486.757147] input: ThinkPad Extra Buttons as /devices/platform/thinkpad_acpi/input/input15
      Signed-off-by: NManoj Iyer <manoj.iyer@canonical.com>
      Signed-off-by: NMatthew Garrett <mjg@redhat.com>
      a4f46bb9
  7. 14 8月, 2012 1 次提交
    • T
      workqueue: use mod_delayed_work() instead of cancel + queue · 41f63c53
      Tejun Heo 提交于
      Convert delayed_work users doing cancel_delayed_work() followed by
      queue_delayed_work() to mod_delayed_work().
      
      Most conversions are straight-forward.  Ones worth mentioning are,
      
      * drivers/edac/edac_mc.c: edac_mc_workq_setup() converted to always
        use mod_delayed_work() and cancel loop in
        edac_mc_reset_delay_period() is dropped.
      
      * drivers/platform/x86/thinkpad_acpi.c: No need to remember whether
        watchdog is active or not.  @fan_watchdog_active and related code
        dropped.
      
      * drivers/power/charger-manager.c: Seemingly a lot of
        delayed_work_pending() abuse going on here.
        [delayed_]work_pending() are unsynchronized and racy when used like
        this.  I converted one instance in fullbatt_handler().  Please
        conver the rest so that it invokes workqueue APIs for the intended
        target state rather than trying to game work item pending state
        transitions.  e.g. if timer should be modified - call
        mod_delayed_work(), canceled - call cancel_delayed_work[_sync]().
      
      * drivers/thermal/thermal_sys.c: thermal_zone_device_set_polling()
        simplified.  Note that round_jiffies() calls in this function are
        meaningless.  round_jiffies() work on absolute jiffies not delta
        delay used by delayed_work.
      
      v2: Tomi pointed out that __cancel_delayed_work() users can't be
          safely converted to mod_delayed_work().  They could be calling it
          from irq context and if that happens while delayed_work_timer_fn()
          is running, it could deadlock.  __cancel_delayed_work() users are
          dropped.
      Signed-off-by: NTejun Heo <tj@kernel.org>
      Acked-by: NHenrique de Moraes Holschuh <hmh@hmh.eng.br>
      Acked-by: NDmitry Torokhov <dmitry.torokhov@gmail.com>
      Acked-by: NAnton Vorontsov <cbouatmailru@gmail.com>
      Acked-by: NDavid Howells <dhowells@redhat.com>
      Cc: Tomi Valkeinen <tomi.valkeinen@ti.com>
      Cc: Jens Axboe <axboe@kernel.dk>
      Cc: Jiri Kosina <jkosina@suse.cz>
      Cc: Doug Thompson <dougthompson@xmission.com>
      Cc: David Airlie <airlied@linux.ie>
      Cc: Roland Dreier <roland@kernel.org>
      Cc: "John W. Linville" <linville@tuxdriver.com>
      Cc: Zhang Rui <rui.zhang@intel.com>
      Cc: Len Brown <len.brown@intel.com>
      Cc: "J. Bruce Fields" <bfields@fieldses.org>
      Cc: Johannes Berg <johannes@sipsolutions.net>
      41f63c53
  8. 10 8月, 2012 1 次提交
  9. 28 7月, 2012 3 次提交
    • L
      thinkpad_acpi: Free hotkey_keycode_map after unregistering tpacpi_inputdev · 00d39597
      Li Dongyang 提交于
      We should free hotkey_keycode_map after unregistering tpacpi_inputdev, to aviod
      use after free like this:
      
      [   99.408388] =============================================================================
      [   99.408393] BUG kmalloc-64 (Not tainted): Poison overwritten
      [   99.408394] -----------------------------------------------------------------------------
      [   99.408394]
      [   99.408398] INFO: 0xf2751962-0xf2751995. First byte 0x98 instead of 0x6b
      [   99.408402] INFO: Allocated in 0xfdc88c28 age=79 cpu=0 pid=1329
      [   99.408407]  __slab_alloc.isra.50.constprop.56+0x49f/0x533
      [   99.408410]  kmem_cache_alloc_trace+0x10d/0x140
      [   99.408412]  0xfdc88c28
      [   99.408414]  0xfdc898cc
      [   99.408417]  do_one_initcall+0x112/0x160
      [   99.408420]  sys_init_module+0xe6d/0x1bc0
      [   99.408422]  sysenter_do_call+0x12/0x28
      [   99.408427] INFO: Freed in hotkey_exit+0x50/0xb0 [thinkpad_acpi] age=14 cpu=1 pid=1333
      [   99.408429]  __slab_free+0x3d/0x30b
      [   99.408431]  kfree+0x129/0x140
      [   99.408435]  hotkey_exit+0x50/0xb0 [thinkpad_acpi]
      [   99.408438]  ibm_exit+0xe3/0x1a0 [thinkpad_acpi]
      [   99.408441]  thinkpad_acpi_module_exit+0x35/0x208 [thinkpad_acpi]
      [   99.408443]  sys_delete_module+0x11f/0x280
      [   99.408445]  sysenter_do_call+0x12/0x28
      [   99.408447] INFO: Slab 0xf4d5ea20 objects=17 used=17 fp=0x  (null) flags=0x40000080
      [   99.408449] INFO: Object 0xf2751960 @offset=2400 fp=0xf2751780
      [   99.408449]
      [   99.408452] Bytes b4 f2751950: 64 02 00 00 ae ce fe ff 5a 5a 5a 5a 5a 5a 5a 5a  d.......ZZZZZZZZ
      [   99.408454] Object f2751960: 6b 6b 98 00 ec 00 8e 00 ee 00 6b 6b e3 00 bf 00 kk........kk....
      [   99.408456] Object f2751970: c2 00 6b 6b 6b 6b cd 00 6b 6b 6b 6b 6b 6b e1 00 ..kkkk..kkkkkk..
      [   99.408458] Object f2751980: e0 00 e4 00 6b 6b 74 01 73 00 72 00 71 00 94 00 ....kkt.s.r.q...
      [   99.408460] Object f2751990: 6b 6b 6b 6b f8 00 6b 6b 6b 6b 6b 6b 6b 6b 6b a5 kkkk..kkkkkkkkk.
      [   99.408462] Redzone f27519a0: bb bb bb bb ....
      Signed-off-by: NLi Dongyang <Jerry87905@gmail.com>
      Signed-off-by: NMatthew Garrett <mjg@redhat.com>
      00d39597
    • L
      thinkpad_acpi: Fix a memory leak during module exit · d2be15bd
      Li Dongyang 提交于
      We should free the thinkpad_id.nummodel_str during exit as it's allocated
      in get_thinkpad_module_data().
      Signed-off-by: NLi Dongyang <Jerry87905@gmail.com>
      Signed-off-by: NMatthew Garrett <mjg@redhat.com>
      d2be15bd
    • L
      thinkpad_acpi: Flush the workqueue before freeing tpacpi_leds · e03e389d
      Li Dongyang 提交于
      We init work_struct within tpacpi_leds, and we should free tpacpi_leds after
      the workqueue is empty, in case of the work_struct is referenced after free.
      
      This script could trigger the OOPS:
      
      #!/bin/sh
      
      while true
      do
          modprobe -r thinkpad_acpi
          modprobe thinkpad_acpi
      done
      
      And the OOPS looks like this:
      
      [   73.863557] BUG: unable to handle kernel paging request at 45440000
      [   73.863925] IP: [<c1051d65>] process_one_work+0x25/0x3b0
      [   73.864749] *pde = 00000000
      [   73.865571] Oops: 0000 [#1] PREEMPT SMP
      [   73.866443] Modules linked in: thinkpad_acpi(-) nvram netconsole configfs
      aes_i586 cryptd aes_generic joydev btusb bluetooth arc4 snd_hda_codec_analog
      iwl4965 uhci_hcd pcmcia microcode iwlegacy mac80211 cfg80211 firewire_ohci
      firewire_core kvm_intel kvm snd_hda_intel acpi_cpufreq mperf ehci_hcd yenta_socket
      pcmcia_rsrc crc_itu_t sr_mod snd_hda_codec processor pcmcia_core i2c_i801 usbcore
      lpc_ich cdrom serio_raw psmouse coretemp rfkill e1000e snd_pcm snd_page_alloc
      snd_hwdep snd_timer snd pcspkr evdev ac battery thermal soundcore usb_common
      intel_agp intel_gtt tp_smapi(O) thinkpad_ec(O) ext4 crc16 jbd2 mbcache sd_mod
      ata_piix ahci libahci libata scsi_mod nouveau button video mxm_wmi wmi
      i2c_algo_bit drm_kms_helper ttm drm agpgart i2c_core [last unloaded: nvram]
       [   73.866676]
       [   73.866676] Pid: 62, comm: kworker/u:4 Tainted: G           O 3.5.0-1-ARCH
       #1 LENOVO 7662CTO/7662CTO
       [   73.866676] EIP: 0060:[<c1051d65>] EFLAGS: 00010002 CPU: 1
       [   73.866676] EIP is at process_one_work+0x25/0x3b0
       [   73.866676] EAX: 45440065 EBX: f5545090 ECX: 00000088 EDX: 45440000
       [   73.866676] ESI: f568ff40 EDI: c164dd40 EBP: f5705f98 ESP: f5705f68
       [   73.866676]  DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068
       [   73.866676] CR0: 8005003b CR2: 45440000 CR3: 357ed000 CR4: 000007d0
       [   73.866676] DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
       [   73.866676] DR6: ffff0ff0 DR7: 00000400
       [   73.866676] Process kworker/u:4 (pid: 62, ti=f5704000 task=f5700540 task.ti=f5704000)
       [   73.866676] Stack:
       [   73.866676]  f56fbf24 00000001 f5705f78 c10683e0 c1294950 00000000 00000000 f568ff40
       [   73.866676]  00000000 f568ff40 f568ff50 c164dd40 f5705fb8 c1052589 c1060c7e c15b9300
       [   73.866676]  c164dd40 00000000 f568ff40 c1052490 f5705fe4 c10570b2 00000000 f568ff40
       [   73.866676] Call Trace:
       [   73.866676]  [<c10683e0>] ? default_wake_function+0x10/0x20
       [   73.866676]  [<c1294950>] ? dev_get_drvdata+0x20/0x20
       [   73.866676]  [<c1052589>] worker_thread+0xf9/0x280
       [   73.866676]  [<c1060c7e>] ? complete+0x4e/0x60
       [   73.866676]  [<c1052490>] ? manage_workers.isra.24+0x1c0/0x1c0
       [   73.866676]  [<c10570b2>] kthread+0x72/0x80
       [   73.866676]  [<c1057040>] ? kthread_freezable_should_stop+0x50/0x50
       [   73.866676]  [<c13c20fe>] kernel_thread_helper+0x6/0x10
       [   73.866676] Code: bc 27 00 00 00 00 55 89 e5 57 56 53 83 ec 24 3e 8d 74 26
       00 89 c6 8b 02 89 d3 c7 45 f0 00 00 00 00 89 c2 30 d2 a8 04 0f 44 55 f0 <8b> 02 89 55 f0 89 da c1 ea
       0a 89 45 ec 89 d8 8b 4d ec c1 e8 04
       [   73.866676] EIP: [<c1051d65>] process_one_work+0x25/0x3b0 SS:ESP 0068:f5705f68
       [   73.866676] CR2: 0000000045440000
       [   73.866676] ---[ end trace 4d8a1887edca08c5 ]---
       [   73.866676] note: kworker/u:4[62] exited with preempt_count 1
      Signed-off-by: NLi Dongyang <Jerry87905@gmail.com>
      Signed-off-by: NMatthew Garrett <mjg@redhat.com>
      e03e389d
  10. 01 7月, 2012 2 次提交
  11. 01 6月, 2012 1 次提交
  12. 27 3月, 2012 1 次提交
  13. 13 1月, 2012 1 次提交
  14. 04 1月, 2012 1 次提交
  15. 22 11月, 2011 1 次提交
    • T
      freezer: implement and use kthread_freezable_should_stop() · 8a32c441
      Tejun Heo 提交于
      Writeback and thinkpad_acpi have been using thaw_process() to prevent
      deadlock between the freezer and kthread_stop(); unfortunately, this
      is inherently racy - nothing prevents freezing from happening between
      thaw_process() and kthread_stop().
      
      This patch implements kthread_freezable_should_stop() which enters
      refrigerator if necessary but is guaranteed to return if
      kthread_stop() is invoked.  Both thaw_process() users are converted to
      use the new function.
      
      Note that this deadlock condition exists for many of freezable
      kthreads.  They need to be converted to use the new should_stop or
      freezable workqueue.
      
      Tested with synthetic test case.
      Signed-off-by: NTejun Heo <tj@kernel.org>
      Acked-by: NHenrique de Moraes Holschuh <ibm-acpi@hmh.eng.br>
      Cc: Jens Axboe <axboe@kernel.dk>
      Cc: Oleg Nesterov <oleg@redhat.com>
      8a32c441
  16. 07 10月, 2011 1 次提交
  17. 06 8月, 2011 1 次提交
  18. 07 7月, 2011 2 次提交
  19. 28 5月, 2011 2 次提交
  20. 09 5月, 2011 1 次提交
  21. 12 4月, 2011 1 次提交
    • K
      thinkpad-acpi fails to load with newer Thinkpad X201s BIOS · b569ab39
      Keith Packard 提交于
      The new BIOS has a slightly different EC version string.
      
      From a1541710300b083a1a9acff2890d721d15ede62b Mon Sep 17 00:00:00 2001
      From: Keith Packard <keithp@keithp.com>
      Date: Sun, 13 Mar 2011 23:46:22 -0700
      Subject: [PATCH] thinkpad-acpi: Some BIOS versions don't end in WW, remove check
      
      My X201s BIOS version string is 6QET46V1 (1.16 ). The
      EC version string is 6QHT28WW-1.09. The driver was requiring that both
      of these have 'WW' in positions 6 and 7. I don't know what the
      significance of having 'V1' there instead is, but removing the test
      makes the driver load on my machine.
      Signed-off-by: NKeith Packard <keithp@keithp.com>
      Signed-off-by: NMatthew Garrett <mjg@redhat.com>
      b569ab39
  22. 28 3月, 2011 1 次提交
  23. 23 3月, 2011 1 次提交
  24. 22 2月, 2011 1 次提交
  25. 08 1月, 2011 2 次提交
  26. 25 11月, 2010 1 次提交
  27. 16 11月, 2010 1 次提交
  28. 02 11月, 2010 1 次提交
  29. 24 9月, 2010 1 次提交
  30. 16 8月, 2010 5 次提交