Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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

+1 -18
+1 -2
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
··· 101 101 if (adev->kfd) { 102 102 struct kgd2kfd_shared_resources gpu_resources = { 103 103 .compute_vmid_bitmap = 0xFF00, 104 - .num_mec = adev->gfx.mec.num_mec, 105 104 .num_pipe_per_mec = adev->gfx.mec.num_pipe_per_mec, 106 105 .num_queue_per_pipe = adev->gfx.mec.num_queue_per_pipe 107 106 }; ··· 121 122 122 123 /* According to linux/bitmap.h we shouldn't use bitmap_clear if 123 124 * nbits is not compile time constant */ 124 - last_valid_bit = adev->gfx.mec.num_mec 125 + last_valid_bit = 1 /* only first MEC can have compute queues */ 125 126 * adev->gfx.mec.num_pipe_per_mec 126 127 * adev->gfx.mec.num_queue_per_pipe; 127 128 for (i = last_valid_bit; i < KGD_MAX_QUEUES; ++i)
-4
drivers/gpu/drm/amd/amdkfd/kfd_device.c
··· 226 226 227 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 229 /* calculate max size of mqds needed for queues */ 234 230 size = max_num_of_queues_per_device * 235 231 kfd->device_info->mqd_size_aligned;
-7
drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
··· 77 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 80 unsigned int get_queues_num(struct device_queue_manager *dqm) 88 81 { 89 82 BUG_ON(!dqm || !dqm->dev);
-1
drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.h
··· 180 180 void device_queue_manager_init_vi(struct device_queue_manager_asic_ops *ops); 181 181 void program_sh_mem_settings(struct device_queue_manager *dqm, 182 182 struct qcm_process_device *qpd); 183 - unsigned int get_mec_num(struct device_queue_manager *dqm); 184 183 unsigned int get_queues_num(struct device_queue_manager *dqm); 185 184 unsigned int get_queues_per_pipe(struct device_queue_manager *dqm); 186 185 unsigned int get_pipes_per_mec(struct device_queue_manager *dqm);
-3
drivers/gpu/drm/amd/include/kgd_kfd_interface.h
··· 63 63 /* Bit n == 1 means VMID n is available for KFD. */ 64 64 unsigned int compute_vmid_bitmap; 65 65 66 - /* number of mec available from the hardware */ 67 - uint32_t num_mec; 68 - 69 66 /* number of pipes per mec */ 70 67 uint32_t num_pipe_per_mec; 71 68
-1
drivers/gpu/drm/radeon/radeon_kfd.c
··· 184 184 if (rdev->kfd) { 185 185 struct kgd2kfd_shared_resources gpu_resources = { 186 186 .compute_vmid_bitmap = 0xFF00, 187 - .num_mec = 1, 188 187 .num_pipe_per_mec = 4, 189 188 .num_queue_per_pipe = 8 190 189 };