Skip to content

Commit

Permalink
drm/amd/amdkfd: Fix large framesize for kfd_smi_ev_read()
Browse files Browse the repository at this point in the history
The buffer allocated is of 1024 bytes. Allocate this from
heap instead of stack.

Also remove check for stack size since we're allocating from heap

Signed-off-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
Tested-by: Amber Lin <Amber.Lin@amd.com>
Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
  • Loading branch information
Aurabindo Pillai authored and Alex Deucher committed Jul 15, 2020
1 parent 91e2c19 commit 6e14ade
Showing 1 changed file with 19 additions and 7 deletions.
26 changes: 19 additions & 7 deletions drivers/gpu/drm/amd/amdkfd/kfd_smi_events.c
Original file line number Diff line number Diff line change
Expand Up @@ -78,9 +78,11 @@ static ssize_t kfd_smi_ev_read(struct file *filep, char __user *user,
int ret;
size_t to_copy;
struct kfd_smi_client *client = filep->private_data;
unsigned char buf[MAX_KFIFO_SIZE];
unsigned char *buf;

BUILD_BUG_ON(MAX_KFIFO_SIZE > 1024);
buf = kmalloc(MAX_KFIFO_SIZE * sizeof(*buf), GFP_KERNEL);
if (!buf)
return -ENOMEM;

/* kfifo_to_user can sleep so we can't use spinlock protection around
* it. Instead, we kfifo out as spinlocked then copy them to the user.
Expand All @@ -89,19 +91,29 @@ static ssize_t kfd_smi_ev_read(struct file *filep, char __user *user,
to_copy = kfifo_len(&client->fifo);
if (!to_copy) {
spin_unlock(&client->lock);
return -EAGAIN;
ret = -EAGAIN;
goto ret_err;
}
to_copy = min3(size, sizeof(buf), to_copy);
ret = kfifo_out(&client->fifo, buf, to_copy);
spin_unlock(&client->lock);
if (ret <= 0)
return -EAGAIN;
if (ret <= 0) {
ret = -EAGAIN;
goto ret_err;
}

ret = copy_to_user(user, buf, to_copy);
if (ret)
return -EFAULT;
if (ret) {
ret = -EFAULT;
goto ret_err;
}

kfree(buf);
return to_copy;

ret_err:
kfree(buf);
return ret;
}

static ssize_t kfd_smi_ev_write(struct file *filep, const char __user *user,
Expand Down

0 comments on commit 6e14ade

Please sign in to comment.