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
This commit is contained in:
commit
22a548d048
6 changed files with 1 additions and 18 deletions
|
@ -101,7 +101,6 @@ void amdgpu_amdkfd_device_init(struct amdgpu_device *adev)
|
||||||
if (adev->kfd) {
|
if (adev->kfd) {
|
||||||
struct kgd2kfd_shared_resources gpu_resources = {
|
struct kgd2kfd_shared_resources gpu_resources = {
|
||||||
.compute_vmid_bitmap = 0xFF00,
|
.compute_vmid_bitmap = 0xFF00,
|
||||||
.num_mec = adev->gfx.mec.num_mec,
|
|
||||||
.num_pipe_per_mec = adev->gfx.mec.num_pipe_per_mec,
|
.num_pipe_per_mec = adev->gfx.mec.num_pipe_per_mec,
|
||||||
.num_queue_per_pipe = adev->gfx.mec.num_queue_per_pipe
|
.num_queue_per_pipe = adev->gfx.mec.num_queue_per_pipe
|
||||||
};
|
};
|
||||||
|
@ -122,7 +121,7 @@ void amdgpu_amdkfd_device_init(struct amdgpu_device *adev)
|
||||||
|
|
||||||
/* According to linux/bitmap.h we shouldn't use bitmap_clear if
|
/* According to linux/bitmap.h we shouldn't use bitmap_clear if
|
||||||
* nbits is not compile time constant */
|
* nbits is not compile time constant */
|
||||||
last_valid_bit = adev->gfx.mec.num_mec
|
last_valid_bit = 1 /* only first MEC can have compute queues */
|
||||||
* adev->gfx.mec.num_pipe_per_mec
|
* adev->gfx.mec.num_pipe_per_mec
|
||||||
* adev->gfx.mec.num_queue_per_pipe;
|
* adev->gfx.mec.num_queue_per_pipe;
|
||||||
for (i = last_valid_bit; i < KGD_MAX_QUEUES; ++i)
|
for (i = last_valid_bit; i < KGD_MAX_QUEUES; ++i)
|
||||||
|
|
|
@ -226,10 +226,6 @@ bool kgd2kfd_device_init(struct kfd_dev *kfd,
|
||||||
|
|
||||||
kfd->shared_resources = *gpu_resources;
|
kfd->shared_resources = *gpu_resources;
|
||||||
|
|
||||||
/* We only use the first MEC */
|
|
||||||
if (kfd->shared_resources.num_mec > 1)
|
|
||||||
kfd->shared_resources.num_mec = 1;
|
|
||||||
|
|
||||||
/* calculate max size of mqds needed for queues */
|
/* calculate max size of mqds needed for queues */
|
||||||
size = max_num_of_queues_per_device *
|
size = max_num_of_queues_per_device *
|
||||||
kfd->device_info->mqd_size_aligned;
|
kfd->device_info->mqd_size_aligned;
|
||||||
|
|
|
@ -77,13 +77,6 @@ static bool is_pipe_enabled(struct device_queue_manager *dqm, int mec, int pipe)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int get_mec_num(struct device_queue_manager *dqm)
|
|
||||||
{
|
|
||||||
BUG_ON(!dqm || !dqm->dev);
|
|
||||||
|
|
||||||
return dqm->dev->shared_resources.num_mec;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned int get_queues_num(struct device_queue_manager *dqm)
|
unsigned int get_queues_num(struct device_queue_manager *dqm)
|
||||||
{
|
{
|
||||||
BUG_ON(!dqm || !dqm->dev);
|
BUG_ON(!dqm || !dqm->dev);
|
||||||
|
|
|
@ -180,7 +180,6 @@ void device_queue_manager_init_cik(struct device_queue_manager_asic_ops *ops);
|
||||||
void device_queue_manager_init_vi(struct device_queue_manager_asic_ops *ops);
|
void device_queue_manager_init_vi(struct device_queue_manager_asic_ops *ops);
|
||||||
void program_sh_mem_settings(struct device_queue_manager *dqm,
|
void program_sh_mem_settings(struct device_queue_manager *dqm,
|
||||||
struct qcm_process_device *qpd);
|
struct qcm_process_device *qpd);
|
||||||
unsigned int get_mec_num(struct device_queue_manager *dqm);
|
|
||||||
unsigned int get_queues_num(struct device_queue_manager *dqm);
|
unsigned int get_queues_num(struct device_queue_manager *dqm);
|
||||||
unsigned int get_queues_per_pipe(struct device_queue_manager *dqm);
|
unsigned int get_queues_per_pipe(struct device_queue_manager *dqm);
|
||||||
unsigned int get_pipes_per_mec(struct device_queue_manager *dqm);
|
unsigned int get_pipes_per_mec(struct device_queue_manager *dqm);
|
||||||
|
|
|
@ -63,9 +63,6 @@ struct kgd2kfd_shared_resources {
|
||||||
/* Bit n == 1 means VMID n is available for KFD. */
|
/* Bit n == 1 means VMID n is available for KFD. */
|
||||||
unsigned int compute_vmid_bitmap;
|
unsigned int compute_vmid_bitmap;
|
||||||
|
|
||||||
/* number of mec available from the hardware */
|
|
||||||
uint32_t num_mec;
|
|
||||||
|
|
||||||
/* number of pipes per mec */
|
/* number of pipes per mec */
|
||||||
uint32_t num_pipe_per_mec;
|
uint32_t num_pipe_per_mec;
|
||||||
|
|
||||||
|
|
|
@ -184,7 +184,6 @@ void radeon_kfd_device_init(struct radeon_device *rdev)
|
||||||
if (rdev->kfd) {
|
if (rdev->kfd) {
|
||||||
struct kgd2kfd_shared_resources gpu_resources = {
|
struct kgd2kfd_shared_resources gpu_resources = {
|
||||||
.compute_vmid_bitmap = 0xFF00,
|
.compute_vmid_bitmap = 0xFF00,
|
||||||
.num_mec = 1,
|
|
||||||
.num_pipe_per_mec = 4,
|
.num_pipe_per_mec = 4,
|
||||||
.num_queue_per_pipe = 8
|
.num_queue_per_pipe = 8
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue