1. 04 Oct, 2016 33 commits
  2. 29 Sep, 2016 7 commits
    • Anton Blanchard's avatar
      powerpc/vdso64: Use double word compare on pointers · 5045ea37
      Anton Blanchard authored
      __kernel_get_syscall_map() and __kernel_clock_getres() use cmpli to
      check if the passed in pointer is non zero. cmpli maps to a 32 bit
      compare on binutils, so we ignore the top 32 bits.
      
      A simple test case can be created by passing in a bogus pointer with
      the bottom 32 bits clear. Using a clk_id that is handled by the VDSO,
      then one that is handled by the kernel shows the problem:
      
        printf("%d\n", clock_getres(CLOCK_REALTIME, (void *)0x100000000));
        printf("%d\n", clock_getres(CLOCK_BOOTTIME, (void *)0x100000000));
      
      And we get:
      
        0
        -1
      
      The bigger issue is if we pass a valid pointer with the bottom 32 bits
      clear, in this case we will return success but won't write any data
      to the pointer.
      
      I stumbled across this issue because the LLVM integrated assembler
      doesn't accept cmpli with 3 arguments. Fix this by converting them to
      cmpldi.
      
      Fixes: a7f290da ("[PATCH] powerpc: Merge vdso's and add vdso support to 32 bits kernel")
      Cc: stable@vger.kernel.org # v2.6.15+
      Signed-off-by: default avatarAnton Blanchard <anton@samba.org>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      5045ea37
    • Balbir Singh's avatar
      KVM: PPC: Book3S HV: Migrate pinned pages out of CMA · 2e5bbb54
      Balbir Singh authored
      When PCI Device pass-through is enabled via VFIO, KVM-PPC will
      pin pages using get_user_pages_fast(). One of the downsides of
      the pinning is that the page could be in CMA region. The CMA
      region is used for other allocations like the hash page table.
      Ideally we want the pinned pages to be from non CMA region.
      
      This patch (currently only for KVM PPC with VFIO) forcefully
      migrates the pages out (huge pages are omitted for the moment).
      There are more efficient ways of doing this, but that might
      be elaborate and might impact a larger audience beyond just
      the kvm ppc implementation.
      
      The magic is in new_iommu_non_cma_page() which allocates the
      new page from a non CMA region.
      
      I've tested the patches lightly at my end. The full solution
      requires migration of THP pages in the CMA region. That work
      will be done incrementally on top of this.
      Signed-off-by: default avatarBalbir Singh <bsingharora@gmail.com>
      Acked-by: default avatarAlexey Kardashevskiy <aik@ozlabs.ru>
      [mpe: Merged via powerpc tree as that's where the changes are]
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      2e5bbb54
    • Gavin Shan's avatar
      drivers/pci/hotplug: Support surprise hotplug in powernv driver · 360aebd8
      Gavin Shan authored
      This supports PCI surprise hotplug. The design is highlighted as
      below:
      
         * The PCI slot's surprise hotplug capability is exposed through
           device node property "ibm,slot-surprise-pluggable", meaning
           PCI surprise hotplug will be disabled if skiboot doesn't support
           it yet.
         * The interrupt because of presence or link state change is raised
           on surprise hotplug event. One event is allocated and queued to
           the PCI slot for workqueue to pick it up and process in serialized
           fashion. The code flow for surprise hotplug is same to that for
           managed hotplug except: the affected PEs are put into frozen state
           to avoid unexpected EEH error reporting in surprise hot remove path.
      Signed-off-by: default avatarGavin Shan <gwshan@linux.vnet.ibm.com>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      360aebd8
    • Gavin Shan's avatar
      drivers/pci/hotplug: Remove likely() and unlikely() in powernv driver · 149ba66a
      Gavin Shan authored
      This removes likely() and unlikely() in pnv_php.c as the code isn't
      running in hot path. Those macros to affect CPU's branch stream don't
      help a lot for performance. I used them to identify the cases are
      likely or unlikely to happen. No logical changes introduced.
      Signed-off-by: default avatarGavin Shan <gwshan@linux.vnet.ibm.com>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      149ba66a
    • Gavin Shan's avatar
      powerpc/powernv: Unfreeze PE on allocation · 313483dd
      Gavin Shan authored
      This unfreezes PE when it's initialized because the PE might be put
      into frozen state in the last hot remove path. It's not harmful to
      do so if the PE is already in unfrozen state.
      Signed-off-by: default avatarGavin Shan <gwshan@linux.vnet.ibm.com>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      313483dd
    • Gavin Shan's avatar
      powerpc/eeh: Export eeh_pe_state_mark() · e0056b0a
      Gavin Shan authored
      This exports eeh_pe_state_mark(). It will be used to mark the surprise
      hot removed PE as isolated to avoid unexpected EEH error reporting in
      surprise remove path.
      Signed-off-by: default avatarGavin Shan <gwshan@linux.vnet.ibm.com>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      e0056b0a
    • Gavin Shan's avatar
      powerpc/eeh: Export confirm_error_lock · 35066c0d
      Gavin Shan authored
      This exports @confirm_error_lock so that eeh_serialize_{lock, unlock}()
      can be used to freeze the affected PE in PCI surprise hot remove path.
      Signed-off-by: default avatarGavin Shan <gwshan@linux.vnet.ibm.com>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      35066c0d