diff options
author | Suren A. Chilingaryan <csa@suren.me> | 2015-08-05 00:52:55 +0200 |
---|---|---|
committer | Suren A. Chilingaryan <csa@suren.me> | 2015-08-05 00:52:55 +0200 |
commit | b05d6147eb4ccc7527a806506c2154c7795487f6 (patch) | |
tree | 28bbafa26a576b1d7896b78de51ed3e5f724e535 /pcilib/kmem.c | |
parent | 61068e3ba4863cf41b2399ea3057b3bb1c4a9dcf (diff) | |
parent | edd5ccf24c146915ee475bd223e2ad695520a241 (diff) | |
download | pcitool-b05d6147eb4ccc7527a806506c2154c7795487f6.tar.gz pcitool-b05d6147eb4ccc7527a806506c2154c7795487f6.tar.bz2 pcitool-b05d6147eb4ccc7527a806506c2154c7795487f6.tar.xz pcitool-b05d6147eb4ccc7527a806506c2154c7795487f6.zip |
Integrate locking subsystem from Nicolas Zilio
Diffstat (limited to 'pcilib/kmem.c')
-rw-r--r-- | pcilib/kmem.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/pcilib/kmem.c b/pcilib/kmem.c index 8560eae..2ff674f 100644 --- a/pcilib/kmem.c +++ b/pcilib/kmem.c @@ -79,9 +79,16 @@ pcilib_kmem_handle_t *pcilib_alloc_kernel_memory(pcilib_t *ctx, pcilib_kmem_type } memset(kbuf, 0, sizeof(pcilib_kmem_list_t) + nmemb * sizeof(pcilib_kmem_addr_t)); - + + err = pcilib_lock(ctx->locks.mmap); + if (!err) { + pcilib_error("Error acquiring mmap lock"); + return NULL; + } + ret = ioctl( ctx->handle, PCIDRIVER_IOC_MMAP_MODE, PCIDRIVER_MMAP_KMEM ); if (ret) { + pcilib_unlock(ctx->locks.mmap); pcilib_error("PCIDRIVER_IOC_MMAP_MODE ioctl have failed"); return NULL; } @@ -169,6 +176,9 @@ pcilib_kmem_handle_t *pcilib_alloc_kernel_memory(pcilib_t *ctx, pcilib_kmem_type kbuf->buf.blocks[i].mmap_offset = kh.pa & ctx->page_mask; } + pcilib_unlock(ctx->locks.mmap); + + //This is possible in the case of error (nothing is allocated yet) or if buffers are not reused if (persistent < 0) persistent = 0; if (hardware < 0) hardware = 0; |