[PATCH] drm/amdkfd: Fix for-loop when allocating HQD (non-HWS)

Alex Deucher alexdeucher at gmail.com
Tue Jan 13 06:47:13 PST 2015


On Tue, Jan 13, 2015 at 4:27 AM, Oded Gabbay <oded.gabbay at amd.com> wrote:
> From: Ben Goz <ben.goz at amd.com>
>
> This patch fixes a minor bug in allocate_hqd(), where the loop run from the
> next-to-allocate pipe until the number of pipes.
>
> This is wrong because we need to consider the possibility where
> next-to-allocate pipe is not 0, and thus, the for-loop only checks part of the
> pipes and doesn't wrap-around, as it supposed to do.
>
> Therefore, we add another counting variable to make sure we go over all the
> pipes, regardless of where we start to look at the first iteration of the loop.
>
> This bug only affected non-HWS mode. In HWS mode, the CP fw is responsible for
> allocating the HQD.
>
> Signed-off-by: Ben Goz <ben.goz at amd.com>
> Signed-off-by: Oded Gabbay <oded.gabbay at amd.com>

Acked-by: Alex Deucher <alexander.deucher at amd.com>

> ---
>  drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 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 30c8fda..102aaba 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
> @@ -214,12 +214,12 @@ static int create_queue_nocpsch(struct device_queue_manager *dqm,
>  static int allocate_hqd(struct device_queue_manager *dqm, struct queue *q)
>  {
>         bool set;
> -       int pipe, bit;
> +       int pipe, bit, i;
>
>         set = false;
>
> -       for (pipe = dqm->next_pipe_to_allocate; pipe < get_pipes_num(dqm);
> -                       pipe = (pipe + 1) % get_pipes_num(dqm)) {
> +       for (pipe = dqm->next_pipe_to_allocate, i = 0; i < get_pipes_num(dqm);
> +                       pipe = ((pipe + 1) % get_pipes_num(dqm)), ++i) {
>                 if (dqm->allocated_queues[pipe] != 0) {
>                         bit = find_first_bit(
>                                 (unsigned long *)&dqm->allocated_queues[pipe],
> --
> 1.9.1
>
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel


More information about the dri-devel mailing list