Re: [PATCH v2 06/12] staging: tidspbridge: convert core to list_head

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Ionut,

On Fri, Nov 5, 2010 at 9:13 AM, Ionut Nicu <ionut.nicu@xxxxxxxxx> wrote:
> Convert the core module of the tidspbridge driver
> to use struct list_head instead of struct lst_list.
>

<snip>

>        if (!status) {
>                /* Get a free chirp: */
> -               chnl_packet_obj =
> -                   (struct chnl_irp *)lst_get_head(pchnl->free_packets_list);
> -               if (chnl_packet_obj == NULL)
> +               if (!list_empty(&pchnl->free_packets_list)) {
> +                       chnl_packet_obj = list_first_entry(
> +                                       &pchnl->free_packets_list,
> +                                       struct chnl_irp, link);
> +                       list_del(&chnl_packet_obj->link);
> +               } else
>                        status = -EIO;

What do you think if we close the braces, since the first conditional
has more than one statement?

<snip>

> @@ -286,18 +286,16 @@ int bridge_chnl_cancel_io(struct chnl_object *chnl_obj)
>                }
>        }
>        /* Move all IOR's to IOC queue: */
> -       while (!LST_IS_EMPTY(pchnl->pio_requests)) {
> -               chnl_packet_obj =
> -                   (struct chnl_irp *)lst_get_head(pchnl->pio_requests);
> -               if (chnl_packet_obj) {
> -                       chnl_packet_obj->byte_size = 0;
> -                       chnl_packet_obj->status |= CHNL_IOCSTATCANCEL;
> -                       lst_put_tail(pchnl->pio_completions,
> -                                    (struct list_head *)chnl_packet_obj);
> -                       pchnl->cio_cs++;
> -                       pchnl->cio_reqs--;
> -                       DBC_ASSERT(pchnl->cio_reqs >= 0);
> -               }
> +       while (!list_empty(&pchnl->pio_requests)) {
> +               chnl_packet_obj = list_first_entry(&pchnl->pio_requests,
> +                               struct chnl_irp, link);
> +               list_del(&chnl_packet_obj->link);
> +               chnl_packet_obj->byte_size = 0;
> +               chnl_packet_obj->status |= CHNL_IOCSTATCANCEL;
> +               list_add_tail(&chnl_packet_obj->link, &pchnl->pio_completions);
> +               pchnl->cio_cs++;
> +               pchnl->cio_reqs--;
> +               DBC_ASSERT(pchnl->cio_reqs >= 0);

Why don't we use list_for_each_entry_safe() instead?

>        }
>  func_cont:
>        spin_unlock_bh(&chnl_mgr_obj->chnl_mgr_lock);

<snip>

> @@ -818,9 +804,19 @@ int bridge_chnl_open(struct chnl_object **chnl,
>        /* Protect queues from io_dpc: */
>        pchnl->dw_state = CHNL_STATECANCEL;
>        /* Allocate initial IOR and IOC queues: */
> -       pchnl->free_packets_list = create_chirp_list(pattrs->uio_reqs);
> -       pchnl->pio_requests = create_chirp_list(0);
> -       pchnl->pio_completions = create_chirp_list(0);
> +       status = create_chirp_list(&pchnl->free_packets_list,
> +                       pattrs->uio_reqs);
> +       if (status)
> +               goto func_end;
> +
> +       status = create_chirp_list(&pchnl->pio_requests, 0);
> +       if (status)
> +               goto func_end;
> +
> +       status = create_chirp_list(&pchnl->pio_completions, 0);
> +       if (status)
> +               goto func_end;
> +

With these goto you are not freeing the memory allocated for pchnl, please free
it at func_end.

Regards,
Rene
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux