Loading net/qrtr/qrtr.c +40 −50 Original line number Diff line number Diff line Loading @@ -202,14 +202,14 @@ static int qrtr_bcast_enqueue(struct qrtr_node *node, struct sk_buff *skb, static void qrtr_log_tx_msg(struct qrtr_node *node, struct qrtr_hdr_v1 *hdr, struct sk_buff *skb) { const struct qrtr_ctrl_pkt *pkt; struct qrtr_ctrl_pkt pkt = {0,}; u64 pl_buf = 0; if (!hdr || !skb || !skb->data) if (!hdr || !skb) return; if (hdr->type == QRTR_TYPE_DATA) { pl_buf = *(u64 *)(skb->data + QRTR_HDR_MAX_SIZE); skb_copy_bits(skb, QRTR_HDR_MAX_SIZE, &pl_buf, sizeof(pl_buf)); QRTR_INFO(node->ilc, "TX DATA: Len:0x%x CF:0x%x src[0x%x:0x%x] dst[0x%x:0x%x] [%08x %08x] [%s]\n", hdr->size, hdr->confirm_rx, Loading @@ -218,21 +218,21 @@ static void qrtr_log_tx_msg(struct qrtr_node *node, struct qrtr_hdr_v1 *hdr, (unsigned int)pl_buf, (unsigned int)(pl_buf >> 32), current->comm); } else { pkt = (struct qrtr_ctrl_pkt *)(skb->data + QRTR_HDR_MAX_SIZE); skb_copy_bits(skb, QRTR_HDR_MAX_SIZE, &pkt, sizeof(pkt)); if (hdr->type == QRTR_TYPE_NEW_SERVER || hdr->type == QRTR_TYPE_DEL_SERVER) QRTR_INFO(node->ilc, "TX CTRL: cmd:0x%x SVC[0x%x:0x%x] addr[0x%x:0x%x]\n", hdr->type, le32_to_cpu(pkt->server.service), le32_to_cpu(pkt->server.instance), le32_to_cpu(pkt->server.node), le32_to_cpu(pkt->server.port)); hdr->type, le32_to_cpu(pkt.server.service), le32_to_cpu(pkt.server.instance), le32_to_cpu(pkt.server.node), le32_to_cpu(pkt.server.port)); else if (hdr->type == QRTR_TYPE_DEL_CLIENT || hdr->type == QRTR_TYPE_RESUME_TX) QRTR_INFO(node->ilc, "TX CTRL: cmd:0x%x addr[0x%x:0x%x]\n", hdr->type, le32_to_cpu(pkt->client.node), le32_to_cpu(pkt->client.port)); hdr->type, le32_to_cpu(pkt.client.node), le32_to_cpu(pkt.client.port)); else if (hdr->type == QRTR_TYPE_HELLO || hdr->type == QRTR_TYPE_BYE) QRTR_INFO(node->ilc, Loading @@ -241,13 +241,13 @@ static void qrtr_log_tx_msg(struct qrtr_node *node, struct qrtr_hdr_v1 *hdr, else if (hdr->type == QRTR_TYPE_DEL_PROC) QRTR_INFO(node->ilc, "TX CTRL: cmd:0x%x node[0x%x]\n", hdr->type, pkt->proc.node); hdr->type, pkt.proc.node); } } static void qrtr_log_rx_msg(struct qrtr_node *node, struct sk_buff *skb) { const struct qrtr_ctrl_pkt *pkt; struct qrtr_ctrl_pkt pkt = {0,}; struct qrtr_cb *cb; u64 pl_buf = 0; Loading @@ -257,28 +257,28 @@ static void qrtr_log_rx_msg(struct qrtr_node *node, struct sk_buff *skb) cb = (struct qrtr_cb *)skb->cb; if (cb->type == QRTR_TYPE_DATA) { pl_buf = *(u64 *)(skb->data); skb_copy_bits(skb, 0, &pl_buf, sizeof(pl_buf)); QRTR_INFO(node->ilc, "RX DATA: Len:0x%x CF:0x%x src[0x%x:0x%x] dst[0x%x:0x%x] [%08x %08x]\n", skb->len, cb->confirm_rx, cb->src_node, cb->src_port, cb->dst_node, cb->dst_port, (unsigned int)pl_buf, (unsigned int)(pl_buf >> 32)); } else { pkt = (struct qrtr_ctrl_pkt *)(skb->data); skb_copy_bits(skb, 0, &pkt, sizeof(pkt)); if (cb->type == QRTR_TYPE_NEW_SERVER || cb->type == QRTR_TYPE_DEL_SERVER) QRTR_INFO(node->ilc, "RX CTRL: cmd:0x%x SVC[0x%x:0x%x] addr[0x%x:0x%x]\n", cb->type, le32_to_cpu(pkt->server.service), le32_to_cpu(pkt->server.instance), le32_to_cpu(pkt->server.node), le32_to_cpu(pkt->server.port)); cb->type, le32_to_cpu(pkt.server.service), le32_to_cpu(pkt.server.instance), le32_to_cpu(pkt.server.node), le32_to_cpu(pkt.server.port)); else if (cb->type == QRTR_TYPE_DEL_CLIENT || cb->type == QRTR_TYPE_RESUME_TX) QRTR_INFO(node->ilc, "RX CTRL: cmd:0x%x addr[0x%x:0x%x]\n", cb->type, le32_to_cpu(pkt->client.node), le32_to_cpu(pkt->client.port)); cb->type, le32_to_cpu(pkt.client.node), le32_to_cpu(pkt.client.port)); else if (cb->type == QRTR_TYPE_HELLO || cb->type == QRTR_TYPE_BYE) QRTR_INFO(node->ilc, Loading Loading @@ -384,20 +384,20 @@ static void qrtr_tx_resume(struct qrtr_node *node, struct sk_buff *skb) { struct qrtr_tx_flow_waiter *waiter; struct qrtr_tx_flow_waiter *temp; struct qrtr_ctrl_pkt *pkt; struct qrtr_ctrl_pkt pkt = {0,}; struct qrtr_tx_flow *flow; struct sockaddr_qrtr src; struct qrtr_sock *ipc; struct sk_buff *skbn; unsigned long key; pkt = (struct qrtr_ctrl_pkt *)skb->data; if (le32_to_cpu(pkt->cmd) != QRTR_TYPE_RESUME_TX) skb_copy_bits(skb, 0, &pkt, sizeof(pkt)); if (le32_to_cpu(pkt.cmd) != QRTR_TYPE_RESUME_TX) return; src.sq_family = AF_QIPCRTR; src.sq_node = le32_to_cpu(pkt->client.node); src.sq_port = le32_to_cpu(pkt->client.port); src.sq_node = le32_to_cpu(pkt.client.node); src.sq_port = le32_to_cpu(pkt.client.port); key = (u64)src.sq_node << 32 | src.sq_port; flow = radix_tree_lookup(&node->qrtr_tx_flow, key); Loading Loading @@ -693,24 +693,18 @@ int qrtr_endpoint_post(struct qrtr_endpoint *ep, const void *data, size_t len) struct sk_buff *skb; struct qrtr_cb *cb; unsigned int size; int err = -ENOMEM; int frag = false; int errcode; unsigned int ver; size_t hdrlen; if (len & 3) return -EINVAL; skb = netdev_alloc_skb(NULL, len); if (!skb) { skb = alloc_skb_with_frags(0, len, 0, &err, GFP_ATOMIC); if (!skb) { pr_err("%s memory allocation failed\n", __func__); skb = alloc_skb_with_frags(sizeof(*v1), len, 0, &errcode, GFP_ATOMIC); if (!skb) return -ENOMEM; } frag = true; } skb_reserve(skb, sizeof(*v1)); cb = (struct qrtr_cb *)skb->cb; /* Version field in v1 is little endian, so this works for both cases */ Loading Loading @@ -765,13 +759,9 @@ int qrtr_endpoint_post(struct qrtr_endpoint *ep, const void *data, size_t len) pm_wakeup_ws_event(node->ws, 0, true); if (frag) { skb->data_len = size; skb->len = size; skb_store_bits(skb, 0, data + hdrlen, size); } else { skb_put_data(skb, data + hdrlen, size); } qrtr_log_rx_msg(node, skb); skb_queue_tail(&node->rx_queue, skb); Loading Loading @@ -892,7 +882,7 @@ static void qrtr_node_rx_work(struct kthread_work *work) { struct qrtr_node *node = container_of(work, struct qrtr_node, read_data); struct qrtr_ctrl_pkt *pkt; struct qrtr_ctrl_pkt pkt = {0,}; struct sk_buff *skb; while ((skb = skb_dequeue(&node->rx_queue)) != NULL) { Loading @@ -906,9 +896,9 @@ static void qrtr_node_rx_work(struct kthread_work *work) qrtr_fwd_ctrl_pkt(skb); if (cb->type == QRTR_TYPE_NEW_SERVER && skb->len == sizeof(*pkt)) { pkt = (void *)skb->data; qrtr_node_assign(node, le32_to_cpu(pkt->server.node)); skb->len == sizeof(pkt)) { skb_copy_bits(skb, 0, &pkt, sizeof(pkt)); qrtr_node_assign(node, le32_to_cpu(pkt.server.node)); } if (cb->type == QRTR_TYPE_RESUME_TX) { Loading Loading @@ -1392,7 +1382,7 @@ static int qrtr_sendmsg(struct socket *sock, struct msghdr *msg, size_t len) unsigned int); struct qrtr_sock *ipc = qrtr_sk(sock->sk); struct sock *sk = sock->sk; struct qrtr_ctrl_pkt *pkt; struct qrtr_ctrl_pkt pkt; struct qrtr_node *node; struct qrtr_node *srv_node; struct sk_buff *skb; Loading Loading @@ -1485,8 +1475,8 @@ static int qrtr_sendmsg(struct socket *sock, struct msghdr *msg, size_t len) ipc->state = QRTR_STATE_MULTI; /* drop new server cmds that are not forwardable to dst node*/ pkt = (struct qrtr_ctrl_pkt *)skb->data; srv_node = qrtr_node_lookup(pkt->server.node); skb_copy_bits(skb, 0, &pkt, sizeof(pkt)); srv_node = qrtr_node_lookup(le32_to_cpu(pkt.server.node)); if (!qrtr_must_forward(srv_node, node, type)) { rc = 0; kfree_skb(skb); Loading Loading
net/qrtr/qrtr.c +40 −50 Original line number Diff line number Diff line Loading @@ -202,14 +202,14 @@ static int qrtr_bcast_enqueue(struct qrtr_node *node, struct sk_buff *skb, static void qrtr_log_tx_msg(struct qrtr_node *node, struct qrtr_hdr_v1 *hdr, struct sk_buff *skb) { const struct qrtr_ctrl_pkt *pkt; struct qrtr_ctrl_pkt pkt = {0,}; u64 pl_buf = 0; if (!hdr || !skb || !skb->data) if (!hdr || !skb) return; if (hdr->type == QRTR_TYPE_DATA) { pl_buf = *(u64 *)(skb->data + QRTR_HDR_MAX_SIZE); skb_copy_bits(skb, QRTR_HDR_MAX_SIZE, &pl_buf, sizeof(pl_buf)); QRTR_INFO(node->ilc, "TX DATA: Len:0x%x CF:0x%x src[0x%x:0x%x] dst[0x%x:0x%x] [%08x %08x] [%s]\n", hdr->size, hdr->confirm_rx, Loading @@ -218,21 +218,21 @@ static void qrtr_log_tx_msg(struct qrtr_node *node, struct qrtr_hdr_v1 *hdr, (unsigned int)pl_buf, (unsigned int)(pl_buf >> 32), current->comm); } else { pkt = (struct qrtr_ctrl_pkt *)(skb->data + QRTR_HDR_MAX_SIZE); skb_copy_bits(skb, QRTR_HDR_MAX_SIZE, &pkt, sizeof(pkt)); if (hdr->type == QRTR_TYPE_NEW_SERVER || hdr->type == QRTR_TYPE_DEL_SERVER) QRTR_INFO(node->ilc, "TX CTRL: cmd:0x%x SVC[0x%x:0x%x] addr[0x%x:0x%x]\n", hdr->type, le32_to_cpu(pkt->server.service), le32_to_cpu(pkt->server.instance), le32_to_cpu(pkt->server.node), le32_to_cpu(pkt->server.port)); hdr->type, le32_to_cpu(pkt.server.service), le32_to_cpu(pkt.server.instance), le32_to_cpu(pkt.server.node), le32_to_cpu(pkt.server.port)); else if (hdr->type == QRTR_TYPE_DEL_CLIENT || hdr->type == QRTR_TYPE_RESUME_TX) QRTR_INFO(node->ilc, "TX CTRL: cmd:0x%x addr[0x%x:0x%x]\n", hdr->type, le32_to_cpu(pkt->client.node), le32_to_cpu(pkt->client.port)); hdr->type, le32_to_cpu(pkt.client.node), le32_to_cpu(pkt.client.port)); else if (hdr->type == QRTR_TYPE_HELLO || hdr->type == QRTR_TYPE_BYE) QRTR_INFO(node->ilc, Loading @@ -241,13 +241,13 @@ static void qrtr_log_tx_msg(struct qrtr_node *node, struct qrtr_hdr_v1 *hdr, else if (hdr->type == QRTR_TYPE_DEL_PROC) QRTR_INFO(node->ilc, "TX CTRL: cmd:0x%x node[0x%x]\n", hdr->type, pkt->proc.node); hdr->type, pkt.proc.node); } } static void qrtr_log_rx_msg(struct qrtr_node *node, struct sk_buff *skb) { const struct qrtr_ctrl_pkt *pkt; struct qrtr_ctrl_pkt pkt = {0,}; struct qrtr_cb *cb; u64 pl_buf = 0; Loading @@ -257,28 +257,28 @@ static void qrtr_log_rx_msg(struct qrtr_node *node, struct sk_buff *skb) cb = (struct qrtr_cb *)skb->cb; if (cb->type == QRTR_TYPE_DATA) { pl_buf = *(u64 *)(skb->data); skb_copy_bits(skb, 0, &pl_buf, sizeof(pl_buf)); QRTR_INFO(node->ilc, "RX DATA: Len:0x%x CF:0x%x src[0x%x:0x%x] dst[0x%x:0x%x] [%08x %08x]\n", skb->len, cb->confirm_rx, cb->src_node, cb->src_port, cb->dst_node, cb->dst_port, (unsigned int)pl_buf, (unsigned int)(pl_buf >> 32)); } else { pkt = (struct qrtr_ctrl_pkt *)(skb->data); skb_copy_bits(skb, 0, &pkt, sizeof(pkt)); if (cb->type == QRTR_TYPE_NEW_SERVER || cb->type == QRTR_TYPE_DEL_SERVER) QRTR_INFO(node->ilc, "RX CTRL: cmd:0x%x SVC[0x%x:0x%x] addr[0x%x:0x%x]\n", cb->type, le32_to_cpu(pkt->server.service), le32_to_cpu(pkt->server.instance), le32_to_cpu(pkt->server.node), le32_to_cpu(pkt->server.port)); cb->type, le32_to_cpu(pkt.server.service), le32_to_cpu(pkt.server.instance), le32_to_cpu(pkt.server.node), le32_to_cpu(pkt.server.port)); else if (cb->type == QRTR_TYPE_DEL_CLIENT || cb->type == QRTR_TYPE_RESUME_TX) QRTR_INFO(node->ilc, "RX CTRL: cmd:0x%x addr[0x%x:0x%x]\n", cb->type, le32_to_cpu(pkt->client.node), le32_to_cpu(pkt->client.port)); cb->type, le32_to_cpu(pkt.client.node), le32_to_cpu(pkt.client.port)); else if (cb->type == QRTR_TYPE_HELLO || cb->type == QRTR_TYPE_BYE) QRTR_INFO(node->ilc, Loading Loading @@ -384,20 +384,20 @@ static void qrtr_tx_resume(struct qrtr_node *node, struct sk_buff *skb) { struct qrtr_tx_flow_waiter *waiter; struct qrtr_tx_flow_waiter *temp; struct qrtr_ctrl_pkt *pkt; struct qrtr_ctrl_pkt pkt = {0,}; struct qrtr_tx_flow *flow; struct sockaddr_qrtr src; struct qrtr_sock *ipc; struct sk_buff *skbn; unsigned long key; pkt = (struct qrtr_ctrl_pkt *)skb->data; if (le32_to_cpu(pkt->cmd) != QRTR_TYPE_RESUME_TX) skb_copy_bits(skb, 0, &pkt, sizeof(pkt)); if (le32_to_cpu(pkt.cmd) != QRTR_TYPE_RESUME_TX) return; src.sq_family = AF_QIPCRTR; src.sq_node = le32_to_cpu(pkt->client.node); src.sq_port = le32_to_cpu(pkt->client.port); src.sq_node = le32_to_cpu(pkt.client.node); src.sq_port = le32_to_cpu(pkt.client.port); key = (u64)src.sq_node << 32 | src.sq_port; flow = radix_tree_lookup(&node->qrtr_tx_flow, key); Loading Loading @@ -693,24 +693,18 @@ int qrtr_endpoint_post(struct qrtr_endpoint *ep, const void *data, size_t len) struct sk_buff *skb; struct qrtr_cb *cb; unsigned int size; int err = -ENOMEM; int frag = false; int errcode; unsigned int ver; size_t hdrlen; if (len & 3) return -EINVAL; skb = netdev_alloc_skb(NULL, len); if (!skb) { skb = alloc_skb_with_frags(0, len, 0, &err, GFP_ATOMIC); if (!skb) { pr_err("%s memory allocation failed\n", __func__); skb = alloc_skb_with_frags(sizeof(*v1), len, 0, &errcode, GFP_ATOMIC); if (!skb) return -ENOMEM; } frag = true; } skb_reserve(skb, sizeof(*v1)); cb = (struct qrtr_cb *)skb->cb; /* Version field in v1 is little endian, so this works for both cases */ Loading Loading @@ -765,13 +759,9 @@ int qrtr_endpoint_post(struct qrtr_endpoint *ep, const void *data, size_t len) pm_wakeup_ws_event(node->ws, 0, true); if (frag) { skb->data_len = size; skb->len = size; skb_store_bits(skb, 0, data + hdrlen, size); } else { skb_put_data(skb, data + hdrlen, size); } qrtr_log_rx_msg(node, skb); skb_queue_tail(&node->rx_queue, skb); Loading Loading @@ -892,7 +882,7 @@ static void qrtr_node_rx_work(struct kthread_work *work) { struct qrtr_node *node = container_of(work, struct qrtr_node, read_data); struct qrtr_ctrl_pkt *pkt; struct qrtr_ctrl_pkt pkt = {0,}; struct sk_buff *skb; while ((skb = skb_dequeue(&node->rx_queue)) != NULL) { Loading @@ -906,9 +896,9 @@ static void qrtr_node_rx_work(struct kthread_work *work) qrtr_fwd_ctrl_pkt(skb); if (cb->type == QRTR_TYPE_NEW_SERVER && skb->len == sizeof(*pkt)) { pkt = (void *)skb->data; qrtr_node_assign(node, le32_to_cpu(pkt->server.node)); skb->len == sizeof(pkt)) { skb_copy_bits(skb, 0, &pkt, sizeof(pkt)); qrtr_node_assign(node, le32_to_cpu(pkt.server.node)); } if (cb->type == QRTR_TYPE_RESUME_TX) { Loading Loading @@ -1392,7 +1382,7 @@ static int qrtr_sendmsg(struct socket *sock, struct msghdr *msg, size_t len) unsigned int); struct qrtr_sock *ipc = qrtr_sk(sock->sk); struct sock *sk = sock->sk; struct qrtr_ctrl_pkt *pkt; struct qrtr_ctrl_pkt pkt; struct qrtr_node *node; struct qrtr_node *srv_node; struct sk_buff *skb; Loading Loading @@ -1485,8 +1475,8 @@ static int qrtr_sendmsg(struct socket *sock, struct msghdr *msg, size_t len) ipc->state = QRTR_STATE_MULTI; /* drop new server cmds that are not forwardable to dst node*/ pkt = (struct qrtr_ctrl_pkt *)skb->data; srv_node = qrtr_node_lookup(pkt->server.node); skb_copy_bits(skb, 0, &pkt, sizeof(pkt)); srv_node = qrtr_node_lookup(le32_to_cpu(pkt.server.node)); if (!qrtr_must_forward(srv_node, node, type)) { rc = 0; kfree_skb(skb); Loading