]> Git Repo - linux.git/commitdiff
Merge tag 'drm-amdkfd-next-2018-05-14' of git://people.freedesktop.org/~gabbayo/linux...
authorDave Airlie <[email protected]>
Tue, 15 May 2018 05:59:10 +0000 (15:59 +1000)
committerDave Airlie <[email protected]>
Tue, 15 May 2018 06:06:08 +0000 (16:06 +1000)
This is amdkfd pull for 4.18. The major new features are:

- Add support for GFXv9 dGPUs (VEGA)
- Add support for userptr memory mapping

In addition, there are a couple of small fixes and improvements, such as:
- Fix lock handling
- Fix rollback packet in kernel kfd_queue
- Optimize kfd signal handling
- Fix CP hang in APU

Signed-off-by: Dave Airlie <[email protected]>
Link: https://patchwork.freedesktop.org/patch/msgid/20180514070126.GA1827@odedg-x270
1  2 
MAINTAINERS
drivers/gpu/drm/amd/amdkfd/kfd_chardev.c

diff --combined MAINTAINERS
index 8daa96a99eac46837d920ba367c812252d2ba7bc,051f2fee58f96e9c50f701f9809bb1c7e15ac77c..ac1215a5561e59a27537c204ca5f763703688630
@@@ -564,9 -564,8 +564,9 @@@ S: Maintaine
  F:    drivers/media/dvb-frontends/af9033*
  
  AFFS FILE SYSTEM
 +M:    David Sterba <[email protected]>
  L:    [email protected]
 -S:    Orphan
 +S:    Odd Fixes
  F:    Documentation/filesystems/affs.txt
  F:    fs/affs/
  
@@@ -767,12 -766,14 +767,14 @@@ F:      drivers/gpu/drm/amd/amdgpu/amdgpu_am
  F:    drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
  F:    drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c
  F:    drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c
+ F:    drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c
  F:    drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_fence.c
  F:    drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
  F:    drivers/gpu/drm/amd/amdkfd/
  F:    drivers/gpu/drm/amd/include/cik_structs.h
  F:    drivers/gpu/drm/amd/include/kgd_kfd_interface.h
  F:    drivers/gpu/drm/amd/include/vi_structs.h
+ F:    drivers/gpu/drm/amd/include/v9_structs.h
  F:    include/uapi/linux/kfd_ioctl.h
  
  AMD SEATTLE DEVICE TREE SUPPORT
@@@ -906,8 -907,6 +908,8 @@@ ANDROID ION DRIVE
  M:    Laura Abbott <[email protected]>
  M:    Sumit Semwal <[email protected]>
  L:    [email protected]
 +L:    [email protected]
 +L:    [email protected] (moderated for non-subscribers)
  S:    Supported
  F:    drivers/staging/android/ion
  F:    drivers/staging/android/uapi/ion.h
