diff options
author | Dave Airlie <airlied@redhat.com> | 2018-01-17 22:30:48 -0500 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2018-01-17 22:30:48 -0500 |
commit | 92eb5f0c00b7c11d85ae823a814b2a34dda8a3c4 (patch) | |
tree | e405883462fca0ab309240a29b17d67912e78d70 | |
parent | 4a6cc7a44e98a0460bd094b68c75f0705fdc450a (diff) | |
parent | 2e3dca53654ddc51bada4cee4ca32d0d266fc9dd (diff) |
Merge tag 'drm-amdkfd-next-fixes-2018-01-15' of git://people.freedesktop.org/~gabbayo/linux into drm-next
- fix NULL pointer dereference
- fix compiler warning on large define values
- remove unnecessary call to execute_queues_cpsch
* tag 'drm-amdkfd-next-fixes-2018-01-15' of git://people.freedesktop.org/~gabbayo/linux:
drm/amdkfd: Fix potential NULL pointer dereferences
drm/amdkfd: add ull suffix to 64bit defines
drm/amdkfd: don't always call execute_queues_cpsch()
drm/amdkfd: Fix return value 0 when execute_queues_cpsch fails
-rw-r--r-- | drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 12 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdkfd/kfd_priv.h | 6 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdkfd/kfd_process.c | 8 |
3 files changed, 16 insertions, 10 deletions
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c index d0693fd8cbf8..b21285afa4ea 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | |||
@@ -1013,13 +1013,13 @@ static int destroy_queue_cpsch(struct device_queue_manager *dqm, | |||
1013 | 1013 | ||
1014 | list_del(&q->list); | 1014 | list_del(&q->list); |
1015 | qpd->queue_count--; | 1015 | qpd->queue_count--; |
1016 | if (q->properties.is_active) | 1016 | if (q->properties.is_active) { |
1017 | dqm->queue_count--; | 1017 | dqm->queue_count--; |
1018 | 1018 | retval = execute_queues_cpsch(dqm, | |
1019 | retval = execute_queues_cpsch(dqm, | ||
1020 | KFD_UNMAP_QUEUES_FILTER_DYNAMIC_QUEUES, 0); | 1019 | KFD_UNMAP_QUEUES_FILTER_DYNAMIC_QUEUES, 0); |
1021 | if (retval == -ETIME) | 1020 | if (retval == -ETIME) |
1022 | qpd->reset_wavefronts = true; | 1021 | qpd->reset_wavefronts = true; |
1022 | } | ||
1023 | 1023 | ||
1024 | mqd->uninit_mqd(mqd, q->mqd, q->mqd_mem_obj); | 1024 | mqd->uninit_mqd(mqd, q->mqd, q->mqd_mem_obj); |
1025 | 1025 | ||
@@ -1033,7 +1033,7 @@ static int destroy_queue_cpsch(struct device_queue_manager *dqm, | |||
1033 | 1033 | ||
1034 | mutex_unlock(&dqm->lock); | 1034 | mutex_unlock(&dqm->lock); |
1035 | 1035 | ||
1036 | return 0; | 1036 | return retval; |
1037 | 1037 | ||
1038 | failed: | 1038 | failed: |
1039 | failed_try_destroy_debugged_queue: | 1039 | failed_try_destroy_debugged_queue: |
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h index 6a48d29ada47..0bedcf9cc08c 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h +++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h | |||
@@ -41,9 +41,9 @@ | |||
41 | 41 | ||
42 | #define KFD_SYSFS_FILE_MODE 0444 | 42 | #define KFD_SYSFS_FILE_MODE 0444 |
43 | 43 | ||
44 | #define KFD_MMAP_DOORBELL_MASK 0x8000000000000 | 44 | #define KFD_MMAP_DOORBELL_MASK 0x8000000000000ull |
45 | #define KFD_MMAP_EVENTS_MASK 0x4000000000000 | 45 | #define KFD_MMAP_EVENTS_MASK 0x4000000000000ull |
46 | #define KFD_MMAP_RESERVED_MEM_MASK 0x2000000000000 | 46 | #define KFD_MMAP_RESERVED_MEM_MASK 0x2000000000000ull |
47 | 47 | ||
48 | /* | 48 | /* |
49 | * When working with cp scheduler we should assign the HIQ manually or via | 49 | * When working with cp scheduler we should assign the HIQ manually or via |
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process.c b/drivers/gpu/drm/amd/amdkfd/kfd_process.c index a22fb0710f15..4ff5f0fe6db8 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_process.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_process.c | |||
@@ -461,7 +461,8 @@ int kfd_bind_processes_to_device(struct kfd_dev *dev) | |||
461 | hash_for_each_rcu(kfd_processes_table, temp, p, kfd_processes) { | 461 | hash_for_each_rcu(kfd_processes_table, temp, p, kfd_processes) { |
462 | mutex_lock(&p->mutex); | 462 | mutex_lock(&p->mutex); |
463 | pdd = kfd_get_process_device_data(dev, p); | 463 | pdd = kfd_get_process_device_data(dev, p); |
464 | if (pdd->bound != PDD_BOUND_SUSPENDED) { | 464 | |
465 | if (WARN_ON(!pdd) || pdd->bound != PDD_BOUND_SUSPENDED) { | ||
465 | mutex_unlock(&p->mutex); | 466 | mutex_unlock(&p->mutex); |
466 | continue; | 467 | continue; |
467 | } | 468 | } |
@@ -501,6 +502,11 @@ void kfd_unbind_processes_from_device(struct kfd_dev *dev) | |||
501 | mutex_lock(&p->mutex); | 502 | mutex_lock(&p->mutex); |
502 | pdd = kfd_get_process_device_data(dev, p); | 503 | pdd = kfd_get_process_device_data(dev, p); |
503 | 504 | ||
505 | if (WARN_ON(!pdd)) { | ||
506 | mutex_unlock(&p->mutex); | ||
507 | continue; | ||
508 | } | ||
509 | |||
504 | if (pdd->bound == PDD_BOUND) | 510 | if (pdd->bound == PDD_BOUND) |
505 | pdd->bound = PDD_BOUND_SUSPENDED; | 511 | pdd->bound = PDD_BOUND_SUSPENDED; |
506 | mutex_unlock(&p->mutex); | 512 | mutex_unlock(&p->mutex); |