Lines Matching refs:mbus
21 static void mon_stop(struct mon_bus *mbus);
22 static void mon_dissolve(struct mon_bus *mbus, struct usb_bus *ubus);
34 * This must be called with mon_lock taken because of mbus->ref.
36 void mon_reader_add(struct mon_bus *mbus, struct mon_reader *r)
41 spin_lock_irqsave(&mbus->lock, flags);
42 if (mbus->nreaders == 0) {
43 if (mbus == &mon_bus0) {
50 mbus->u_bus->monitored = 1;
53 mbus->nreaders++;
54 list_add_tail(&r->r_link, &mbus->r_list);
55 spin_unlock_irqrestore(&mbus->lock, flags);
57 kref_get(&mbus->ref);
63 * This is called with mon_lock taken, so we can decrement mbus->ref.
65 void mon_reader_del(struct mon_bus *mbus, struct mon_reader *r)
69 spin_lock_irqsave(&mbus->lock, flags);
71 --mbus->nreaders;
72 if (mbus->nreaders == 0)
73 mon_stop(mbus);
74 spin_unlock_irqrestore(&mbus->lock, flags);
76 kref_put(&mbus->ref, mon_bus_drop);
81 static void mon_bus_submit(struct mon_bus *mbus, struct urb *urb)
87 spin_lock_irqsave(&mbus->lock, flags);
88 mbus->cnt_events++;
89 list_for_each (pos, &mbus->r_list) {
93 spin_unlock_irqrestore(&mbus->lock, flags);
98 struct mon_bus *mbus;
100 mbus = ubus->mon_bus;
101 if (mbus != NULL)
102 mon_bus_submit(mbus, urb);
108 static void mon_bus_submit_error(struct mon_bus *mbus, struct urb *urb, int error)
114 spin_lock_irqsave(&mbus->lock, flags);
115 mbus->cnt_events++;
116 list_for_each (pos, &mbus->r_list) {
120 spin_unlock_irqrestore(&mbus->lock, flags);
125 struct mon_bus *mbus;
127 mbus = ubus->mon_bus;
128 if (mbus != NULL)
129 mon_bus_submit_error(mbus, urb, error);
135 static void mon_bus_complete(struct mon_bus *mbus, struct urb *urb, int status)
141 spin_lock_irqsave(&mbus->lock, flags);
142 mbus->cnt_events++;
143 list_for_each (pos, &mbus->r_list) {
147 spin_unlock_irqrestore(&mbus->lock, flags);
152 struct mon_bus *mbus;
154 mbus = ubus->mon_bus;
155 if (mbus != NULL)
156 mon_bus_complete(mbus, urb, status);
165 static void mon_stop(struct mon_bus *mbus)
170 if (mbus == &mon_bus0) {
172 mbus = list_entry(p, struct mon_bus, bus_link);
176 if (mbus->nreaders == 0 && (ubus = mbus->u_bus) != NULL)
184 if (mon_bus0.nreaders == 0 && (ubus = mbus->u_bus) != NULL) {
211 struct mon_bus *mbus = ubus->mon_bus;
214 list_del(&mbus->bus_link);
215 if (mbus->text_inited)
216 mon_text_del(mbus);
217 if (mbus->bin_inited)
218 mon_bin_del(mbus);
220 mon_dissolve(mbus, ubus);
221 kref_put(&mbus->ref, mon_bus_drop);
254 static void mon_dissolve(struct mon_bus *mbus, struct usb_bus *ubus)
263 mbus->u_bus = NULL;
273 struct mon_bus *mbus = container_of(r, struct mon_bus, ref);
274 kfree(mbus);
285 struct mon_bus *mbus;
287 mbus = kzalloc(sizeof(struct mon_bus), GFP_KERNEL);
288 if (mbus == NULL)
290 kref_init(&mbus->ref);
291 spin_lock_init(&mbus->lock);
292 INIT_LIST_HEAD(&mbus->r_list);
298 mbus->u_bus = ubus;
299 ubus->mon_bus = mbus;
301 mbus->text_inited = mon_text_add(mbus, ubus);
302 mbus->bin_inited = mon_bin_add(mbus, ubus);
305 list_add_tail(&mbus->bus_link, &mon_buses);
315 struct mon_bus *mbus = &mon_bus0;
317 kref_init(&mbus->ref);
318 spin_lock_init(&mbus->lock);
319 INIT_LIST_HEAD(&mbus->r_list);
321 mbus->text_inited = mon_text_add(mbus, NULL);
322 mbus->bin_inited = mon_bin_add(mbus, NULL);
336 struct mon_bus *mbus;
342 mbus = list_entry(p, struct mon_bus, bus_link);
343 if (mbus->u_bus->busnum == num) {
344 return mbus;
386 struct mon_bus *mbus;
396 mbus = list_entry(p, struct mon_bus, bus_link);
399 if (mbus->text_inited)
400 mon_text_del(mbus);
401 if (mbus->bin_inited)
402 mon_bin_del(mbus);
409 if (mbus->nreaders) {
412 mbus->nreaders, mbus->u_bus->busnum);
413 kref_get(&mbus->ref); /* Force leak */
416 mon_dissolve(mbus, mbus->u_bus);
417 kref_put(&mbus->ref, mon_bus_drop);
420 mbus = &mon_bus0;
421 if (mbus->text_inited)
422 mon_text_del(mbus);
423 if (mbus->bin_inited)
424 mon_bin_del(mbus);