@@@ -1211,6 -1210,7 +1213,6 @@@ F:      drivers/*/*alpine
  ARM/ARTPEC MACHINE SUPPORT
  M:    Jesper Nilsson <[email protected]>
  M:    Lars Persson <[email protected]>
 -M:    Niklas Cassel <[email protected]>
  S:    Maintained
  L:    [email protected]
  F:    arch/arm/mach-artpec
@@@ -2619,7 -2619,7 +2621,7 @@@ S:      Maintaine
  F:    drivers/net/hamradio/baycom*
  
  BCACHE (BLOCK LAYER CACHE)
 -M:    Michael Lyle <[email protected]>
 +M:    Coly Li <[email protected]>
  M:    Kent Overstreet <[email protected]>
  L:    [email protected]
  W:    http://bcache.evilpiepirate.org
@@@ -4830,15 -4830,6 +4832,15 @@@ S:    Maintaine
  F:    drivers/gpu/drm/tinydrm/
  F:    include/drm/tinydrm/
  
 +DRM DRIVERS FOR XEN
 +M:    Oleksandr Andrushchenko <[email protected]>
 +T:    git git://anongit.freedesktop.org/drm/drm-misc
 +L:    [email protected]
 +L:    [email protected]
 +S:    Supported
 +F:    drivers/gpu/drm/xen/
 +F:    Documentation/gpu/xen-front.rst
 +
  DRM TTM SUBSYSTEM
  M:    Christian Koenig <[email protected]>
  M:    Roger He <[email protected]>
@@@ -7422,6 -7413,16 +7424,6 @@@ S:     Obsolet
  F:    include/uapi/linux/ipx.h
  F:    drivers/staging/ipx/
  
 -IRDA SUBSYSTEM
 -M:    Samuel Ortiz <[email protected]>
 -L:    [email protected] (subscribers-only)
 -L:    [email protected]
 -W:    http://irda.sourceforge.net/
 -S:    Obsolete
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/sameo/irda-2.6.git
 -F:    Documentation/networking/irda.txt
 -F:    drivers/staging/irda/
 -
  IRQ DOMAINS (IRQ NUMBER MAPPING LIBRARY)
  M:    Marc Zyngier <[email protected]>
  S:    Maintained
@@@ -7754,7 -7755,7 +7756,7 @@@ F:      arch/x86/include/asm/svm.
  F:    arch/x86/kvm/svm.c
  
  KERNEL VIRTUAL MACHINE FOR ARM (KVM/arm)
 -M:    Christoffer Dall <christoffer.dall@linaro.org>
 +M:    Christoffer Dall <christoffer.dall@arm.com>
  M:    Marc Zyngier <[email protected]>
  L:    [email protected] (moderated for non-subscribers)
  L:    [email protected]
@@@ -7768,7 -7769,7 +7770,7 @@@ F:      virt/kvm/arm
  F:    include/kvm/arm_*
  
  KERNEL VIRTUAL MACHINE FOR ARM64 (KVM/arm64)
 -M:    Christoffer Dall <christoffer.dall@linaro.org>
 +M:    Christoffer Dall <christoffer.dall@arm.com>
  M:    Marc Zyngier <[email protected]>
  L:    [email protected] (moderated for non-subscribers)
  L:    [email protected]
@@@ -10910,6 -10911,7 +10912,6 @@@ F:   drivers/pci/host
  F:    drivers/pci/dwc/
  
  PCIE DRIVER FOR AXIS ARTPEC
 -M:    Niklas Cassel <[email protected]>
  M:    Jesper Nilsson <[email protected]>
  L:    [email protected]
  L:    [email protected]
@@@ -13965,7 -13967,7 +13967,7 @@@ THUNDERBOLT DRIVE
  M:    Andreas Noever <[email protected]>
  M:    Michael Jamet <[email protected]>
  M:    Mika Westerberg <[email protected]>
 -M:    Yehezkel Bernat <yehezkel.bernat@intel.com>
 +M:    Yehezkel Bernat <YehezkelShB@gmail.com>
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/westeri/thunderbolt.git
  S:    Maintained
  F:    Documentation/admin-guide/thunderbolt.rst
@@@ -13975,7 -13977,7 +13977,7 @@@ F:   include/linux/thunderbolt.
  THUNDERBOLT NETWORK DRIVER
  M:    Michael Jamet <[email protected]>
  M:    Mika Westerberg <[email protected]>
 -M:    Yehezkel Bernat <yehezkel.bernat@intel.com>
 +M:    Yehezkel Bernat <YehezkelShB@gmail.com>
  L:    [email protected]
  S:    Maintained
  F:    drivers/net/thunderbolt.c
index 59808a39ecf4afb98587369384111948b4997adc,beaa613c22f4c446b2777b71e0b2626725c1ce3e..f64c5551cdba05f00e149a50f7e104735a3b3fd1
@@@ -233,7 -233,7 +233,7 @@@ static int set_queue_properties_from_us
        pr_debug("Queue Size: 0x%llX, %u\n",
                        q_properties->queue_size, args->ring_size);
  
-       pr_debug("Queue r/w Pointers: %p, %p\n",
+       pr_debug("Queue r/w Pointers: %px, %px\n",
                        q_properties->read_ptr,
                        q_properties->write_ptr);
  
@@@ -292,8 -292,16 +292,16 @@@ static int kfd_ioctl_create_queue(struc
  
  
        /* Return gpu_id as doorbell offset for mmap usage */
-       args->doorbell_offset = (KFD_MMAP_DOORBELL_MASK | args->gpu_id);
+       args->doorbell_offset = KFD_MMAP_TYPE_DOORBELL;
+       args->doorbell_offset |= KFD_MMAP_GPU_ID(args->gpu_id);
        args->doorbell_offset <<= PAGE_SHIFT;
+       if (KFD_IS_SOC15(dev->device_info->asic_family))
+               /* On SOC15 ASICs, doorbell allocation must be
+                * per-device, and independent from the per-process
+                * queue_id. Return the doorbell offset within the
+                * doorbell aperture to user mode.
+                */
+               args->doorbell_offset |= q_properties.doorbell_off;
  
        mutex_unlock(&p->mutex);
  
