Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 28384
b: refs/heads/master
c: 12e72fe
h: refs/heads/master
v: v3
  • Loading branch information
Pete Zaitcev authored and Greg Kroah-Hartman committed Jun 21, 2006
1 parent 4383860 commit 1f51eb8
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 5 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 5b1c674d223eef6c6494be8be91e9e3a3054817e
refs/heads/master: 12e72feab5d9a23107f245b0f241a2484cbb5a4e
20 changes: 16 additions & 4 deletions trunk/drivers/usb/mon/mon_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -114,20 +114,32 @@ static void mon_submit(struct usb_bus *ubus, struct urb *urb)

/*
*/
static void mon_submit_error(struct usb_bus *ubus, struct urb *urb, int err)
static void mon_submit_error(struct usb_bus *ubus, struct urb *urb, int error)
{
struct mon_bus *mbus;
unsigned long flags;
struct list_head *pos;
struct mon_reader *r;

mbus = ubus->mon_bus;
if (mbus == NULL)
goto out_unlocked;

/*
* XXX Capture the error code and the 'E' event.
*/
spin_lock_irqsave(&mbus->lock, flags);
if (mbus->nreaders == 0)
goto out_locked;

mbus->cnt_events++;
list_for_each (pos, &mbus->r_list) {
r = list_entry(pos, struct mon_reader, r_link);
r->rnf_error(r->r_data, urb, error);
}

spin_unlock_irqrestore(&mbus->lock, flags);
return;

out_locked:
spin_unlock_irqrestore(&mbus->lock, flags);
out_unlocked:
return;
}
Expand Down
27 changes: 27 additions & 0 deletions trunk/drivers/usb/mon/mon_text.c
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,32 @@ static void mon_text_complete(void *data, struct urb *urb)
mon_text_event(rp, urb, 'C');
}

static void mon_text_error(void *data, struct urb *urb, int error)
{
struct mon_reader_text *rp = data;
struct mon_event_text *ep;

if (rp->nevents >= EVENT_MAX ||
(ep = kmem_cache_alloc(rp->e_slab, SLAB_ATOMIC)) == NULL) {
rp->r.m_bus->cnt_text_lost++;
return;
}

ep->type = 'E';
ep->pipe = urb->pipe;
ep->id = (unsigned long) urb;
ep->tstamp = 0;
ep->length = 0;
ep->status = error;

ep->setup_flag = '-';
ep->data_flag = 'E';

rp->nevents++;
list_add_tail(&ep->e_link, &rp->e_list);
wake_up(&rp->wait);
}

/*
* Fetch next event from the circular buffer.
*/
Expand Down Expand Up @@ -235,6 +261,7 @@ static int mon_text_open(struct inode *inode, struct file *file)
rp->r.m_bus = mbus;
rp->r.r_data = rp;
rp->r.rnf_submit = mon_text_submit;
rp->r.rnf_error = mon_text_error;
rp->r.rnf_complete = mon_text_complete;

snprintf(rp->slab_name, SLAB_NAME_SZ, "mon%dt_%lx", ubus->busnum,
Expand Down
1 change: 1 addition & 0 deletions trunk/drivers/usb/mon/usb_mon.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ struct mon_reader {
void *r_data; /* Use container_of instead? */

void (*rnf_submit)(void *data, struct urb *urb);
void (*rnf_error)(void *data, struct urb *urb, int error);
void (*rnf_complete)(void *data, struct urb *urb);
};

Expand Down

0 comments on commit 1f51eb8

Please sign in to comment.