summaryrefslogtreecommitdiffstats
path: root/pcilib/kmem.c
diff options
context:
space:
mode:
authorSuren A. Chilingaryan <csa@suren.me>2015-08-05 00:52:55 +0200
committerSuren A. Chilingaryan <csa@suren.me>2015-08-05 00:52:55 +0200
commitb05d6147eb4ccc7527a806506c2154c7795487f6 (patch)
tree28bbafa26a576b1d7896b78de51ed3e5f724e535 /pcilib/kmem.c
parent61068e3ba4863cf41b2399ea3057b3bb1c4a9dcf (diff)
parentedd5ccf24c146915ee475bd223e2ad695520a241 (diff)
downloadpcitool-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.c12
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;