Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 19 Feb 2017 15:59:24 -0800
From:      Chuck Tuffli <ctuffli@gmail.com>
To:        freebsd-hackers@freebsd.org
Subject:   how to map kernel memory to user space
Message-ID:  <CAKAYmML%2B%2BPHotoQ-uupQUJUevKFPH6SZ-KEUwC_idL3TZp7p7A@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
I'm trying to work around a problem by mapping the data from a kernel
allocated buffer into a user space application. There was a post some
time back with a possible way to do this [1], but while this creates a
valid buffer in the user space application, the contents is all zeros
instead of containing the expected data. Is this approach not
possible? Does anything obviously stick out below? TIA.

--chuck

    rc = vm_map_lookup(&kernel_map, kaddr, VM_PROT_ALL,
                                                &entry, &obj, &pindex,
&prot, &is_wired);

    vm_map_lookup_done(kernel_map, entry);
    if (rc) printf("%s: vm_map_lookup() = %d\n", __func__, rc);

    PROC_LOCK(p);
    uaddr = round_page((vm_offset_t)vms->vm_daddr + lim_max(td, RLIMIT_DATA));
    PROC_UNLOCK(p);

    objoff = kaddr - (entry->start + entry->offset);

    vm_object_reference(obj);
    rc = vm_map_find(map,
            obj,
            objoff,
            &uaddr,
            sizeof(struct nvme_controller_data),
            0,
            VMFS_OPTIMAL_SPACE,
            VM_PROT_RW,
            VM_PROT_RW,
            MAP_INHERIT_SHARE);

[1] http://markmail.org/message/ph5yuonevqjhhbig



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAKAYmML%2B%2BPHotoQ-uupQUJUevKFPH6SZ-KEUwC_idL3TZp7p7A>