Alan, I found it is too complicated to make those changes... Seems current best patch is still make ehci_qh all item 32-bit aligned... Thanks, Alek On Wed, 17 Jun 2009 12:24:00 +0800 Alek Du <alek.du@xxxxxxxxx> wrote: > On Tue, 16 Jun 2009 23:11:06 +0800 > Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> wrote: > > > On Tue, 16 Jun 2009, Alek Du wrote: > > > > > Have to send v2 version again, fixed a qh_destroy issue. > > > > > > > > I'm sorry to put you through all this work, but the patch you wrote is > > backwards! > > > It is not simple just let ehci_qh contain the soft part, since the ehci_shadow requires > the hardware part to be the first part... > > /* > * Entries in periodic shadow table are pointers to one of four kinds > * of data structure. That's dictated by the hardware; a type tag is > * encoded in the low bits of the hardware's periodic schedule. Use > * Q_NEXT_TYPE to get the tag. > * > * For entries in the async schedule, the type tag always says "qh". > */ > union ehci_shadow { > struct ehci_qh *qh; /* Q_TYPE_QH */ > struct ehci_itd *itd; /* Q_TYPE_ITD */ > struct ehci_sitd *sitd; /* Q_TYPE_SITD */ > struct ehci_fstn *fstn; /* Q_TYPE_FSTN */ > __hc32 *hw_next; /* (all types) */ > void *ptr; > }; > > > Unless if I split all the ehci_qh, ehci_itd, ehci_sitd, ehci_fstn part into two parts... > > union ehci_shadow { > struct ehci_qh_hw *qh; /* Q_TYPE_QH */ > struct ehci_itd_hw *itd; /* Q_TYPE_ITD */ > struct ehci_sitd_hw *sitd; /* Q_TYPE_SITD */ > struct ehci_fstn_hw *fstn; /* Q_TYPE_FSTN */ > __hc32 *hw_next; /* (all types) */ > void *ptr; > }; > > Thanks, > Alek > -- > To unsubscribe from this list: send the line "unsubscribe linux-usb" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html