diff options
author | Dave Airlie <airlied@redhat.com> | 2017-07-21 00:00:40 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2017-07-21 00:00:40 -0400 |
commit | 22a548d04853297b3855dcac2881d0cb52e3b99c (patch) | |
tree | 3e7d64542b720f1618b4cf2d125acfa3176b487e | |
parent | 5771a8c08880cdca3bfb4a3fc6d309d6bba20877 (diff) | |
parent | f835edf9aec13bc8abb3dd4836151773cc359f42 (diff) |
Merge tag 'drm-amdkfd-fixes-2017-07-18' of git://people.freedesktop.org/~gabbayo/linux into drm-fixes
This is a pull request for 4.13-rc2/3. The first patch addresses a bug that
appears when doing over-subscription of queues, due to a miscalculation of
the number of available compute queues. The other three patches remove
dead code that was created from the bugfix.
* tag 'drm-amdkfd-fixes-2017-07-18' of git://people.freedesktop.org/~gabbayo/linux:
drm/amdgpu: Remove unused field kgd2kfd_shared_resources.num_mec
drm/radeon: Remove initialization of shared_resources.num_mec
drm/amdkfd: Remove unused references to shared_resources.num_mec
drm/amdgpu: Fix KFD oversubscription by tracking queues correctly
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdkfd/kfd_device.c | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 7 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/include/kgd_kfd_interface.h | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_kfd.c | 1 |
6 files changed, 1 insertions, 18 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c index 5f8ada1d872b..37971d9402e3 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c | |||
@@ -101,7 +101,6 @@ void amdgpu_amdkfd_device_init(struct amdgpu_device *adev) | |||
101 | if (adev->kfd) { | 101 | if (adev->kfd) { |
102 | struct kgd2kfd_shared_resources gpu_resources = { | 102 | struct kgd2kfd_shared_resources gpu_resources = { |
103 | .compute_vmid_bitmap = 0xFF00, | 103 | .compute_vmid_bitmap = 0xFF00, |
104 | .num_mec = adev->gfx.mec.num_mec, | ||
105 | .num_pipe_per_mec = adev->gfx.mec.num_pipe_per_mec, | 104 | .num_pipe_per_mec = adev->gfx.mec.num_pipe_per_mec, |
106 | .num_queue_per_pipe = adev->gfx.mec.num_queue_per_pipe | 105 | .num_queue_per_pipe = adev->gfx.mec.num_queue_per_pipe |
107 | }; | 106 | }; |
@@ -122,7 +121,7 @@ void amdgpu_amdkfd_device_init(struct amdgpu_device *adev) | |||
122 | 121 | ||
123 | /* According to linux/bitmap.h we shouldn't use bitmap_clear if | 122 | /* According to linux/bitmap.h we shouldn't use bitmap_clear if |
124 | * nbits is not compile time constant */ | 123 | * nbits is not compile time constant */ |
125 | last_valid_bit = adev->gfx.mec.num_mec | 124 | last_valid_bit = 1 /* only first MEC can have compute queues */ |
126 | * adev->gfx.mec.num_pipe_per_mec | 125 | * adev->gfx.mec.num_pipe_per_mec |
127 | * adev->gfx.mec.num_queue_per_pipe; | 126 | * adev->gfx.mec.num_queue_per_pipe; |
128 | for (i = last_valid_bit; i < KGD_MAX_QUEUES; ++i) | 127 | for (i = last_valid_bit; i < KGD_MAX_QUEUES; ++i) |
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device.c b/drivers/gpu/drm/amd/amdkfd/kfd_device.c index 88187bfc5ea3..3f95f7cb4019 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_device.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_device.c | |||
@@ -226,10 +226,6 @@ bool kgd2kfd_device_init(struct kfd_dev *kfd, | |||
226 | 226 | ||
227 | kfd->shared_resources = *gpu_resources; | 227 | kfd->shared_resources = *gpu_resources; |
228 | 228 | ||
229 | /* We only use the first MEC */ | ||
230 | if (kfd->shared_resources.num_mec > 1) | ||
231 | kfd->shared_resources.num_mec = 1; | ||
232 | |||
233 | /* calculate max size of mqds needed for queues */ | 229 | /* calculate max size of mqds needed for queues */ |
234 | size = max_num_of_queues_per_device * | 230 | size = max_num_of_queues_per_device * |
235 | kfd->device_info->mqd_size_aligned; | 231 | kfd->device_info->mqd_size_aligned; |
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 955aa304ff48..602769ced3bd 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | |||
@@ -77,13 +77,6 @@ static bool is_pipe_enabled(struct device_queue_manager *dqm, int mec, int pipe) | |||
77 | return false; | 77 | return false; |
78 | } | 78 | } |
79 | 79 | ||
80 | unsigned int get_mec_num(struct device_queue_manager *dqm) | ||
81 | { | ||
82 | BUG_ON(!dqm || !dqm->dev); | ||
83 | |||
84 | return dqm->dev->shared_resources.num_mec; | ||
85 | } | ||
86 | |||
87 | unsigned int get_queues_num(struct device_queue_manager *dqm) | 80 | unsigned int get_queues_num(struct device_queue_manager *dqm) |
88 | { | 81 | { |
89 | BUG_ON(!dqm || !dqm->dev); | 82 | BUG_ON(!dqm || !dqm->dev); |
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.h b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.h index 66b9615bc3c1..faf820a06400 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.h +++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.h | |||
@@ -180,7 +180,6 @@ void device_queue_manager_init_cik(struct device_queue_manager_asic_ops *ops); | |||
180 | void device_queue_manager_init_vi(struct device_queue_manager_asic_ops *ops); | 180 | void device_queue_manager_init_vi(struct device_queue_manager_asic_ops *ops); |
181 | void program_sh_mem_settings(struct device_queue_manager *dqm, | 181 | void program_sh_mem_settings(struct device_queue_manager *dqm, |
182 | struct qcm_process_device *qpd); | 182 | struct qcm_process_device *qpd); |
183 | unsigned int get_mec_num(struct device_queue_manager *dqm); | ||
184 | unsigned int get_queues_num(struct device_queue_manager *dqm); | 183 | unsigned int get_queues_num(struct device_queue_manager *dqm); |
185 | unsigned int get_queues_per_pipe(struct device_queue_manager *dqm); | 184 | unsigned int get_queues_per_pipe(struct device_queue_manager *dqm); |
186 | unsigned int get_pipes_per_mec(struct device_queue_manager *dqm); | 185 | unsigned int get_pipes_per_mec(struct device_queue_manager *dqm); |
diff --git a/drivers/gpu/drm/amd/include/kgd_kfd_interface.h b/drivers/gpu/drm/amd/include/kgd_kfd_interface.h index 91ef1484b3bb..36f376677a53 100644 --- a/drivers/gpu/drm/amd/include/kgd_kfd_interface.h +++ b/drivers/gpu/drm/amd/include/kgd_kfd_interface.h | |||
@@ -63,9 +63,6 @@ struct kgd2kfd_shared_resources { | |||
63 | /* Bit n == 1 means VMID n is available for KFD. */ | 63 | /* Bit n == 1 means VMID n is available for KFD. */ |
64 | unsigned int compute_vmid_bitmap; | 64 | unsigned int compute_vmid_bitmap; |
65 | 65 | ||
66 | /* number of mec available from the hardware */ | ||
67 | uint32_t num_mec; | ||
68 | |||
69 | /* number of pipes per mec */ | 66 | /* number of pipes per mec */ |
70 | uint32_t num_pipe_per_mec; | 67 | uint32_t num_pipe_per_mec; |
71 | 68 | ||
diff --git a/drivers/gpu/drm/radeon/radeon_kfd.c b/drivers/gpu/drm/radeon/radeon_kfd.c index 699fe7f9b8bf..a2ab6dcdf4a2 100644 --- a/drivers/gpu/drm/radeon/radeon_kfd.c +++ b/drivers/gpu/drm/radeon/radeon_kfd.c | |||
@@ -184,7 +184,6 @@ void radeon_kfd_device_init(struct radeon_device *rdev) | |||
184 | if (rdev->kfd) { | 184 | if (rdev->kfd) { |
185 | struct kgd2kfd_shared_resources gpu_resources = { | 185 | struct kgd2kfd_shared_resources gpu_resources = { |
186 | .compute_vmid_bitmap = 0xFF00, | 186 | .compute_vmid_bitmap = 0xFF00, |
187 | .num_mec = 1, | ||
188 | .num_pipe_per_mec = 4, | 187 | .num_pipe_per_mec = 4, |
189 | .num_queue_per_pipe = 8 | 188 | .num_queue_per_pipe = 8 |
190 | }; | 189 | }; |