Forráskód Böngészése

Include of kmem, allocating a buffer and getting a user space pointer. Closing unsuccessful?

mathiasb 7 éve
szülő
commit
5c18f1de70
2 módosított fájl, 28 hozzáadás és 5 törlés
  1. 1 1
      CMakeLists.txt
  2. 27 4
      src/main.cu

+ 1 - 1
CMakeLists.txt

@@ -10,7 +10,7 @@ include_directories(include)
 
 #link_directories(${CUDA_LIBRARY_DIRS})
 
-set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS})
+set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS}-Wno-deprecated-gpu-targets)
 set(CMAKE_C_COMPILER "/usr/bin/clang")
 set(CMAKE_C_FLAGS "-msse -msse4.1 -mavx")
 

+ 27 - 4
src/main.cu

@@ -5,7 +5,8 @@
 #include "common.h"
 #include "kernels.h"
 #include "gdrapi.h"
-#include "pcilib.h"
+#include <pcilib.h>
+#include <pcilib/kmem.h>
 
 int main()
 {
@@ -70,17 +71,39 @@ int main()
 	printf("Cannot open a context for pci\n");
 	exit( EXIT_FAILURE );
     }
-
     pciVa = pcilib_resolve_bar_address(pciCtx,PCILIB_BAR_DETECT, 0);
     if( pciVa == NULL )
     {
 	printf("Cannot resolve PCI physical adress to virtual\n");
 	exit( EXIT_FAILURE );
     }
+
+    pcilib_kmem_handle_t* pciHandle;
+    pciHandle = pcilib_alloc_kernel_memory(pciCtx,PCILIB_KMEM_TYPE_CONSISTENT,1,64,4096,PCILIB_KMEM_USE_STANDARD,PCILIB_KMEM_FLAG_REUSE);
+    if( pciHandle == NULL )
+    {
+	printf("Cannot allocate  PCI kernel memory\n");
+	exit( EXIT_FAILURE );
     
-    pcilib_close(pciCtx);
-    
+    }
+    volatile void* pciMemPtr;
+    uintptr_t pciBus;
+    pciMemPtr = pcilib_kmem_get_ua(pciCtx,pciHandle);
+    if( pciMemPtr == NULL )
+    {
+	printf("Cannot get PCI pointer to kernel memory\n");
+	exit( EXIT_FAILURE );
+    }
+    pciBus = pcilib_kmem_get_ba(pciCtx,pciHandle);
+    if( pciBus == 0 )
+    {
+	printf("Cannot get PCI Bus address on kernel memory\n");
+	exit( EXIT_FAILURE );
+    }
+
+    printf("pciMemPtr = %p\npciBus = %p or %lu\n",pciMemPtr,pciBus,pciBus);
     
+    pcilib_close(pciCtx);
     
     /* Close everything */
     assert_gdr( gdr_unmap(g,GPUMemHandle,va,(size_t) GPUProp.sharedMemPerBlock) );