Commit 250cd4b0 authored by Linus Torvalds's avatar Linus Torvalds

Merge penguin:v2.5/linux

into home.transmeta.com:/home/torvalds/v2.5/linux
parents 7325bea7 c9bfb8b3
...@@ -534,6 +534,8 @@ td_fill (unsigned int info, ...@@ -534,6 +534,8 @@ td_fill (unsigned int info,
/* aim for only one interrupt per urb. mostly applies to control /* aim for only one interrupt per urb. mostly applies to control
* and iso; other urbs rarely need more than one TD per urb. * and iso; other urbs rarely need more than one TD per urb.
* this way, only final tds (or ones with an error) cause IRQs. * this way, only final tds (or ones with an error) cause IRQs.
* at least immediately; use DI=6 in case any control request is
* tempted to die part way through.
* *
* NOTE: could delay interrupts even for the last TD, and get fewer * NOTE: could delay interrupts even for the last TD, and get fewer
* interrupts ... increasing per-urb latency by sharing interrupts. * interrupts ... increasing per-urb latency by sharing interrupts.
...@@ -541,7 +543,7 @@ td_fill (unsigned int info, ...@@ -541,7 +543,7 @@ td_fill (unsigned int info,
*/ */
if (index != (urb_priv->length - 1) if (index != (urb_priv->length - 1)
|| (urb->transfer_flags & URB_NO_INTERRUPT)) || (urb->transfer_flags & URB_NO_INTERRUPT))
info |= TD_DI_SET (7); info |= TD_DI_SET (6);
/* use this td as the next dummy */ /* use this td as the next dummy */
td_pt = urb_priv->td [index]; td_pt = urb_priv->td [index];
...@@ -809,12 +811,16 @@ static struct td *dl_reverse_done_list (struct ohci_hcd *ohci) ...@@ -809,12 +811,16 @@ static struct td *dl_reverse_done_list (struct ohci_hcd *ohci)
ohci->hcca->done_head = 0; ohci->hcca->done_head = 0;
while (td_list_hc) { while (td_list_hc) {
int cc;
td_list = dma_to_td (ohci, td_list_hc); td_list = dma_to_td (ohci, td_list_hc);
td_list->hwINFO |= cpu_to_le32 (TD_DONE); td_list->hwINFO |= cpu_to_le32 (TD_DONE);
if (TD_CC_GET (le32_to_cpup (&td_list->hwINFO))) { cc = TD_CC_GET (le32_to_cpup (&td_list->hwINFO));
if (cc != TD_CC_NOERROR) {
urb_priv = (urb_priv_t *) td_list->urb->hcpriv; urb_priv = (urb_priv_t *) td_list->urb->hcpriv;
/* Non-iso endpoints can halt on error; un-halt, /* Non-iso endpoints can halt on error; un-halt,
* and dequeue any other TDs from this urb. * and dequeue any other TDs from this urb.
* No other TD could have caused the halt. * No other TD could have caused the halt.
...@@ -822,12 +828,21 @@ static struct td *dl_reverse_done_list (struct ohci_hcd *ohci) ...@@ -822,12 +828,21 @@ static struct td *dl_reverse_done_list (struct ohci_hcd *ohci)
if (td_list->ed->hwHeadP & ED_H) { if (td_list->ed->hwHeadP & ED_H) {
if (urb_priv && ((td_list->index + 1) if (urb_priv && ((td_list->index + 1)
< urb_priv->length)) { < urb_priv->length)) {
#ifdef OHCI_VERBOSE_DEBUG struct urb *urb = td_list->urb;
dbg ("urb %p TD %p (%d/%d), patch ED",
td_list->urb, td_list, /* help for troubleshooting: */
dbg ("urb %p usb-%s-%s ep-%d-%s "
"(td %d/%d), "
"cc %d --> status %d",
td_list->urb,
urb->dev->bus->bus_name,
urb->dev->devpath,
usb_pipeendpoint (urb->pipe),
usb_pipein (urb->pipe)
? "IN" : "OUT",
1 + td_list->index, 1 + td_list->index,
urb_priv->length); urb_priv->length,
#endif cc, cc_to_error [cc]);
td_list->ed->hwHeadP = td_list->ed->hwHeadP =
(urb_priv->td [urb_priv->length - 1]->hwNextTD (urb_priv->td [urb_priv->length - 1]->hwNextTD
& __constant_cpu_to_le32 (TD_MASK)) & __constant_cpu_to_le32 (TD_MASK))
......
...@@ -85,7 +85,9 @@ extern volatile int logical_apicid_to_cpu[MAX_APICID]; ...@@ -85,7 +85,9 @@ extern volatile int logical_apicid_to_cpu[MAX_APICID];
*/ */
#define smp_processor_id() (current_thread_info()->cpu) #define smp_processor_id() (current_thread_info()->cpu)
#define cpu_possible(cpu) (phys_cpu_present_map & (1<<(cpu))) extern volatile unsigned long cpu_callout_map;
#define cpu_possible(cpu) (cpu_callout_map & (1<<(cpu)))
#define cpu_online(cpu) (cpu_online_map & (1<<(cpu))) #define cpu_online(cpu) (cpu_online_map & (1<<(cpu)))
extern inline unsigned int num_online_cpus(void) extern inline unsigned int num_online_cpus(void)
...@@ -113,7 +115,6 @@ static __inline int logical_smp_processor_id(void) ...@@ -113,7 +115,6 @@ static __inline int logical_smp_processor_id(void)
return GET_APIC_LOGICAL_ID(*(unsigned long *)(APIC_BASE+APIC_LDR)); return GET_APIC_LOGICAL_ID(*(unsigned long *)(APIC_BASE+APIC_LDR));
} }
extern volatile unsigned long cpu_callout_map;
/* We don't mark CPUs online until __cpu_up(), so we need another measure */ /* We don't mark CPUs online until __cpu_up(), so we need another measure */
static inline int num_booting_cpus(void) static inline int num_booting_cpus(void)
{ {
......
...@@ -208,8 +208,6 @@ void page_remove_rmap(struct page * page, pte_t * ptep) ...@@ -208,8 +208,6 @@ void page_remove_rmap(struct page * page, pte_t * ptep)
} }
printk("\n"); printk("\n");
printk(KERN_ERR "page_remove_rmap: driver cleared PG_reserved ?\n"); printk(KERN_ERR "page_remove_rmap: driver cleared PG_reserved ?\n");
#else
BUG();
#endif #endif
out: out:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment