Hi Ionut,
On Fri, Nov 5, 2010 at 9:13 AM, Ionut Nicu <[email protected]> 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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html