page fault handle


 
Thread Tools Search this Thread
Operating Systems Linux page fault handle
# 1  
Old 09-28-2009
page fault handle

For zero-copy communication among the processor, I allocated a pool in the kernel. From user space, it may mmap the virtual memory device into user space i.e 0x80000000. the client may send a message to the server, it may request a buffer, kernel will allocate a block for it and register it into the pool. After that, the client(user space) will got an address(that has been translated into user space address) for example: it will be 0x80003ffe4, the kernel will record the offset 0x3ffe4 into pool. But during write the the user space address 0x80003ffe4, I track the memory fault handle process, I got the vmf->virtual_address - vma->start = 0x3f000, I follow the offset 0x3f000 to find the page, in fact, the offset is not right.
So, why is the offset 0x3f000 other than 0x3ffe4?

The call flow:

char *buf = ipczalloc(6); // buf = 0x80003ffe4.
memcpy(buf, "12345", 5); // will enter vma fault handle


The code as below:
static int ipcmem_vm_nopage(struct vm_area_struct* vma, struct vm_fault * vmf)
{
unsigned long offset;
offset = vmf->virtual_address - vma->start;
printk("the offset is %x.\n", offset);
}

---------- Post updated 09-28-09 at 12:52 AM ---------- Previous update was 09-27-09 at 11:23 PM ----------

I got the answer, since the kernel before do the page fault,
the vmf.virtual_address = (void __user *)(address & PAGE_MASK)


PAGE_MASK = ~(0xFFF)

From the kernel source code, there is no way to get the real user address from vm fault handler.

So, are there any better to handle that?
a2156z
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Programming

Using gdb, ignore beginning segmentation fault until reproduce environment segmentation fault

I use a binary name (ie polo) it gets some parameter , so for debugging normally i do this : i wrote script for watchdog my app (polo) and check every second if it's not running then start it , the problem is , if my app , remain in state of segmentation fault for a while (ie 15 ... (6 Replies)
Discussion started by: pooyair
6 Replies

2. Shell Programming and Scripting

script for adding page number before page breaks

Hi, If there is an expert that can help: I have many txt files that are produced from pdftotext that include page breaks the page breaks seem to be unix style hex 0C. I want to add page numbers before each page break as in : Page XXXX Regards antman (9 Replies)
Discussion started by: antman
9 Replies

3. Shell Programming and Scripting

Print multiple copies page by page using lp command

Hi I have a pdf file that is being generated using the rwrun command in the shell script. I then have the lp command in the shell script to print the same pdf file. Suppose there are 4 pages in the pdf file , I need to print 2 copies of the first page, 2 copies of the second page , then 2... (7 Replies)
Discussion started by: megha2525
7 Replies

4. Web Development

Page load time- local page

Hi Is there a way to calculate the page load time, I am trying to calculate the load time of a page locally. I found tools to do this over http or https but none that work locally. Any ideas? Thanks. (4 Replies)
Discussion started by: jamie_123
4 Replies

5. UNIX for Dummies Questions & Answers

Difference between handle to the thread HANDLE and thread identifier pthread_t

This question might be silly but its confusing me a bit: What is the difference between handle to the thread HANDLE and thread identifier pthread_t? ---------- Post updated at 01:52 PM ---------- Previous update was at 01:48 PM ---------- Sorry I saw details and HANDLE is in windows and... (0 Replies)
Discussion started by: rupeshkp728
0 Replies

6. UNIX for Dummies Questions & Answers

Page Fault + Memory

I am not sure where to post this so i will put it in the newbie section. I have set up a bog standard debain 6, LAMP environment in the cloud. The specs 1 core at 2GH 2.5gb Memory running Jommla, with about 1.6K visitors a day. I am using AppFirst (appfirst.com) to monitor the... (2 Replies)
Discussion started by: waseem
2 Replies

7. UNIX for Advanced & Expert Users

Page fault in kernel

I have a query (Don't know whether its the right folder to ask) ................. What happens when page fault happens in Kernel ..(as the kernel mode is non-preemptive)... any guesses... Thanks in advance (2 Replies)
Discussion started by: yash0101
2 Replies

8. Solaris

Page Fault very high

Hi, We are running SUN sparc 5.8, notice frequent "Page Faults" message from our monitor s/w "ServerVantage" coming but no message display in SUN syslog or messages log. Any ideas why or what to check? thanks, Ahmad (2 Replies)
Discussion started by: Ahmad
2 Replies

9. HP-UX

Data page fault

What causes 'page data fault' or 'data memory protection fault' under HP-UX 11. The server crashes and the shutdownlog reports the above error. For your info, Oracle 8i is running . Appreciate your fast response, Wobitu :confused: (2 Replies)
Discussion started by: wobitu
2 Replies
Login or Register to Ask a Question
hat_getkpfnum(9F)					   Kernel Functions for Drivers 					 hat_getkpfnum(9F)

NAME
hat_getkpfnum - get page frame number for kernel address SYNOPSIS
#include <sys/types.h> #include <sys/ddi.h> #include <sys/sunddi.h> pfn_t hat_getkpfnum(caddr_t addr); INTERFACE LEVEL
This interface is obsolete. A driver devmap(9E) entry point should be provided instead. PARAMETERS
addr The kernel virtual address for which the page frame number is to be returned. DESCRIPTION
hat_getkpfnum() returns the page frame number corresponding to the kernel virtual address, addr. addr must be a kernel virtual address which maps to device memory. ddi_map_regs(9F) can be used to obtain this address. For example, ddi_map_regs(9F) can be called in the driver's attach(9E) routine. The resulting kernel virtual address can be saved by the driver (see ddi_soft_state(9F)) and used in mmap(9E). The corresponding ddi_unmap_regs(9F) call can be made in the driver's detach(9E) routine. Refer to mmap(9E) for more information. RETURN VALUES
The page frame number corresponding to the valid, device-mapped virtual address addr. Otherwise the return value is undefined. CONTEXT
hat_getkpfnum() can be called only from user or kernel context. ATTRIBUTES
See attributes(5) for descriptions of the following attributes: +-----------------------------+-----------------------------+ | ATTRIBUTE TYPE | ATTRIBUTE VALUE | +-----------------------------+-----------------------------+ |Interface stability |Obsolete | +-----------------------------+-----------------------------+ SEE ALSO
attach(9E), detach(9E), devmap(9E), mmap(9E), ddi_map_regs(9F), ddi_soft_state(9F), ddi_unmap_regs(9F) Writing Device Drivers NOTES
For some devices, mapping device memory in the driver's attach(9E) routine and unmapping device memory in the driver's detach(9E) routine is a sizeable drain on system resources. This is especially true for devices with a large amount of physical address space. Refer to mmap(9E) for alternative methods. SunOS 5.10 13 June 2004 hat_getkpfnum(9F)