Message ID | 20240831103047.99499-1-ruanjinjie@huawei.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [-next] drm/imagination: Use memdup_user() helper | expand |
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@huawei.com> > --- > 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. CJ > > static int init_render_fw_objs(struct pvr_context *ctx,
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@huawei.com> >> --- >> 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, > >
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; } static int init_render_fw_objs(struct pvr_context *ctx,
Switching to memdup_user(), which combines kmalloc() and copy_from_user(), and it can simplfy code. Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com> --- drivers/gpu/drm/imagination/pvr_context.c | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-)