/* If we fail to queue an in urb atomically (either due to skb allocation or *urbsubmission),wewillschedulearxqueueinnonatomiccontext *afteradelay,specifiedinjiffies
*/ staticconstunsignedlong RX_RETRY_DELAY = HZ / 4;
switch (status) { case -ENOENT: case -ECONNRESET: case -ESHUTDOWN: case -EPROTO:
kfree_skb(skb); return; case0: break; default:
netdev_dbg(netdev, "unexpected rx urb status: %d\n", status);
kfree_skb(skb); return;
}
len = urb->actual_length;
__skb_put(skb, len);
while (skb) { struct sk_buff *skb2 = NULL; struct mctp_usb_hdr *hdr;
u8 pkt_len; /* length of MCTP packet, no USB header */
skb_reset_mac_header(skb);
hdr = skb_pull_data(skb, sizeof(*hdr)); if (!hdr) break;
if (be16_to_cpu(hdr->id) != MCTP_USB_DMTF_ID) {
netdev_dbg(netdev, "rx: invalid id %04x\n",
be16_to_cpu(hdr->id)); break;
}
if (hdr->len < sizeof(struct mctp_hdr) + sizeof(struct mctp_usb_hdr)) {
netdev_dbg(netdev, "rx: short packet (hdr) %d\n",
hdr->len); break;
}
/* we know we have at least sizeof(struct mctp_usb_hdr) here */
pkt_len = hdr->len - sizeof(struct mctp_usb_hdr); if (pkt_len > skb->len) {
netdev_dbg(netdev, "rx: short packet (xfer) %d, actual %d\n",
hdr->len, skb->len); break;
}
if (pkt_len < skb->len) { /* more packets may follow - clone to a new *skbtouseonthenextiteration
*/
skb2 = skb_clone(skb, GFP_ATOMIC); if (skb2) { if (!skb_pull(skb2, pkt_len)) {
kfree_skb(skb2);
skb2 = NULL;
}
}
skb_trim(skb, pkt_len);
}
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Jeremy Kerr <jk@codeconstruct.com.au>");
MODULE_DESCRIPTION("MCTP USB transport");
Messung V0.5 in Prozent
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.10Bemerkung:
(vorverarbeitet am 2026-09-29)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.