Message ID | 20210609072409.1357327-1-libaokun1@huawei.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [-next,v2] media: staging: atomisp: use list_move_tail instead of list_del/list_add_tail in atomisp_compat_css20.c | expand |
On Wed, Jun 9, 2021 at 4:32 PM Baokun Li <libaokun1@huawei.com> 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]); > }
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 <libaokun1@huawei.com> 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]); >> }
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]); } }
Using list_move_tail() instead of list_del() + list_add_tail() in atomisp_compat_css20.c. Reported-by: Hulk Robot <hulkci@huawei.com> Signed-off-by: Baokun Li <libaokun1@huawei.com> --- V1->V2: CC mailist .../pci/atomisp_compat_css20.c | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-)