|
@@ -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.
|
|
|
*/
|
|
@@ -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,
|