1. 16 2月, 2014 1 次提交
    • Z
      firmware: give a protection when map page failed · 2b1278cb
      zhang jun 提交于
      so, we need give a protection and return a error value.
      [ 7341.474236] [drm:do_intel_finish_page_flip] *ERROR* invalid or inactive unpin_work!
      [ 7341.494464] atomisp-css2400b0_v21 0000:00:03.0: unhandled css stored event: 0x20
      [ 7341.503627] vmap allocation for size 208896 failed: use vmalloc=<size> to increase size.<=================== map failed
      [ 7341.507135] [drm:do_intel_finish_page_flip] *ERROR* invalid or inactive unpin_work!
      [ 7341.503848] BUG: unable to handle kernel NULL pointer dereference at   (null)
      [ 7341.520394] IP: [<c18f5c1b>] sst_load_all_modules_elf+0x1bb/0x850
      [ 7341.527216] *pdpt = 0000000030dfe001 *pde = 0000000000000000
      [ 7341.533640] Oops: 0000 [#1] PREEMPT SMP
      [ 7341.540360] [drm:do_intel_finish_page_flip] *ERROR* invalid or inactive unpin_work!
      [ 7341.538037] Modules linked in: atomisp_css2400b0_v21 lm3554 ov2722 imx1x5 atmel_mxt_ts vxd392 videobuf_vmalloc videobuf_core lm_dump(O) bcm_bt_lpm hdmi_audio bcm4334x(O)
      [ 7341.563531] CPU: 1 PID: 525 Comm: mediaserver Tainted: G        W  O 3.10.20-262518-ga83c053 #1
      [ 7341.573253] task: f0994ec0 ti: f09f0000 task.ti: f09f0000
      [ 7341.579284] EIP: 0060:[<c18f5c1b>] EFLAGS: 00010246 CPU: 1
      [ 7341.585415] EIP is at sst_load_all_modules_elf+0x1bb/0x850
      [ 7341.591541] EAX: 00000000 EBX: e3595ba0 ECX: 00000000 EDX: 00031c1c
      [ 7341.598541] ESI: e04a0000 EDI: 00000000 EBP: f09f1d80 ESP: f09f1cf4
      [ 7341.605542]  DS: 007b ES: 007b FS: 00d8 GS: 003b SS: 0068
      [ 7341.611573] CR0: 80050033 CR2: 00000000 CR3: 30db4000 CR4: 001007f0
      [ 7341.618573] DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
      [ 7341.625575] DR6: ffff0ff0 DR7: 00000400
      [ 7341.629856] Stack:
      [ 7341.632097]  f09f1d57 00000019 c1d656d7 c1d658d3 c1d56409 00000f28 c1d64af9 18000103
      [ 7341.640766]  01000001 00080000 c1f910a0 f326f4c8 00000034 f326f520 00000002 e04a02bc
      [ 7341.649465]  00000001 f326e014 c1f910b0 e04a0000 c0080100 00031c1c e3595ba0 c0080100
      [ 7341.658149] Call Trace:
      [ 7341.660888]  [<c18f6308>] sst_post_download_byt+0x58/0xb0
      [ 7341.666925]  [<c18f4fbc>] sst_load_fw+0xdc/0x510
      [ 7341.672086]  [<c1a7b2c0>] ? __mutex_lock_slowpath+0x250/0x370
      [ 7341.678507]  [<c1a80e05>] ? sub_preempt_count+0x55/0xe0
      [ 7341.684346]  [<c18f1294>] sst_download_fw+0x14/0x60
      [ 7341.689796]  [<c1a7b403>] ? mutex_lock+0x23/0x30
      [ 7341.694954]  [<c18f191c>] intel_sst_check_device+0x6c/0x120
      [ 7341.701181]  [<c18f1d08>] sst_set_generic_params+0x1b8/0x4a0
      [ 7341.707504]  [<c1a80e05>] ? sub_preempt_count+0x55/0xe0
      [ 7341.713341]  [<c1a80e05>] ? sub_preempt_count+0x55/0xe0
      [ 7341.719178]  [<c1a7b2c0>] ? __mutex_lock_slowpath+0x250/0x370
      [ 7341.725600]  [<c1320d84>] ? __kmalloc_track_caller+0xe4/0x1d0
      [ 7341.732022]  [<c18e35f5>] sst_set_mixer_param+0x25/0x40
      [ 7341.737859]  [<c18e3853>] lpe_mixer_ihf_set+0xb3/0x160
      [ 7341.743602]  [<c1855b99>] snd_ctl_ioctl+0xa89/0xb40
      [ 7341.749052]  [<c1331e65>] ? path_openat+0xa5/0x3d0
      [ 7341.754409]  [<c1447857>] ? avc_has_perm_flags+0xc7/0x170
      [ 7341.760441]  [<c1855110>] ? snd_ctl_elem_add_user+0x540/0x540
      [ 7341.766862]  [<c1334047>] do_vfs_ioctl+0x77/0x5e0
      [ 7341.772117]  [<c144842a>] ? inode_has_perm.isra.42.constprop.79+0x3a/0x50
      [ 7341.779705]  [<c14490a0>] ? file_has_perm+0xa0/0xb0
      [ 7341.785155]  [<c14493b8>] ? selinux_file_ioctl+0x48/0xe0
      [ 7341.791090]  [<c1334628>] SyS_ioctl+0x78/0x90
      [ 7341.795958]  [<c1a7dde8>] syscall_call+0x7/0xb
      [ 7341.800925]  [<c1a70000>] ? mm_fault_error+0x13c/0x198
      Signed-off-by: Nzhang jun <jun.zhang@intel.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      2b1278cb
  2. 09 1月, 2014 2 次提交
  3. 09 12月, 2013 3 次提交
  4. 27 9月, 2013 1 次提交
  5. 31 8月, 2013 1 次提交
    • M
      firmware loader: fix pending_fw_head list corruption · 1eeeef15
      Maxime Bizon 提交于
      Got the following oops just before reboot:
      
      Unable to handle kernel NULL pointer dereference at virtual address 00000000
      [<8028d300>] (__list_del_entry+0x44/0xac)
      [<802e3320>] (__fw_load_abort.part.13+0x1c/0x50)
      [<802e337c>] (fw_shutdown_notify+0x28/0x50)
      [<80034f80>] (notifier_call_chain.isra.1+0x5c/0x9c)
      [<800350ec>] (__blocking_notifier_call_chain+0x44/0x58)
      [<80035114>] (blocking_notifier_call_chain+0x14/0x18)
      [<80035d64>] (kernel_restart_prepare+0x14/0x38)
      [<80035d94>] (kernel_restart+0xc/0x50)
      
      The following race condition triggers here:
      
        _request_firmware_load()
        device_create_file(...)
        kobject_uevent(...)
        (schedule)
                                             (resume)
                                             firmware_loading_store(1)
                                             firmware_loading_store(0)
                                             list_del_init(&buf->pending_list)
                                             (schedule)
        (resume)
        list_add(&buf->pending_list, &pending_fw_head);
        wait_for_completion(&buf->completion);
      
      causing an oops later when walking pending_list after the firmware has
      been released.
      
      The proposed fix is to move the list_add() before sysfs attribute
      creation.
      Signed-off-by: NMaxime Bizon <mbizon@freebox.fr>
      Acked-by: NMing Lei <ming.lei@canonical.com>
      Cc: stable <stable@vger.kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      1eeeef15
  6. 24 8月, 2013 1 次提交
  7. 26 6月, 2013 1 次提交
  8. 22 6月, 2013 1 次提交
  9. 19 6月, 2013 1 次提交
  10. 07 6月, 2013 3 次提交
  11. 05 6月, 2013 1 次提交
  12. 04 6月, 2013 4 次提交
  13. 26 2月, 2013 1 次提交
  14. 04 2月, 2013 4 次提交
  15. 17 1月, 2013 1 次提交
    • L
      firmware: make sure the fw file size is not 0 · 4adf07fb
      Luciano Coelho 提交于
      If the requested firmware file size is 0 bytes in the filesytem, we
      will try to vmalloc(0), which causes a warning:
      
        vmalloc: allocation failure: 0 bytes
        kworker/1:1: page allocation failure: order:0, mode:0xd2
          __vmalloc_node_range+0x164/0x208
          __vmalloc_node+0x4c/0x58
          vmalloc+0x38/0x44
          _request_firmware_load+0x220/0x6b0
          request_firmware+0x64/0xc8
          wl18xx_setup+0xb4/0x570 [wl18xx]
          wlcore_nvs_cb+0x64/0x9f8 [wlcore]
          request_firmware_work_func+0x94/0x100
          process_one_work+0x1d0/0x750
          worker_thread+0x184/0x4ac
          kthread+0xb4/0xc0
      
      To fix this, check whether the file size is less than or equal to zero
      in fw_read_file_contents().
      
      Cc: stable <stable@vger.kernel.org> [3.7]
      Signed-off-by: NLuciano Coelho <coelho@ti.com>
      Acked-by: NMing Lei <ming.lei@canonical.com>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      4adf07fb
  16. 15 11月, 2012 5 次提交
  17. 29 10月, 2012 1 次提交
  18. 22 10月, 2012 4 次提交
  19. 05 10月, 2012 1 次提交
  20. 04 10月, 2012 1 次提交
    • L
      firmware: teach the kernel to load firmware files directly from the filesystem · abb139e7
      Linus Torvalds 提交于
      This is a first step in allowing people to by-pass udev for loading
      device firmware.  Current versions of udev will deadlock (causing us to
      block for the 30 second timeout) under some circumstances if the
      firmware is loaded as part of the module initialization path, and this
      is causing problems for media drivers in particular.
      
      The current patch hardcodes the firmware path that udev uses by default,
      and will fall back to the legacy udev mode if the firmware cannot be
      found there.  We'd like to add support for both configuring the paths
      and the fallback behaviour, but in the meantime this hopefully fixes the
      immediate problem, while also giving us a way forward.
      
      [ v2: Some VFS layer interface cleanups suggested by Al Viro ]
      [ v3: use the default udev paths suggested by Kay Sievers ]
      Suggested-by: NIvan Kalvachev <ikalvachev@gmail.com>
      Acked-by: NGreg KH <gregkh@linuxfoundation.org>
      Acked-by: NAl Viro <viro@zeniv.linux.org.uk>
      Cc: Mauro Carvalho Chehab <mchehab@redhat.com>
      Cc: Kay Sievers <kay@redhat.com>
      Cc: Ming Lei <ming.lei@canonical.com>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      abb139e7
  21. 11 9月, 2012 1 次提交
  22. 07 9月, 2012 1 次提交
    • M
      firmware loader: let caching firmware piggyback on loading firmware · ac39b3ea
      Ming Lei 提交于
      After starting caching firmware, there is still some time left
      before devices are suspended, during the period, request_firmware
      or its nowait version may still be triggered by the below situations
      to load firmware images which can't be cached during suspend/resume
      cycle.
      
      	- new devices added
      	- driver bind
      	- or device open kind of things
      
      This patch utilizes the piggyback trick to cache firmware for
      this kind of situation: just increase the firmware buf's reference
      count and add the fw name entry into cache entry list after starting
      caching firmware and before syscore_suspend() is called.
      Signed-off-by: NMing Lei <ming.lei@canonical.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      ac39b3ea