Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:12.2
itrace
itrace-nopage.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File itrace-nopage.patch of Package itrace
--- src/driver/pi_init.c | 44 ++++++++++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 18 deletions(-) --- a/src/driver/pi_init.c +++ b/src/driver/pi_init.c @@ -94,7 +94,7 @@ int pitrace_release(struct inode *, stru int pitrace_mmap(struct file *, struct vm_area_struct *); void pitrace_vma_open(struct vm_area_struct *); void pitrace_vma_close(struct vm_area_struct *); -struct page * pitrace_vma_nopage(struct vm_area_struct *, unsigned long, int *); +int pitrace_vma_fault(struct vm_area_struct *, struct vm_fault *); int pitrace_cpu_init(void); @@ -131,7 +131,7 @@ struct file_operations pitrace_ops = { struct vm_operations_struct pitrace_vm_ops = { .open = pitrace_vma_open, .close = pitrace_vma_close, - .nopage = pitrace_vma_nopage + .fault = pitrace_vma_fault }; // @@ -620,14 +620,13 @@ void pitrace_vma_close(struct vm_area_st } -struct page *pitrace_vma_nopage(struct vm_area_struct *vma, - unsigned long address, - int *type) +int pitrace_vma_fault(struct vm_area_struct *vma, + struct vm_fault * fdata) { - struct page *page = NOPAGE_SIGBUS; + struct page *page = NULL; -// PDEBUG("In pitrace_vma_nopage\n"); -// PDEBUG("vma->pgoff: %lu\n", vma->vm_pgoff << PAGE_SHIFT); +// PDEBUG("In pitrace_vma_fault\n"); +// PDEBUG("vma->vm_pgoff: %lu\n", vma->vm_pgoff); // PDEBUG("address: %lx, vma->vm_start: %lx\n", address, vma->vm_start); switch(vma->vm_pgoff << PAGE_SHIFT) { @@ -635,21 +634,27 @@ struct page *pitrace_vma_nopage(struct v case PI_PTT_DATA_OFFSET: if (PttBuffer == NULL) { printk("PttBuffer not allocated\n"); - return(page); + return(VM_FAULT_OOM); } - page = vmalloc_to_page((void*)PttBuffer + (address - vma->vm_start)); + page = vmalloc_to_page((void*)PttBuffer + + ((unsigned long)fdata->virtual_address - + vma->vm_start)); break; #endif case PI_MAPPED_DATA_OFFSET: - page = vmalloc_to_page((void*)MappedData + (address - vma->vm_start)); + page = vmalloc_to_page((void*)MappedData + + ((unsigned long)fdata->virtual_address - + vma->vm_start)); break; case PI_MAPPED_TRACE_OFFSET: if ( MappedData->CPUSelector < driver_info.num_cpus ) { if (ptr_btrace_buffers[MappedData->CPUSelector] == NULL) { printk("ptr_btrace_buffers not allocated\n"); - return(page); + return(VM_FAULT_OOM); } - page = vmalloc_to_page((void*)ptr_btrace_buffers[MappedData->CPUSelector] + (address - vma->vm_start)); + page = vmalloc_to_page((void*)ptr_btrace_buffers[MappedData->CPUSelector] + + ((unsigned long)fdata->virtual_address + - vma->vm_start)); // PDEBUG("In PI_MAPPED_TRACE_OFFSET for i = %d \n", MappedData->CPUSelector); } break; @@ -657,21 +662,24 @@ struct page *pitrace_vma_nopage(struct v if ( MappedData->CPUSelector < driver_info.num_cpus ) { if (ptr_mte_buffers[MappedData->CPUSelector] == NULL) { printk("ptr_mte_buffers not allocated\n"); - return(page); + return(VM_FAULT_OOM); } - page = vmalloc_to_page((void*)ptr_mte_buffers[MappedData->CPUSelector] + (address - vma->vm_start)); + page = vmalloc_to_page((void*)ptr_mte_buffers[MappedData->CPUSelector] + + ((unsigned long)fdata->virtual_address + - vma->vm_start)); // PDEBUG("In PI_MAPPED_MTE_OFFSET for i = %d \n", MappedData->CPUSelector); } break; default: - printk("ERROR pitrace_vma_nopage: incorrect offset\n"); - return(page); + printk("ERROR pitrace_vma_fault: incorrect offset\n"); + return(VM_FAULT_SIGBUS); break; } // increment kernel page usage count get_page(page); - return(page); + fdata->page = page; + return(0); } module_init(pi_init_module);
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor