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)


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?
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 ( 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
mem(7D) 							      Devices								   mem(7D)

mem, kmem, allkmem - physical or virtual memory access SYNOPSIS
/dev/mem /dev/kmem /dev/allkmem DESCRIPTION
The file /dev/mem is a special file that provides access to the physical memory of the computer. The file /dev/kmem is a special file that provides access to the virtual address space of the operating system kernel, excluding memory that is associated with an I/O device. The file /dev/allkmem is a special file that provides access to the virtual address space of the operating system kernel, including memory that is associated with an I/O device. You can use any of these devices to examine and modify the system. Byte addresses in /dev/mem are interpreted as physical memory addresses. Byte addresses in /dev/kmem and /dev/allkmem are interpreted as kernel virtual memory addresses. A reference to a non-existent location returns an error. See ERRORS for more information. The file /dev/mem accesses physical memory; the size of the file is equal to the amount of physical memory in the computer. This size may be larger than 4GB on a system running the 32-bit operating environment. In this case, you can access memory beyond 4GB using a series of read(2) and write(2) calls, a pread64() or pwrite64() call, or a combination of llseek(2) and read(2) or write(2). ERRORS
EFAULT Occurs when trying to write(2) a read-only location (allkmem), read(2) a write-only location (allkmem), or read(2) or write(2) a non-existent or unimplemented location (mem, kmem, allkmem). EIO Occurs when trying to read(2) or write(2) a memory location that is associated with an I/O device using the /dev/kmem spe- cial file. ENXIO Results from attempting to mmap(2) a non-existent physical (mem) or virtual (kmem, allkmem) memory address. FILES
/dev/mem Provides access to the computer's physical memory. /dev/kmem Provides access to the virtual address space of the operating system kernel, excluding memory that is associated with an I/O device. /dev/allkmem Provides access to the virtual address space of the operating system kernel, including memory that is associated with an I/O device. SEE ALSO
llseek(2), mmap(2), read(2), write(2) WARNINGS
Using these devices to modify (that is, write to) the address space of a live running operating system or to modify the state of a hardware device is extremely dangerous and may result in a system panic if kernel data structures are damaged or if device state is changed. SunOS 5.10 18 Feb 2002 mem(7D)