struct usbatm_vcc_data *cached_vcc = NULL;
struct atm_vcc *vcc;
struct sk_buff *sarb;
- struct usbatm_vcc_data *vcc_data;
unsigned int stride = instance->rx_channel.stride;
int vci, cached_vci = 0;
short vpi, cached_vpi = 0;
vdbg("%s: vpi %hd, vci %d, pti %d", __func__, vpi, vci, pti);
- if (cached_vcc && (vci == cached_vci) && (vpi == cached_vpi))
- vcc_data = cached_vcc;
- else if ((vcc_data = usbatm_find_vcc(instance, vpi, vci))) {
- cached_vcc = vcc_data;
+ if ((vci != cached_vci) || (vpi != cached_vpi)) {
cached_vpi = vpi;
cached_vci = vci;
- } else {
- atm_dbg(instance, "%s: unknown vpi/vci (%hd/%d)!\n", __func__, vpi, vci);
- continue;
+
+ cached_vcc = usbatm_find_vcc(instance, vpi, vci);
+
+ if (!cached_vcc)
+ atm_dbg(instance, "%s: unknown vpi/vci (%hd/%d)!\n", __func__, vpi, vci);
}
- vcc = vcc_data->vcc;
+ if (!cached_vcc)
+ continue;
+
+ vcc = cached_vcc->vcc;
/* OAM F5 end-to-end */
if (pti == ATM_PTI_E2EF5) {
continue;
}
- sarb = vcc_data->sarb;
+ sarb = cached_vcc->sarb;
if (sarb->tail + ATM_CELL_PAYLOAD > sarb->end) {
atm_dbg(instance, "%s: buffer overrun (sarb->len %u, vcc: 0x%p)!\n",
intf->altsetting->desc.bInterfaceNumber);
/* instance init */
- instance = kmalloc(sizeof(*instance) + sizeof(struct urb *) * (num_rcv_urbs + num_snd_urbs),
- GFP_KERNEL);
+ instance = kcalloc(1, sizeof(*instance) + sizeof(struct urb *) * (num_rcv_urbs + num_snd_urbs), GFP_KERNEL);
if (!instance) {
dev_dbg(dev, "%s: no memory for instance data!\n", __func__);
return -ENOMEM;
}
- memset(instance, 0, sizeof(*instance));
-
/* public fields */
instance->driver = driver;
goto fail_unbind;
}
+ instance->urbs[i] = urb;
+
buffer = kmalloc(channel->buf_size, GFP_KERNEL);
if (!buffer) {
dev_dbg(dev, "%s: no memory for buffer %d!\n", __func__, i);
vdbg("%s: alloced buffer 0x%p buf size %u urb 0x%p",
__func__, urb->transfer_buffer, urb->transfer_buffer_length, urb);
- instance->urbs[i] = urb;
}
if (need_heavy && driver->heavy_init) {