From: "dada1" <dada1@cosmosbay.com>
To: <linux-kernel@vger.kernel.org>
Subject: Strong kernel lock with linux-2.5.59 : futex in Huge Pages
Date: Thu, 23 Jan 2003 10:19:21 +0100 [thread overview]
Message-ID: <00e201c2c2c0$838954c0$760010ac@edumazet> (raw)
In-Reply-To: <E18bd5l-000Duj-00@f16.mail.ru>
Hello
I found a way to lock a linux-2.5.59 in all cases, in using futexes landing
in a HugeTLB page.
You need to be root to be able to obtain HugePages (or CAP_IPC_LOCK
capability)
I suspect that the kernel/futex.c:__pin_page(unsigned long addr) or
mm/memory.c:follow_page() are not HugeTLB page aware.
How you can reproduce it. (dont do it of course, unless you really want to
debug the thing)
# grep TLB .config
CONFIG_HUGETLB_PAGE=y
CONFIG_HUGETLBFS=y
# mount -t hugetlbfs none /huge
# echo 10 > /proc/sys/vm/nr_hugepages
# ./prog
Before futex() call
*********** HANG *********
# cat prog.c
#include <sys/mman.h>
#include <asm/unistd.h>
#include <errno.h>
#ifndef __NR_futex
#define __NR_futex 240
#endif
_syscall4(int, futex, unsigned long, uaddr, int, op, int, val, struct
timespec *,utime)
res = futex((unsigned long)ptr, /*FUTEX_WAIT*/0, 3, 0) ;
main(int argc, char *argv[])
{
int res ;
int fd = open("/huge/futex_bug", O_RDWR | O_CREAT, 0644) ;
char *ptr ;
if (fd == -1) { perror("/huge/futex_bug") ; exit(1);}
ptr = mmap(0x30000000, 4*1024*1024, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd,
0) ;
if (ptr == -1) { perror("mmap") ; exit(1);}
*(int *)ptr = 2 ; /* init the futex with value 2 */
printf("Before futex() call\n") ;
res = futex((unsigned long)ptr, /*FUTEX_WAIT*/0, 3, 0) ;
printf("futex->%d errno=%d\n", res, errno) ;
}
# cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 8
model name : Pentium III (Coppermine)
stepping : 6
cpu MHz : 801.570
cache size : 256 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 2
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca
cmov pat pse36 mmx fxsr sse
bogomips : 1585.15
Thanks
Eric Dumazet
next prev parent reply other threads:[~2003-01-23 9:10 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-01-23 8:52 OOPS in idescsi_end_request Andrey Borzenkov
2003-01-23 9:19 ` dada1 [this message]
2003-01-23 9:41 ` Strong kernel lock with linux-2.5.59 : futex in Huge Pages Andrew Morton
2003-01-24 3:15 ` OOPS in idescsi_end_request Brian King
2003-01-24 6:21 ` Re[2]: " Andrey Borzenkov
2003-01-24 9:06 ` James Stevenson
2003-01-24 13:39 ` Brian King
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='00e201c2c2c0$838954c0$760010ac@edumazet' \
--to=dada1@cosmosbay.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome