KCOV_REMOTE_REGISTER(9) | Kernel Developer's Manual | KCOV_REMOTE_REGISTER(9)

# NAME

`kcov_remote_register`, `kcov_remote_unregister`, `kcov_remote_enter`, `kcov_remote_leave` — remote kernel code coverage collection interface

# SYNOPSIS

`#include <sys/kcov.h>`

void
`kcov_remote_register`(int subsystem, void *id);

void
`kcov_remote_unregister`(int subsystem, void *id);

void
`kcov_remote_enter`(int subsystem, void *id);

void
`kcov_remote_leave`(int subsystem, void *id);

# DESCRIPTION

These functions provide an interface to collect code coverage from various kernel subsystems using kcov(4). The subsystem must be one of the following:

`#define KCOV_REMOTE_COMMON 0`

The id must be a unique identifier for a resource tied to subsystem that is known both by kernel and user space. For instance, a network interface driver could form a subsystem using the unique interface identifier as the id.

`kcov_remote_register`() registers a new instance of the given subsystem. Calling this function more than once with the same arguments is idempotent.

`kcov_remote_unregister`() unregisters an existing instance of the given subsystem, if present. If one or many threads are currently within a remote section, `kcov_remote_unregister`() will sleep until all the sections have been left.

`kcov_remote_enter`() enters a remote section. If the current thread has kcov(4) enabled, code coverage will collected inside the remote section. Remote sections may not be nested.

`kcov_remote_leave`() leaves a remote section.

# CONTEXT

`kcov_remote_register`() and `kcov_remote_unregister`() can be called from process context. `kcov_remote_enter`() and `kcov_remote_leave`() can be called from interrupt and process context.

# CODE REFERENCES

These functions are implemented in sys/dev/kcov.c.

# SEE ALSO

kcov(4)

# HISTORY

These functions first appeared in OpenBSD 6.8.

# AUTHORS

Anton Lindqvist <anton@openbsd.org>

February 1, 2021 | Debian