Merge "net: qrtr: log rx packet causing system wakeup"

This commit is contained in:
qctecmdr 2021-05-26 20:35:31 -07:00 • committed by Gerrit - the friendly Code Review server
commit d9fac93cb5
5 changed files with 55 additions and 3 deletions

View file

@ -56,6 +56,8 @@ do { \
#define RPM_GLINK_CID_MAX 65536
static int should_wake;
int glink_resume_pkt;
EXPORT_SYMBOL(glink_resume_pkt);
struct glink_msg {
__le16 cmd;
@ -1246,8 +1248,11 @@ static irqreturn_t qcom_glink_native_intr(int irq, void *data)
unsigned int cmd;
int ret = 0;
if (should_wake)
if (should_wake) {
pr_info("%s: %d triggered %s\n", __func__, irq, glink->irqname);
glink_resume_pkt = true;
pm_system_wakeup();
}
/* To wakeup any blocking writers */
wake_up_all(&glink->tx_avail_notify);

View file

@ -28,6 +28,7 @@ struct qcom_glink_pipe {
struct qcom_glink;
extern const struct dev_pm_ops glink_native_pm_ops;
extern int glink_resume_pkt;
struct qcom_glink *qcom_glink_native_probe(struct device *dev,
unsigned long features,

View file

@ -1,7 +1,7 @@
// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
/*
* Copyright (c) 2015, Sony Mobile Communications Inc.
* Copyright (c) 2013, 2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2013, 2020-2021, The Linux Foundation. All rights reserved.
* Copyright (c) 2020, Linaro Ltd.
*/
@ -98,6 +98,25 @@ static struct qrtr_node *node_get(unsigned int node_id)
return node;
}
unsigned int qrtr_get_service_id(unsigned int node_id, unsigned int port_id)
{
struct qrtr_server *srv;
struct qrtr_node *node;
unsigned long index;
node = node_get(node_id);
if (!node)
return 0;
xa_for_each(&node->servers, index, srv) {
if (srv->node == node_id && srv->port == port_id)
return srv->service;
}
return 0;
}
EXPORT_SYMBOL(qrtr_get_service_id);
static int server_match(const struct qrtr_server *srv,
const struct qrtr_server_filter *f)
{

View file

@ -1,7 +1,7 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
* Copyright (c) 2015, Sony Mobile Communications Inc.
* Copyright (c) 2013, 2018-2019 The Linux Foundation. All rights reserved.
* Copyright (c) 2013, 2018-2019, 2021, The Linux Foundation. All rights reserved.
*/
#include <linux/kthread.h>
#include <linux/module.h>
@ -40,6 +40,11 @@
#define AID_VENDOR_QRTR KGIDT_INIT(2906)
#if defined(CONFIG_RPMSG_QCOM_GLINK_NATIVE)
extern bool glink_resume_pkt;
#endif
extern unsigned int qrtr_get_service_id(unsigned int node_id,
unsigned int port_id);
/**
* struct qrtr_hdr_v1 - (I|R)PCrouter packet header version 1
* @version: protocol version
@ -269,6 +274,23 @@ static void qrtr_log_tx_msg(struct qrtr_node *node, struct qrtr_hdr_v1 *hdr,
}
}
#if defined(CONFIG_RPMSG_QCOM_GLINK_NATIVE)
static void qrtr_log_resume_pkt(struct qrtr_cb *cb, u64 pl_buf)
{
unsigned int service_id;
if (glink_resume_pkt) {
glink_resume_pkt = false;
service_id = qrtr_get_service_id(cb->src_node, cb->src_port);
pr_info("[QRTR RESUME PKT]:src[0x%x:0x%x] dst[0x%x:0x%x] [%08x %08x]: service[0x%x]\n",
cb->src_node, cb->src_port,
cb->dst_node, cb->dst_port,
(unsigned int)pl_buf, (unsigned int)(pl_buf >> 32),
service_id);
}
}
#endif
static void qrtr_log_rx_msg(struct qrtr_node *node, struct sk_buff *skb)
{
struct qrtr_ctrl_pkt pkt = {0,};
@ -287,6 +309,9 @@ static void qrtr_log_rx_msg(struct qrtr_node *node, struct sk_buff *skb)
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));
#if defined(CONFIG_RPMSG_QCOM_GLINK_NATIVE)
qrtr_log_resume_pkt(cb, pl_buf);
#endif
} else {
skb_copy_bits(skb, 0, &pkt, sizeof(pkt));
if (cb->type == QRTR_TYPE_NEW_SERVER ||

View file

@ -38,4 +38,6 @@ void qrtr_ns_init(void);
void qrtr_ns_remove(void);
int qrtr_peek_pkt_size(const void *data);
unsigned int qrtr_get_service_id(unsigned int node_id, unsigned int port_id);
#endif