On 2024/8/31 18:48, Christophe JAILLET wrote: > Le 31/08/2024 à 12:30, Jinjie Ruan a écrit : >> Switching to memdup_user(), which combines kmalloc() and >> copy_from_user(), >> and it can simplfy code. >> >> Signed-off-by: Jinjie Ruan <ruanjinjie@xxxxxxxxxx> >> --- >> drivers/gpu/drm/imagination/pvr_context.c | 22 +++++++--------------- >> 1 file changed, 7 insertions(+), 15 deletions(-) >> >> diff --git a/drivers/gpu/drm/imagination/pvr_context.c >> b/drivers/gpu/drm/imagination/pvr_context.c >> index eded5e955cc0..e75fd50a4d9f 100644 >> --- a/drivers/gpu/drm/imagination/pvr_context.c >> +++ b/drivers/gpu/drm/imagination/pvr_context.c >> @@ -69,27 +69,19 @@ process_static_context_state(struct pvr_device >> *pvr_dev, const struct pvr_stream >> void *stream; >> int err; >> - stream = kzalloc(stream_size, GFP_KERNEL); >> - if (!stream) >> - return -ENOMEM; >> - >> - if (copy_from_user(stream, u64_to_user_ptr(stream_user_ptr), >> stream_size)) { >> - err = -EFAULT; >> - goto err_free; >> - } >> + stream = memdup_user(u64_to_user_ptr(stream_user_ptr), stream_size); >> + if (IS_ERR(stream)) >> + return PTR_ERR(stream); >> err = pvr_stream_process(pvr_dev, cmd_defs, stream, >> stream_size, dest); >> - if (err) >> - goto err_free; >> + if (err) { >> + kfree(stream); >> + return err; >> + } >> kfree(stream); >> return 0; >> - >> -err_free: >> - kfree(stream); >> - >> - return err; >> } > > It could also be: > err = pvr_stream_process(...); > > kfree(stream); > > return err; > > as you did for drivers/gpu/drm/imagination/pvr_job.c. You are right! that will be more clean. > > CJ > >> static int init_render_fw_objs(struct pvr_context *ctx, > >