Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/kgpu/kgpu/Makefile b/kgpu.my/kgpu/Makefile
- index e1cbf4c..551de23 100755
- --- a/kgpu/kgpu/Makefile
- +++ b/kgpu.my/kgpu/Makefile
- @@ -16,8 +16,8 @@ kgpu_log:
- helper: kgpu_log
- gcc -O2 -D__KGPU__ -c helper.c
- gcc -O2 -D__KGPU__ -c service.c
- - nvcc -O2 -D__KGPU__ -c -arch=sm_20 gpuops.cu
- - nvcc -link -D__KGPU__ -O2 -arch=sm_20 service.o helper.o kgpu_log_user.o gpuops.o -o helper -ldl
- + nvcc -O2 -D__KGPU__ -c -arch=sm_30 gpuops.cu
- + nvcc -link -D__KGPU__ -O2 -arch=sm_30 service.o helper.o kgpu_log_user.o gpuops.o -o helper -ldl
- $(if $(BUILD_DIR), cp helper $(BUILD_DIR)/ )
- clean:
- diff --git a/kgpu/kgpu/kgpu_kutils.c b/kgpu.my/kgpu/kgpu_kutils.c
- index 731d7e7..4b1f5f0 100755
- --- a/kgpu/kgpu/kgpu_kutils.c
- +++ b/kgpu.my/kgpu/kgpu_kutils.c
- @@ -20,25 +20,33 @@
- struct page* kgpu_v2page(unsigned long v)
- {
- struct page *p = NULL;
- - pgd_t *pgd = pgd_offset(current->mm, v);
- + pgd_t *pgd;
- + p4d_t* p4d;
- + pud_t *pud;
- + pmd_t *pmd;
- +
- + pgd = pgd_offset(current->mm, v);
- if (!pgd_none(*pgd)) {
- - pud_t *pud = pud_offset(pgd, v);
- - if (!pud_none(*pud)) {
- - pmd_t *pmd = pmd_offset(pud, v);
- - if (!pmd_none(*pmd)) {
- - pte_t *pte;
- + p4d = p4d_offset(pgd, v);
- + if (!p4d_none(*p4d)) {
- + pud = pud_offset(p4d, v);
- + if (!pud_none(*pud)) {
- + pmd = pmd_offset(pud, v);
- + if (!pmd_none(*pmd)) {
- + pte_t *pte;
- - pte = pte_offset_map(pmd, v);
- - if (pte_present(*pte))
- - p = pte_page(*pte);
- + pte = pte_offset_map(pmd, v);
- + if (pte_present(*pte))
- + p = pte_page(*pte);
- - /*
- - * although KGPU doesn't support x86_32, but in case
- - * some day it does, the pte_unmap should not be called
- - * because we want the pte stay in mem.
- - */
- - pte_unmap(pte);
- + /*
- + * although KGPU doesn't support x86_32, but in case
- + * some day it does, the pte_unmap should not be called
- + * because we want the pte stay in mem.
- + */
- + pte_unmap(pte);
- + }
- }
- }
- }
- diff --git a/kgpu/kgpu/main.c b/kgpu.my/kgpu/main.c
- index 921a3c5..68c7284 100755
- --- a/kgpu/kgpu/main.c
- +++ b/kgpu.my/kgpu/main.c
- @@ -402,7 +402,7 @@ void kgpu_unmap_area(unsigned long addr)
- }
- //kgpu_log(KGPU_LOG_PRINT, "unmap %d pages from %p\n", n, addr);
- if (n > 0) {
- - int ret;
- +// int ret;
- spin_lock(&kgpudev.vm_lock);
- bitmap_clear(kgpudev.vm.bitmap, idx, n);
- kgpudev.vm.alloc_sz[idx] = 0;
- @@ -411,10 +411,11 @@ void kgpu_unmap_area(unsigned long addr)
- addr, n<<PAGE_SHIFT, 1);*/
- kgpudev.vm.vma->vm_flags |= VM_PFNMAP;
- - ret = zap_vma_ptes(kgpudev.vm.vma, addr, n<<PAGE_SHIFT);
- - if (ret)
- - kgpu_log(KGPU_LOG_ALERT,
- - "zap_vma_ptes returns %d\n", ret);
- + zap_vma_ptes(kgpudev.vm.vma, addr, n<<PAGE_SHIFT);
- +// ret = 0;
- +// if (ret)
- +// kgpu_log(KGPU_LOG_ALERT,
- +// "zap_vma_ptes returns %d\n", ret);
- kgpudev.vm.vma->vm_flags &= ~VM_PFNMAP;
- spin_unlock(&kgpudev.vm_lock);
- }
- @@ -425,7 +426,8 @@ EXPORT_SYMBOL_GPL(kgpu_unmap_area);
- int kgpu_map_page(struct page *p, unsigned long addr)
- {
- int ret = 0;
- - down_write(&kgpudev.vm.vma->vm_mm->mmap_sem);
- +// down_write(&kgpudev.vm.vma->vm_mm->mmap_sem);
- + mmap_write_lock(kgpudev.vm.vma->vm_mm);
- ret = vm_insert_page(kgpudev.vm.vma, addr, p);
- if (unlikely(ret < 0)) {
- @@ -434,7 +436,8 @@ int kgpu_map_page(struct page *p, unsigned long addr)
- page_to_pfn(p), ret, page_count(p));
- }
- - up_write(&kgpudev.vm.vma->vm_mm->mmap_sem);
- +// up_write(&kgpudev.vm.vma->vm_mm->mmap_sem);
- + mmap_write_unlock(kgpudev.vm.vma->vm_mm);
- return ret;
- }
- EXPORT_SYMBOL_GPL(kgpu_map_page);
- @@ -450,7 +453,8 @@ static void* map_page_units(void *units, int n, int is_page)
- return NULL;
- }
- - down_write(&kgpudev.vm.vma->vm_mm->mmap_sem);
- +// down_write(&kgpudev.vm.vma->vm_mm->mmap_sem);
- + mmap_write_lock(kgpudev.vm.vma->vm_mm);
- for (i=0; i<n; i++) {
- ret = vm_insert_page(
- @@ -460,7 +464,8 @@ static void* map_page_units(void *units, int n, int is_page)
- );
- if (unlikely(ret < 0)) {
- - up_write(&kgpudev.vm.vma->vm_mm->mmap_sem);
- +// up_write(&kgpudev.vm.vma->vm_mm->mmap_sem);
- + mmap_write_unlock(kgpudev.vm.vma->vm_mm);
- kgpu_log(KGPU_LOG_ERROR,
- "can't remap pfn %lu, error code %d\n",
- is_page ? page_to_pfn(((struct page**)units)[i]) : ((unsigned long*)units)[i],
- @@ -469,7 +474,8 @@ static void* map_page_units(void *units, int n, int is_page)
- }
- }
- - up_write(&kgpudev.vm.vma->vm_mm->mmap_sem);
- +// up_write(&kgpudev.vm.vma->vm_mm->mmap_sem);
- + mmap_write_unlock(kgpudev.vm.vma->vm_mm);
- return (void*)addr;
- @@ -792,9 +798,11 @@ static long kgpu_ioctl(struct file *filp,
- if (_IOC_NR(cmd) > KGPU_IOC_MAXNR) return -ENOTTY;
- if (_IOC_DIR(cmd) & _IOC_READ)
- - err = !access_ok(VERIFY_WRITE, (void __user *)arg, _IOC_SIZE(cmd));
- +// err = !access_ok(VERIFY_WRITE, (void __user *)arg, _IOC_SIZE(cmd));
- + err = !access_ok((void __user *)arg, _IOC_SIZE(cmd));
- else if (_IOC_DIR(cmd) & _IOC_WRITE)
- - err = !access_ok(VERIFY_READ, (void __user *)arg, _IOC_SIZE(cmd));
- +// err = !access_ok(VERIFY_READ, (void __user *)arg, _IOC_SIZE(cmd));
- + err = !access_ok((void __user *)arg, _IOC_SIZE(cmd));
- if (err) return -EFAULT;
- switch (cmd) {
- @@ -868,7 +876,8 @@ static int kgpu_vm_fault(struct vm_area_struct *vma,
- /* should never call this */
- kgpu_log(KGPU_LOG_ERROR,
- "kgpu mmap area being accessed without pre-mapping 0x%lX (0x%lX)\n",
- - (unsigned long)vmf->virtual_address,
- +// (unsigned long)vmf->virtual_address,
- + (unsigned long)vmf->address,
- (unsigned long)vma->vm_start);
- vmf->flags |= VM_FAULT_NOPAGE|VM_FAULT_ERROR;
- return VM_FAULT_SIGBUS;
- @@ -877,7 +886,7 @@ static int kgpu_vm_fault(struct vm_area_struct *vma,
- static struct vm_operations_struct kgpu_vm_ops = {
- .open = kgpu_vm_open,
- .close = kgpu_vm_close,
- - .fault = kgpu_vm_fault,
- +// .fault = kgpu_vm_fault,
- };
- static void set_vm(struct vm_area_struct *vma)
- @@ -912,6 +921,11 @@ static void clean_vm(void)
- static int kgpu_mmap(struct file *filp, struct vm_area_struct *vma)
- {
- +
- +#ifndef VM_RESERVED
- +# define VM_RESERVED (VM_DONTEXPAND | VM_DONTDUMP)
- +#endif
- +
- if (vma->vm_end - vma->vm_start != KGPU_MMAP_SIZE) {
- kgpu_log(KGPU_LOG_ALERT,
- "mmap size incorrect from 0x$lX to 0x%lX with "
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement