2014-12-03 15:20:03

by Sasha Levin

[permalink] [raw]
Subject: [PATCH] amdkfd: use atomic allocations within srcu callbacks

srcu callbacks are running in atomic context, we can't allocate using
__GFP_WAIT.

Signed-off-by: Sasha Levin <[email protected]>
---
drivers/gpu/drm/amd/amdkfd/kfd_process.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process.c b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
index b4f49ac..b85eb0b 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_process.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
@@ -196,7 +196,7 @@ static void kfd_process_destroy_delayed(struct rcu_head *rcu)
mmdrop(p->mm);

work = (struct kfd_process_release_work *)
- kmalloc(sizeof(struct kfd_process_release_work), GFP_KERNEL);
+ kmalloc(sizeof(struct kfd_process_release_work), GFP_ATOMIC);

if (work) {
INIT_WORK((struct work_struct *) work, kfd_process_wq_release);
--
2.1.0


2014-12-04 12:28:09

by Oded Gabbay

[permalink] [raw]
Subject: Re: [PATCH] amdkfd: use atomic allocations within srcu callbacks



On 12/03/2014 05:19 PM, Sasha Levin wrote:
> srcu callbacks are running in atomic context, we can't allocate using
> __GFP_WAIT.
>
> Signed-off-by: Sasha Levin <[email protected]>
> ---
> drivers/gpu/drm/amd/amdkfd/kfd_process.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_process.c b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
> index b4f49ac..b85eb0b 100644
> --- a/drivers/gpu/drm/amd/amdkfd/kfd_process.c
> +++ b/drivers/gpu/drm/amd/amdkfd/kfd_process.c
> @@ -196,7 +196,7 @@ static void kfd_process_destroy_delayed(struct rcu_head *rcu)
> mmdrop(p->mm);
>
> work = (struct kfd_process_release_work *)
> - kmalloc(sizeof(struct kfd_process_release_work), GFP_KERNEL);
> + kmalloc(sizeof(struct kfd_process_release_work), GFP_ATOMIC);
>
> if (work) {
> INIT_WORK((struct work_struct *) work, kfd_process_wq_release);
>

Thanks!
Applied to my -next tree.

Oded