Get a huge page in a linux kernel module

Masoud Moshref Javadi moshrefj at usc.edu
Sat Oct 4 19:07:22 EDT 2014


I want to reserve a hugepage at kernel (Ubuntu 3.13.0-32-generic) and 
share it with a user process.
I used the code for regular page sharing from:
http://people.ee.ethz.ch/~arkeller/linux/code/mmap_bart_tanghe_dan_hordern.c

Then I used hugeadm to enable hugepages and transparent hugepages and 
added the corresponding grub configs.

This post on stackoverflow says to use the following parameters for 
alloc_pages
http://stackoverflow.com/questions/19460544/how-do-i-allocate-a-dma-buffer-backed-by-1gb-hugepages-in-a-linux-kernel-module

struct page *p = alloc_pages(GFP_TRANSHUGE, HPAGE_PMD_ORDER);

It didn't work as /proc/meminfo still says all huge pages are free.

Then I changed
vma->vm_flags |= VM_RESERVED;
to
vma->vm_flags |= VM_HUGETLB;

but the following error happened:
Oct  4 15:43:50 masoud-VirtualBox kernel: [ 2756.091381] BUG: unable to 
handle kernel paging request at 00000000006f0082
Oct  4 15:43:50 masoud-VirtualBox kernel: [ 2756.091387] IP: 
[<ffffffff8119522e>] hugetlb_fault+0x3e/0x760
Oct  4 15:43:50 masoud-VirtualBox kernel: [ 2756.091394] PGD bde87067 
PUD c2ad7067 PMD b79ca067 PTE 0
Oct  4 15:43:50 masoud-VirtualBox kernel: [ 2756.091399] Oops: 0000 [#1] 
SMP

So it seems that something is wrong with hugetlb_fault. What else should 
I change to reserve a huge page?

And the call trace is:
Oct  4 15:43:50 masoud-VirtualBox kernel: [ 2756.091489] Call Trace:
Oct  4 15:43:50 masoud-VirtualBox kernel: [ 2756.091496] 
[<ffffffff811795fd>] handle_mm_fault+0xd4d/0xf00
Oct  4 15:43:50 masoud-VirtualBox kernel: [ 2756.091501] 
[<ffffffff8117da87>] ? vma_link+0xb7/0xc0
Oct  4 15:43:50 masoud-VirtualBox kernel: [ 2756.091507] 
[<ffffffff81727be4>] __do_page_fault+0x184/0x560
Oct  4 15:43:50 masoud-VirtualBox kernel: [ 2756.091512] 
[<ffffffff8101b7e9>] ? sched_clock+0x9/0x10
Oct  4 15:43:50 masoud-VirtualBox kernel: [ 2756.091517] 
[<ffffffff8109d1ad>] ? sched_clock_local+0x1d/0x80
Oct  4 15:43:50 masoud-VirtualBox kernel: [ 2756.091522] 
[<ffffffff8111155c>] ? acct_account_cputime+0x1c/0x20
Oct  4 15:43:50 masoud-VirtualBox kernel: [ 2756.091527] 
[<ffffffff8109d7db>] ? account_user_time+0x8b/0xa0
Oct  4 15:43:50 masoud-VirtualBox kernel: [ 2756.091531] 
[<ffffffff8109ddf4>] ? vtime_account_user+0x54/0x60
Oct  4 15:43:50 masoud-VirtualBox kernel: [ 2756.091535] 
[<ffffffff81727fda>] do_page_fault+0x1a/0x70
Oct  4 15:43:50 masoud-VirtualBox kernel: [ 2756.091540] 
[<ffffffff81724448>] page_fault+0x28/0x30
Oct  4 15:43:50 masoud-VirtualBox kernel: [ 2756.091542] Code: 54 53 48 
83 ec 38 48 8b 86 a0 00 00 00 48 89 55 d0 48 89 7d b8 89 4d ac 48 8b 40 
20 48 8b 40 28 48 8b 80 f8 02 00 00 4c 8b 68 18 <49> 8b 45 10 48 21 45 
d0 48 8b 75 d0 e8 c1 ed ff ff 48 85 c0 48
Oct  4 15:43:50 masoud-VirtualBox kernel: [ 2756.091557] RIP 
[<ffffffff8119522e>] hugetlb_fault+0x3e/0x760
Oct  4 15:43:50 masoud-VirtualBox kernel: [ 2756.091559]  RSP 
<ffff880093cb1d28>
Oct  4 15:43:50 masoud-VirtualBox kernel: [ 2756.091562] CR2: 
00000000006f0082
Oct  4 15:43:50 masoud-VirtualBox kernel: [ 2756.091565] ---[ end trace 
75afe8697af08287 ]--

-- 
Masoud Moshref Javadi
Computer Engineering PhD Candidate
Ming Hsieh Department of Electrical Engineering
University of Southern California




More information about the Kernelnewbies mailing list