2021-06-09 17:11:39

by Baokun Li

[permalink] [raw]
Subject: [PATCH -next v2] media: staging: atomisp: use list_move_tail instead of list_del/list_add_tail in atomisp_compat_css20.c

Using list_move_tail() instead of list_del() + list_add_tail() in atomisp_compat_css20.c.

Reported-by: Hulk Robot <[email protected]>
Signed-off-by: Baokun Li <[email protected]>
---
V1->V2:
CC mailist

.../pci/atomisp_compat_css20.c | 15 +++++----------
1 file changed, 5 insertions(+), 10 deletions(-)

diff --git a/drivers/staging/media/atomisp/pci/atomisp_compat_css20.c b/drivers/staging/media/atomisp/pci/atomisp_compat_css20.c
index f60198bb8a1a..3bd4c616655d 100644
--- a/drivers/staging/media/atomisp/pci/atomisp_compat_css20.c
+++ b/drivers/staging/media/atomisp/pci/atomisp_compat_css20.c
@@ -2147,22 +2147,19 @@ void atomisp_css_stop(struct atomisp_sub_device *asd,
while (!list_empty(&asd->s3a_stats_in_css)) {
s3a_buf = list_entry(asd->s3a_stats_in_css.next,
struct atomisp_s3a_buf, list);
- list_del(&s3a_buf->list);
- list_add_tail(&s3a_buf->list, &asd->s3a_stats);
+ list_move_tail(&s3a_buf->list, &asd->s3a_stats);
}
while (!list_empty(&asd->s3a_stats_ready)) {
s3a_buf = list_entry(asd->s3a_stats_ready.next,
struct atomisp_s3a_buf, list);
- list_del(&s3a_buf->list);
- list_add_tail(&s3a_buf->list, &asd->s3a_stats);
+ list_move_tail(&s3a_buf->list, &asd->s3a_stats);
}

spin_lock_irqsave(&asd->dis_stats_lock, irqflags);
while (!list_empty(&asd->dis_stats_in_css)) {
dis_buf = list_entry(asd->dis_stats_in_css.next,
struct atomisp_dis_buf, list);
- list_del(&dis_buf->list);
- list_add_tail(&dis_buf->list, &asd->dis_stats);
+ list_move_tail(&dis_buf->list, &asd->dis_stats);
}
asd->params.dis_proj_data_valid = false;
spin_unlock_irqrestore(&asd->dis_stats_lock, irqflags);
@@ -2171,14 +2168,12 @@ void atomisp_css_stop(struct atomisp_sub_device *asd,
while (!list_empty(&asd->metadata_in_css[i])) {
md_buf = list_entry(asd->metadata_in_css[i].next,
struct atomisp_metadata_buf, list);
- list_del(&md_buf->list);
- list_add_tail(&md_buf->list, &asd->metadata[i]);
+ list_move_tail(&md_buf->list, &asd->metadata[i]);
}
while (!list_empty(&asd->metadata_ready[i])) {
md_buf = list_entry(asd->metadata_ready[i].next,
struct atomisp_metadata_buf, list);
- list_del(&md_buf->list);
- list_add_tail(&md_buf->list, &asd->metadata[i]);
+ list_move_tail(&md_buf->list, &asd->metadata[i]);
}
}



2021-06-09 18:19:20

by Andy Shevchenko

[permalink] [raw]
Subject: Re: [PATCH -next v2] media: staging: atomisp: use list_move_tail instead of list_del/list_add_tail in atomisp_compat_css20.c

On Wed, Jun 9, 2021 at 4:32 PM Baokun Li <[email protected]> wrote:
>
> Using list_move_tail() instead of list_del() + list_add_tail() in atomisp_compat_css20.c.

Have you considered using list_splice() instead of entire while-loops?
Or something similar from list.h...

> while (!list_empty(&asd->s3a_stats_in_css)) {
> s3a_buf = list_entry(asd->s3a_stats_in_css.next,
> struct atomisp_s3a_buf, list);
> - list_del(&s3a_buf->list);
> - list_add_tail(&s3a_buf->list, &asd->s3a_stats);
> + list_move_tail(&s3a_buf->list, &asd->s3a_stats);
> }
> while (!list_empty(&asd->s3a_stats_ready)) {
> s3a_buf = list_entry(asd->s3a_stats_ready.next,
> struct atomisp_s3a_buf, list);
> - list_del(&s3a_buf->list);
> - list_add_tail(&s3a_buf->list, &asd->s3a_stats);
> + list_move_tail(&s3a_buf->list, &asd->s3a_stats);
> }

> while (!list_empty(&asd->dis_stats_in_css)) {
> dis_buf = list_entry(asd->dis_stats_in_css.next,
> struct atomisp_dis_buf, list);
> - list_del(&dis_buf->list);
> - list_add_tail(&dis_buf->list, &asd->dis_stats);
> + list_move_tail(&dis_buf->list, &asd->dis_stats);
> }

> while (!list_empty(&asd->metadata_in_css[i])) {
> md_buf = list_entry(asd->metadata_in_css[i].next,
> struct atomisp_metadata_buf, list);
> - list_del(&md_buf->list);
> - list_add_tail(&md_buf->list, &asd->metadata[i]);
> + list_move_tail(&md_buf->list, &asd->metadata[i]);
> }
> while (!list_empty(&asd->metadata_ready[i])) {
> md_buf = list_entry(asd->metadata_ready[i].next,
> struct atomisp_metadata_buf, list);
> - list_del(&md_buf->list);
> - list_add_tail(&md_buf->list, &asd->metadata[i]);
> + list_move_tail(&md_buf->list, &asd->metadata[i]);
> }

--
With Best Regards,
Andy Shevchenko

2021-06-11 07:21:16

by Baokun Li

[permalink] [raw]
Subject: Re: [PATCH -next v2] media: staging: atomisp: use list_move_tail instead of list_del/list_add_tail in atomisp_compat_css20.c

Thank you for your advice. That's a great idea.

I'm about to send a patch v3 with the changes suggested by you.

Best Regards


在 2021/6/10 2:17, Andy Shevchenko 写道:
> On Wed, Jun 9, 2021 at 4:32 PM Baokun Li <[email protected]> wrote:
>> Using list_move_tail() instead of list_del() + list_add_tail() in atomisp_compat_css20.c.
> Have you considered using list_splice() instead of entire while-loops?
> Or something similar from list.h...
>
>> while (!list_empty(&asd->s3a_stats_in_css)) {
>> s3a_buf = list_entry(asd->s3a_stats_in_css.next,
>> struct atomisp_s3a_buf, list);
>> - list_del(&s3a_buf->list);
>> - list_add_tail(&s3a_buf->list, &asd->s3a_stats);
>> + list_move_tail(&s3a_buf->list, &asd->s3a_stats);
>> }
>> while (!list_empty(&asd->s3a_stats_ready)) {
>> s3a_buf = list_entry(asd->s3a_stats_ready.next,
>> struct atomisp_s3a_buf, list);
>> - list_del(&s3a_buf->list);
>> - list_add_tail(&s3a_buf->list, &asd->s3a_stats);
>> + list_move_tail(&s3a_buf->list, &asd->s3a_stats);
>> }
>> while (!list_empty(&asd->dis_stats_in_css)) {
>> dis_buf = list_entry(asd->dis_stats_in_css.next,
>> struct atomisp_dis_buf, list);
>> - list_del(&dis_buf->list);
>> - list_add_tail(&dis_buf->list, &asd->dis_stats);
>> + list_move_tail(&dis_buf->list, &asd->dis_stats);
>> }
>> while (!list_empty(&asd->metadata_in_css[i])) {
>> md_buf = list_entry(asd->metadata_in_css[i].next,
>> struct atomisp_metadata_buf, list);
>> - list_del(&md_buf->list);
>> - list_add_tail(&md_buf->list, &asd->metadata[i]);
>> + list_move_tail(&md_buf->list, &asd->metadata[i]);
>> }
>> while (!list_empty(&asd->metadata_ready[i])) {
>> md_buf = list_entry(asd->metadata_ready[i].next,
>> struct atomisp_metadata_buf, list);
>> - list_del(&md_buf->list);
>> - list_add_tail(&md_buf->list, &asd->metadata[i]);
>> + list_move_tail(&md_buf->list, &asd->metadata[i]);
>> }