svn commit: r344432 - in head: sys/kern tests/sys/kern
Andrew Turner
andrew at FreeBSD.org
Thu Feb 21 10:11:17 UTC 2019
Author: andrew
Date: Thu Feb 21 10:11:15 2019
New Revision: 344432
URL: https://svnweb.freebsd.org/changeset/base/344432
Log:
Allow the kcov buffer to be mmaped multiple times.
After r344391 this restriction is no longer needed.
Sponsored by: DARPA, AFRL
Modified:
head/sys/kern/kern_kcov.c
head/tests/sys/kern/kcov.c
Modified: head/sys/kern/kern_kcov.c
==============================================================================
--- head/sys/kern/kern_kcov.c Thu Feb 21 09:54:57 2019 (r344431)
+++ head/sys/kern/kern_kcov.c Thu Feb 21 10:11:15 2019 (r344432)
@@ -127,7 +127,6 @@ struct kcov_info {
size_t bufsize; /* (o) */
kcov_state_t state; /* (s) */
int mode; /* (l) */
- bool mmap;
};
/* Prototypes */
@@ -303,7 +302,6 @@ kcov_open(struct cdev *dev, int oflags, int devtype, s
info->state = KCOV_STATE_OPEN;
info->thread = NULL;
info->mode = -1;
- info->mmap = false;
if ((error = devfs_set_cdevpriv(info, kcov_mmap_cleanup)) != 0)
kcov_mmap_cleanup(info);
@@ -344,12 +342,10 @@ kcov_mmap_single(struct cdev *dev, vm_ooffset_t *offse
if ((error = devfs_get_cdevpriv((void **)&info)) != 0)
return (error);
- if (info->kvaddr == 0 || size / KCOV_ELEMENT_SIZE != info->entries ||
- info->mmap != false)
+ if (info->kvaddr == 0 || size / KCOV_ELEMENT_SIZE != info->entries)
return (EINVAL);
vm_object_reference(info->bufobj);
- info->mmap = true;
*offset = 0;
*object = info->bufobj;
return (0);
Modified: head/tests/sys/kern/kcov.c
==============================================================================
--- head/tests/sys/kern/kcov.c Thu Feb 21 09:54:57 2019 (r344431)
+++ head/tests/sys/kern/kcov.c Thu Feb 21 10:11:15 2019 (r344432)
@@ -80,7 +80,7 @@ ATF_TC_BODY(kcov_bufsize, tc)
ATF_TC_WITHOUT_HEAD(kcov_mmap);
ATF_TC_BODY(kcov_mmap, tc)
{
- void *data;
+ void *data1, *data2;
int fd;
fd = open_kcov();
@@ -95,12 +95,18 @@ ATF_TC_BODY(kcov_mmap, tc)
fd, 0) == MAP_FAILED);
ATF_CHECK(mmap(NULL, 3 * PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED,
fd, 0) == MAP_FAILED);
- ATF_REQUIRE((data = mmap(NULL, 2 * PAGE_SIZE, PROT_READ | PROT_WRITE,
+ ATF_REQUIRE((data1 = mmap(NULL, 2 * PAGE_SIZE, PROT_READ | PROT_WRITE,
MAP_SHARED, fd, 0)) != MAP_FAILED);
- ATF_CHECK(mmap(NULL, 2 * PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED,
- fd, 0) == MAP_FAILED);
+ ATF_REQUIRE((data2 = mmap(NULL, 2 * PAGE_SIZE, PROT_READ | PROT_WRITE,
+ MAP_SHARED, fd, 0)) != MAP_FAILED);
- munmap(data, 2 * PAGE_SIZE);
+ *(uint64_t *)data1 = 0x123456789abcdeful;
+ ATF_REQUIRE(*(uint64_t *)data2 == 0x123456789abcdefull);
+ *(uint64_t *)data2 = 0xfedcba9876543210ul;
+ ATF_REQUIRE(*(uint64_t *)data1 == 0xfedcba9876543210ull);
+
+ munmap(data1, 2 * PAGE_SIZE);
+ munmap(data2, 2 * PAGE_SIZE);
close(fd);
}
More information about the svn-src-all
mailing list