Thread (4 messages) 4 messages, 2 authors, 2020-11-23

Re: [PATCH v3] kcov, usbip: collect coverage from vhci_rx_loop

From: Andrey Konovalov <hidden>
Date: 2020-11-23 23:42:04
Also in: lkml

On Mon, Oct 19, 2020 at 8:52 PM Shuah Khan [off-list ref] wrote:
On 10/19/20 12:49 PM, Shuah Khan wrote:
quoted
On 10/19/20 11:20 AM, Andrey Konovalov wrote:
quoted
From: Nazime Hande Harputluoglu <redacted>

Add kcov_remote_start()/kcov_remote_stop() annotations to the
vhci_rx_loop() function, which is responsible for parsing USB/IP packets
coming into USB/IP client.

Since vhci_rx_loop() threads are spawned per vhci_hcd device instance,
the
common kcov handle is used for kcov_remote_start()/stop() annotations
(see Documentation/dev-tools/kcov.rst for details). As the result kcov
can now be used to collect coverage from vhci_rx_loop() threads.

Signed-off-by: Nazime Hande Harputluoglu <redacted>
Signed-off-by: Andrey Konovalov <redacted>
---

Changes v2->v3:
- Fix build without KCOV enabled.

---
  drivers/usb/usbip/usbip_common.h | 4 ++++
  drivers/usb/usbip/vhci_rx.c      | 7 +++++++
  drivers/usb/usbip/vhci_sysfs.c   | 4 ++++
  3 files changed, 15 insertions(+)
diff --git a/drivers/usb/usbip/usbip_common.h
b/drivers/usb/usbip/usbip_common.h
index 8be857a4fa13..0906182011d6 100644
--- a/drivers/usb/usbip/usbip_common.h
+++ b/drivers/usb/usbip/usbip_common.h
@@ -277,6 +277,10 @@ struct usbip_device {
          void (*reset)(struct usbip_device *);
          void (*unusable)(struct usbip_device *);
      } eh_ops;
+
+#ifdef CONFIG_KCOV
+    u64 kcov_handle;
+#endif
  };
  #define kthread_get_run(threadfn, data, namefmt, ...)               \
diff --git a/drivers/usb/usbip/vhci_rx.c b/drivers/usb/usbip/vhci_rx.c
index 266024cbb64f..68ec0aa64f69 100644
--- a/drivers/usb/usbip/vhci_rx.c
+++ b/drivers/usb/usbip/vhci_rx.c
@@ -3,6 +3,7 @@
   * Copyright (C) 2003-2008 Takahiro Hirofuchi
   */
+#include <linux/kcov.h>
  #include <linux/kthread.h>
  #include <linux/slab.h>
@@ -261,7 +262,13 @@ int vhci_rx_loop(void *data)
          if (usbip_event_happened(ud))
              break;
+#ifdef CONFIG_KCOV
+        kcov_remote_start_common(ud->kcov_handle);
+#endif
          vhci_rx_pdu(ud);
+#ifdef CONFIG_KCOV
+        kcov_remote_stop();
+#endif
      }
Let's move these into usbip_common.h as inline functions along
the line of

#ifdef CONFIG_KCOV
usbip_kcov_remote_start_common(ud)
{
   kcov_remote_start_common(ud->kcov_handle);
}

usbip_kcov_remote_stop_common(ud)
{
   kcov_remote_stop_common(ud->kcov_handle);
}
#else
stubs that do nothing
#endif
Sounds good, will mail a new version shortly. Sorry for a delay, I was
busy with other work.
quoted
quoted
      return 0;
diff --git a/drivers/usb/usbip/vhci_sysfs.c
b/drivers/usb/usbip/vhci_sysfs.c
index be37aec250c2..e167b8a445ad 100644
--- a/drivers/usb/usbip/vhci_sysfs.c
+++ b/drivers/usb/usbip/vhci_sysfs.c
@@ -4,6 +4,7 @@
   * Copyright (C) 2015-2016 Nobuo Iwata
   */
+#include <linux/kcov.h>
  #include <linux/kthread.h>
  #include <linux/file.h>
  #include <linux/net.h>
@@ -383,6 +384,9 @@ static ssize_t attach_store(struct device *dev,
struct device_attribute *attr,
      vdev->ud.sockfd     = sockfd;
      vdev->ud.tcp_socket = socket;
      vdev->ud.status     = VDEV_ST_NOTASSIGNED;
+#ifdef CONFIG_KCOV
+    vdev->ud.kcov_handle = kcov_common_handle();
+#endif

Same here add a usbip_kcov_handle_init(ud)
btw - I am seeing bounces on handeharputlu@google.com address.
Hande is no longer at Google, so the email is no longer valid. I think
it makes sense to preserve the original email address in the patch.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help