From 7e81bb374d263400b16daa9a11d684287db36e78 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Imre=20Vad=C3=A1sz?= Date: Mon, 5 Feb 2018 21:24:11 +0100 Subject: [PATCH] kern - Add D_MEM flag to /dev/mem and /dev/kmem character devices. * This makes seeking actually work on these character devices, which fixes performance of various tools when reading from /dev/mem or /dev/kmem. --- sys/kern/kern_memio.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/sys/kern/kern_memio.c b/sys/kern/kern_memio.c index 1cda4e38a5..0b1e3e2baa 100644 --- a/sys/kern/kern_memio.c +++ b/sys/kern/kern_memio.c @@ -91,6 +91,20 @@ static struct dev_ops mem_ops = { .d_uksmap = memuksmap }; +static struct dev_ops mem_ops_mem = { + { "mem", 0, D_MEM | D_MPSAFE | D_QUICK }, + .d_open = mmopen, + .d_close = mmclose, + .d_read = mmread, + .d_write = mmwrite, + .d_ioctl = mmioctl, + .d_kqfilter = mmkqfilter, +#if 0 + .d_mmap = memmmap, +#endif + .d_uksmap = memuksmap +}; + static struct dev_ops mem_ops_noq = { { "mem", 0, D_MPSAFE }, .d_open = mmopen, @@ -762,8 +776,8 @@ mem_drvinit(void *unused) if (mem_range_softc.mr_op != NULL) mem_range_softc.mr_op->init(&mem_range_softc); - make_dev(&mem_ops, 0, UID_ROOT, GID_KMEM, 0640, "mem"); - make_dev(&mem_ops, 1, UID_ROOT, GID_KMEM, 0640, "kmem"); + make_dev(&mem_ops_mem, 0, UID_ROOT, GID_KMEM, 0640, "mem"); + make_dev(&mem_ops_mem, 1, UID_ROOT, GID_KMEM, 0640, "kmem"); make_dev(&mem_ops, 2, UID_ROOT, GID_WHEEL, 0666, "null"); make_dev(&mem_ops, 3, UID_ROOT, GID_WHEEL, 0644, "random"); make_dev(&mem_ops, 4, UID_ROOT, GID_WHEEL, 0644, "urandom"); -- 2.11.4.GIT