1. 10 8月, 2017 1 次提交
  2. 25 5月, 2017 2 次提交
  3. 17 3月, 2017 1 次提交
  4. 15 2月, 2017 2 次提交
  5. 31 1月, 2017 1 次提交
  6. 20 1月, 2017 10 次提交
  7. 19 1月, 2017 2 次提交
  8. 11 1月, 2017 5 次提交
  9. 25 12月, 2016 1 次提交
  10. 06 12月, 2016 1 次提交
    • V
      hv: change clockevents unbind tactics · 6ffc4b85
      Vitaly Kuznetsov 提交于
      To get prepared to CPU offlining support we need co change the way how we
      unbind clockevent devices. As one CPU may go online/offline multiple times
      we need to bind it in hv_synic_init() and unbind it in hv_synic_cleanup().
      There is an additional corner case: when we unload the module completely we
      need to switch to some other clockevent mechanism before stopping VMBus or
      we will hang. We can't call hv_synic_cleanup() before unloading VMBus as
      we won't be able to send UNLOAD request and get a response so
      hv_synic_clockevents_cleanup() has to live. Luckily, we can always call
      clockevents_unbind_device(), even if it wasn't bound before and there is
      no issue if we call it twice.
      Signed-off-by: NVitaly Kuznetsov <vkuznets@redhat.com>
      Signed-off-by: NK. Y. Srinivasan <kys@microsoft.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      6ffc4b85
  11. 31 8月, 2016 1 次提交
  12. 02 3月, 2016 1 次提交
  13. 08 2月, 2016 2 次提交
  14. 15 12月, 2015 3 次提交
  15. 06 8月, 2015 3 次提交
  16. 05 8月, 2015 2 次提交
  17. 02 3月, 2015 2 次提交
    • V
      Drivers: hv: vmbus: Teardown clockevent devices on module unload · e086748c
      Vitaly Kuznetsov 提交于
      Newly introduced clockevent devices made it impossible to unload hv_vmbus
      module as clockevents_config_and_register() takes additional reverence to
      the module. To make it possible again we do the following:
      - avoid setting dev->owner for clockevent devices;
      - implement hv_synic_clockevents_cleanup() doing clockevents_unbind_device();
      - call it from vmbus_exit().
      
      In theory hv_synic_clockevents_cleanup() can be merged with hv_synic_cleanup(),
      however, we call hv_synic_cleanup() from smp_call_function_single() and this
      doesn't work for clockevents_unbind_device() as it does such call on its own. I
      opted for a separate function.
      Signed-off-by: NVitaly Kuznetsov <vkuznets@redhat.com>
      Signed-off-by: NK. Y. Srinivasan <kys@microsoft.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e086748c
    • V
      drivers: hv: vmbus: Teardown synthetic interrupt controllers on module unload · e72e7ac5
      Vitaly Kuznetsov 提交于
      SynIC has to be switched off when we unload the module, otherwise registered
      memory pages can get corrupted after (as Hyper-V host still writes there) and
      we see the following crashes for random processes:
      
      [   89.116774] BUG: Bad page map in process sh  pte:4989c716 pmd:36f81067
      [   89.159454] addr:0000000000437000 vm_flags:00000875 anon_vma:          (null) mapping:ffff88007bba55a0 index:37
      [   89.226146] vma->vm_ops->fault: filemap_fault+0x0/0x410
      [   89.257776] vma->vm_file->f_op->mmap: generic_file_mmap+0x0/0x60
      [   89.297570] CPU: 0 PID: 215 Comm: sh Tainted: G    B          3.19.0-rc5_bug923184+ #488
      [   89.353738] Hardware name: Microsoft Corporation Virtual Machine/Virtual Machine, BIOS 090006  05/23/2012
      [   89.409138]  0000000000000000 000000004e083d7b ffff880036e9fa18 ffffffff81a68d31
      [   89.468724]  0000000000000000 0000000000437000 ffff880036e9fa68 ffffffff811a1e3a
      [   89.519233]  000000004989c716 0000000000000037 ffffea0001edc340 0000000000437000
      [   89.575751] Call Trace:
      [   89.591060]  [<ffffffff81a68d31>] dump_stack+0x45/0x57
      [   89.625164]  [<ffffffff811a1e3a>] print_bad_pte+0x1aa/0x250
      [   89.667234]  [<ffffffff811a2c95>] vm_normal_page+0x55/0xa0
      [   89.703818]  [<ffffffff811a3105>] unmap_page_range+0x425/0x8a0
      [   89.737982]  [<ffffffff811a3601>] unmap_single_vma+0x81/0xf0
      [   89.780385]  [<ffffffff81184320>] ? lru_deactivate_fn+0x190/0x190
      [   89.820130]  [<ffffffff811a4131>] unmap_vmas+0x51/0xa0
      [   89.860168]  [<ffffffff811ad12c>] exit_mmap+0xac/0x1a0
      [   89.890588]  [<ffffffff810763c3>] mmput+0x63/0x100
      [   89.919205]  [<ffffffff811eba48>] flush_old_exec+0x3f8/0x8b0
      [   89.962135]  [<ffffffff8123b5bb>] load_elf_binary+0x32b/0x1260
      [   89.998581]  [<ffffffff811a14f2>] ? get_user_pages+0x52/0x60
      
      hv_synic_cleanup() function exists but noone calls it now. Do the following:
      - call hv_synic_cleanup() on each cpu from vmbus_exit();
      - write global disable bit through MSR;
      - use hv_synic_free_cpu() to avoid memory leask and code duplication.
      Signed-off-by: NVitaly Kuznetsov <vkuznets@redhat.com>
      Signed-off-by: NK. Y. Srinivasan <kys@microsoft.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e72e7ac5