@@@ -749,13 -757,12 +757,13 @@@ static int kfd_ioctl_get_clock_counters
        struct timespec64 time;
  
        dev = kfd_device_by_id(args->gpu_id);
 -      if (dev == NULL)
 -              return -EINVAL;
 -
 -      /* Reading GPU clock counter from KGD */
 -      args->gpu_clock_counter =
 -              dev->kfd2kgd->get_gpu_clock_counter(dev->kgd);
 +      if (dev)
 +              /* Reading GPU clock counter from KGD */
 +              args->gpu_clock_counter =
 +                      dev->kfd2kgd->get_gpu_clock_counter(dev->kgd);
 +      else
 +              /* Node without GPU resource */
 +              args->gpu_clock_counter = 0;
  
        /* No access to rdtsc. Using raw monotonic time */
        getrawmonotonic64(&time);
@@@ -1148,7 -1155,7 +1156,7 @@@ err_unlock
        return ret;
  }
  
 -bool kfd_dev_is_large_bar(struct kfd_dev *dev)
 +static bool kfd_dev_is_large_bar(struct kfd_dev *dev)
  {
        struct kfd_local_mem_info mem_info;
  
@@@ -1296,8 -1303,8 +1304,8 @@@ static int kfd_ioctl_map_memory_to_gpu(
                return -EINVAL;
        }
  
-       devices_arr = kmalloc(args->n_devices * sizeof(*devices_arr),
-                             GFP_KERNEL);
+       devices_arr = kmalloc_array(args->n_devices, sizeof(*devices_arr),
+                                   GFP_KERNEL);
        if (!devices_arr)
                return -ENOMEM;
  
@@@ -1405,8 -1412,8 +1413,8 @@@ static int kfd_ioctl_unmap_memory_from_
                return -EINVAL;
        }
  
-       devices_arr = kmalloc(args->n_devices * sizeof(*devices_arr),
-                             GFP_KERNEL);
+       devices_arr = kmalloc_array(args->n_devices, sizeof(*devices_arr),
+                                   GFP_KERNEL);
        if (!devices_arr)
                return -ENOMEM;
  
  
        pdd = kfd_get_process_device_data(dev, p);
        if (!pdd) {
 -              err = PTR_ERR(pdd);
 +              err = -EINVAL;
                goto bind_process_to_device_failed;
        }
  
@@@ -1645,23 -1652,33 +1653,33 @@@ err_i1
  static int kfd_mmap(struct file *filp, struct vm_area_struct *vma)
  {
        struct kfd_process *process;
+       struct kfd_dev *dev = NULL;
+       unsigned long vm_pgoff;
+       unsigned int gpu_id;
  
        process = kfd_get_process(current);
        if (IS_ERR(process))
                return PTR_ERR(process);
  
-       if ((vma->vm_pgoff & KFD_MMAP_DOORBELL_MASK) ==
-                       KFD_MMAP_DOORBELL_MASK) {
-               vma->vm_pgoff = vma->vm_pgoff ^ KFD_MMAP_DOORBELL_MASK;
-               return kfd_doorbell_mmap(process, vma);
-       } else if ((vma->vm_pgoff & KFD_MMAP_EVENTS_MASK) ==
-                       KFD_MMAP_EVENTS_MASK) {
-               vma->vm_pgoff = vma->vm_pgoff ^ KFD_MMAP_EVENTS_MASK;
+       vm_pgoff = vma->vm_pgoff;
+       vma->vm_pgoff = KFD_MMAP_OFFSET_VALUE_GET(vm_pgoff);
+       gpu_id = KFD_MMAP_GPU_ID_GET(vm_pgoff);
+       if (gpu_id)
+               dev = kfd_device_by_id(gpu_id);
+       switch (vm_pgoff & KFD_MMAP_TYPE_MASK) {
+       case KFD_MMAP_TYPE_DOORBELL:
+               if (!dev)
+                       return -ENODEV;
+               return kfd_doorbell_mmap(dev, process, vma);
+       case KFD_MMAP_TYPE_EVENTS:
                return kfd_event_mmap(process, vma);
-       } else if ((vma->vm_pgoff & KFD_MMAP_RESERVED_MEM_MASK) ==
-                       KFD_MMAP_RESERVED_MEM_MASK) {
-               vma->vm_pgoff = vma->vm_pgoff ^ KFD_MMAP_RESERVED_MEM_MASK;
-               return kfd_reserved_mem_mmap(process, vma);
+       case KFD_MMAP_TYPE_RESERVED_MEM:
+               if (!dev)
+                       return -ENODEV;
+               return kfd_reserved_mem_mmap(dev, process, vma);
        }
  
        return -EFAULT;
This page took 0.119165 seconds and 4 git commands to generate.