summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/amd/amdkfd/kfd_events.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/amdkfd/kfd_events.c')
-rw-r--r--drivers/gpu/drm/amd/amdkfd/kfd_events.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_events.c b/drivers/gpu/drm/amd/amdkfd/kfd_events.c
index 1ad312af8ff0..bafc7b699dcc 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_events.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_events.c
@@ -67,7 +67,7 @@ static struct kfd_signal_page *allocate_signal_page(struct kfd_process *p)
void *backing_store;
struct kfd_signal_page *page;
- page = kzalloc(sizeof(*page), GFP_KERNEL);
+ page = kzalloc_obj(*page);
if (!page)
return NULL;
@@ -331,7 +331,13 @@ static int kfd_event_page_set(struct kfd_process *p, void *kernel_address,
if (p->signal_page)
return -EBUSY;
- page = kzalloc(sizeof(*page), GFP_KERNEL);
+ if (size < KFD_SIGNAL_EVENT_LIMIT * 8) {
+ pr_err("Event page size %llu is too small, need at least %lu bytes\n",
+ size, (unsigned long)(KFD_SIGNAL_EVENT_LIMIT * 8));
+ return -EINVAL;
+ }
+
+ page = kzalloc_obj(*page);
if (!page)
return -ENOMEM;
@@ -399,7 +405,7 @@ int kfd_event_create(struct file *devkfd, struct kfd_process *p,
uint64_t *event_page_offset, uint32_t *event_slot_index)
{
int ret = 0;
- struct kfd_event *ev = kzalloc(sizeof(*ev), GFP_KERNEL);
+ struct kfd_event *ev = kzalloc_obj(*ev);
if (!ev)
return -ENOMEM;
@@ -452,11 +458,11 @@ int kfd_criu_restore_event(struct file *devkfd,
struct kfd_event *ev = NULL;
int ret = 0;
- ev_priv = kmalloc(sizeof(*ev_priv), GFP_KERNEL);
+ ev_priv = kmalloc_obj(*ev_priv);
if (!ev_priv)
return -ENOMEM;
- ev = kzalloc(sizeof(*ev), GFP_KERNEL);
+ ev = kzalloc_obj(*ev);
if (!ev) {
ret = -ENOMEM;
goto exit;
@@ -785,8 +791,7 @@ static struct kfd_event_waiter *alloc_event_waiters(uint32_t num_events)
struct kfd_event_waiter *event_waiters;
uint32_t i;
- event_waiters = kcalloc(num_events, sizeof(struct kfd_event_waiter),
- GFP_KERNEL);
+ event_waiters = kzalloc_objs(struct kfd_event_waiter, num_events);
if (!event_waiters)
return NULL;