Ignore:
Timestamp:
2018-01-23T21:52:28Z (7 years ago)
Author:
Ondřej Hlavatý <aearsis@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
3dd80f8
Parents:
a6afb4c
git-author:
Ondřej Hlavatý <aearsis@…> (2018-01-23 20:49:35)
git-committer:
Ondřej Hlavatý <aearsis@…> (2018-01-23 21:52:28)
Message:

usb: fix wrong design of transfer aborting

Apparently, we didn't do a good job in thinking through the problem.
In older HCs, it was done just wrong - the UHCI implementation commited
a batch that could have been already aborted, and EHCI+OHCI might miss
an interrupt because they commited the batch sooner than they added it
to their checked list.

This commit takes everything from the other end, which is probably the
only right one. Instead of an endpoint having an extra mutex, it
inherits a mutex from the outside. It never locks it though, it just
checks if the mutex is locked and uses it for waiting on condition
variables.

This mutex is supposed to be the one which the HC driver uses for
locking its structures in scheduling. This way, we avoid the ABBA
deadlock completely, while preserving the synchronization on an
endpoint.

The good thing is that this implementation is much easier to extend with
multiple active batches per endpoint.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/bus/usb/uhci/transfer_list.h

    ra6afb4c r4db49344  
    5959int transfer_list_init(transfer_list_t *, const char *);
    6060void transfer_list_set_next(transfer_list_t *, transfer_list_t *);
    61 void transfer_list_add_batch(transfer_list_t *, uhci_transfer_batch_t *);
     61int transfer_list_add_batch(transfer_list_t *, uhci_transfer_batch_t *);
    6262void transfer_list_remove_batch(transfer_list_t *, uhci_transfer_batch_t *);
    63 void transfer_list_remove_finished(transfer_list_t *, list_t *);
     63void transfer_list_check_finished(transfer_list_t *);
    6464void transfer_list_abort_all(transfer_list_t *);
    6565
Note: See TracChangeset for help on using the changeset viewer.