On 04/30/2010 08:21 PM, James Bottomley wrote: > T-bone is keeping a web page with all the failing tests on now: > > http://wiki.parisc-linux.org/TestCases > > The patch below is what I've found fixes the minifail6 case, but it > doesn't seem to fully fix the minifail one (although the frequency goes > down). > > It's the essential patch we need to fix up our kmapping. Right at the > moment kmap of a page with a dirty cache line in userspace sees stale > data and kunmap of a page the kernel has modified will see likewise. Hi James, I tried your patch on top of a 2.6.33.2 kernel (SMP, 32bit, PA8500 (PCX-W) CPU). I still do see all the page faults as before. They even seem to trigger faster than with a few of Dave's patches. I usually run this command i=0; while true; do i=$(($i+1)); echo Run $i; ./minifail_dave; done; in a few screen sessions in parallel. Thibeaut: I've attached the testcase (I called it minifail_dave, since it was changed by Dave). Maybe you can attach it to your website if it's not yet there...? Helge ----------------- do_page_fault() pid=4325 command='minifail_dave' type=6 address=0x00000003 YZrvWESTHLNXBCVMcbcbcbcbOGFRQPDI PSW: 00000000000001001111111100001111 Not tainted r00-03 0004ff0f 1055e000 403390d7 c03613c0 r04-07 4034b5f4 00000007 4034bdf4 00000000 r08-11 4034be64 00000000 c03613ca 0000001c r12-15 4034be60 4034c7f8 00000000 c0361448 r16-19 4034c0b0 c0361448 40349270 00000000 r20-23 00000000 00000000 00000000 00000000 r24-27 fffffff5 ffffffd3 4034c0b0 00011dac r28-31 00000000 4034c0b0 c03614c0 403390d7 sr00-03 00001111 0000111c 00000000 00001111 sr04-07 00001111 00001111 00001111 00001111 VZOUICununcqcqcqcqcqcrmunTDVZOUI FPSR: 00000000000000000000000000000000 FPER1: 00000000 fr00-03 0000000000000000 0000000000000000 0000000000000000 0000000000000000 fr04-07 8f828e808edb4080 000000001011be24 107495b01078db64 0000000000000000 fr08-11 8f844240107b8000 0000000800000000 8edb40808f828e80 8f8422b81056115c fr12-15 107495b010803280 1056115c1011be24 00000002ffffff9c fffff00000000000 fr16-19 8f84428010802840 8f828edc8f828ec0 8f828e8000000000 8f81bea88f844208 fr20-23 8f8442088f844210 8f844208101dc9f4 0000000000000090 00001c9800000000 fr24-27 3ff0000000000000 3fe0000000000000 412e848000000000 00000000001e8480 fr28-31 000004000000007a 000000101016bee8 0000000f106ff040 106e3b3810802894 IASQ: 00001111 00001111 IAOQ: 00000003 00000007 IIR: 43ffff80 ISR: 00001111 IOR: 40000bd0 CPU: 0 CR30: 8d9f8000 CR31: ffffffff ORIG_R28: 00000000 IAOQ[0]: 00000003 IAOQ[1]: 00000007 RP(r2): 403390d7 pagealloc: memory corruption 88140040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 88140050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 88140060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 88140070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 88140080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 88140090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 881400a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 881400b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ Backtrace: [<1011ecb0>] show_stack+0x18/0x28 [<10117b94>] dump_stack+0x1c/0x2c [<101c6270>] kernel_map_pages+0x2a0/0x2b8 [<1019eb24>] get_page_from_freelist+0x3e4/0x5f4 [<1019ee68>] __alloc_pages_nodemask+0x134/0x610 [<101b1d6c>] do_wp_page+0x260/0xa00 [<101b3ac0>] handle_mm_fault+0x4cc/0x784 [<1011d844>] do_page_fault+0x1f8/0x2fc [<1011f4ec>] handle_interruption+0xec/0x730 [<10103078>] intr_check_sig+0x0/0x34 do_page_fault() pid=7143 command='minifail_dave' type=6 address=0x00000003 YZrvWESTHLNXBCVMcbcbcbcbOGFRQPDI PSW: 00000000000001001111111100001111 Not tainted r00-03 0004ff0f 1055e000 403390d7 bffaa3c0 r04-07 4034b5f4 00000007 4034bdf4 00000000 r08-11 4034be64 00000000 bffaa3ca 0000001c r12-15 4034be60 4034c7f8 00000000 bffaa448 r16-19 4034c0b0 bffaa448 40349270 00000000 r20-23 00000000 00000000 00000000 00000000 r24-27 fffffff5 ffffffd3 4034c0b0 00011dac r28-31 00000000 4034c0b0 bffaa4c0 403390d7 sr00-03 00001c1b 00000000 00000000 00001c1b sr04-07 00001c1b 00001c1b 00001c1b 00001c1b VZOUICununcqcqcqcqcqcrmunTDVZOUI FPSR: 00000000000000000000000000000000 FPER1: 00000000 fr00-03 0000000000000000 0000000000000000 0000000000000000 0000000000000000 fr04-07 8f828e808edb4080 000000001011be24 107495b01078db64 0000000000000000 fr08-11 8f844240107b8000 0000000800000000 8edb40808f828e80 8f8422b81056115c fr12-15 107495b010803280 1056115c1011be24 00000002ffffff9c fffff00000000000 fr16-19 8f84428010802840 8f828edc8f828ec0 8f828e8000000000 8f81bea88f844208 fr20-23 8f8442088f844210 8f844208101dc9f4 0000000000000090 00001c9800000000 fr24-27 3ff0000000000000 3fe0000000000000 412e848000000000 00000000001e8480 fr28-31 000004000000007a 000000101016bee8 0000000f106ff040 106e3b3810802894 IASQ: 00001c1b 00001c1b IAOQ: 00000003 00000007 IIR: 43ffff80 ISR: 00001c1b IOR: 40000bd0 CPU: 1 CR30: 86860000 CR31: ffffffff ORIG_R28: 00000000 IAOQ[0]: 00000003 IAOQ[1]: 00000007 RP(r2): 403390d7 do_page_fault() pid=9873 command='minifail_dave' type=6 address=0x00000003 YZrvWESTHLNXBCVMcbcbcbcbOGFRQPDI PSW: 00000000000001001111111100001111 Not tainted r00-03 0004ff0f 1055e000 403390d7 c06e53c0 r04-07 4034b5f4 00000007 4034bdf4 00000000 r08-11 4034be64 00000000 c06e53ca 0000001c r12-15 4034be60 4034c7f8 00000000 c06e5448 r16-19 4034c0b0 c06e5448 40349270 00000000 r20-23 00000000 00000000 00000000 00000000 r24-27 fffffff5 ffffffd3 4034c0b0 00011dac r28-31 00000000 4034c0b0 c06e54c0 403390d7 sr00-03 000026c7 00000000 00000000 000026c7 sr04-07 000026c7 000026c7 000026c7 000026c7 VZOUICununcqcqcqcqcqcrmunTDVZOUI FPSR: 00000000000000000000000000000000 FPER1: 00000000 fr00-03 0000000000000000 0000000000000000 0000000000000000 0000000000000000 fr04-07 8f828e808edb4080 000000001011be24 107495b01078db64 0000000000000000 fr08-11 8f844240107b8000 0000000800000000 8edb40808f828e80 8f8422b81056115c fr12-15 107495b010803280 1056115c1011be24 00000002ffffff9c fffff00000000000 fr16-19 8f84428010802840 8f828edc8f828ec0 8f828e8000000000 8f81bea88f844208 fr20-23 8f8442088f844210 8f844208101dc9f4 0000000000000090 00001c9800000000 fr24-27 3ff0000000000000 3fe0000000000000 412e848000000000 00000000001e8480 fr28-31 000004000000007a 000000101016bee8 0000000f106ff040 106e3b3810802894 IASQ: 000026c7 000026c7 IAOQ: 00000003 00000007 IIR: 43ffff80 ISR: 000026c7 IOR: 40000bd0 CPU: 0 CR30: 8dadc000 CR31: ffffffff ORIG_R28: 00000000 IAOQ[0]: 00000003 IAOQ[1]: 00000007 RP(r2): 403390d7
#include <pthread.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> /* g++ minifail_dave.cpp -o minifail_dave -O0 -pthread -g i=0; while true; do i=$(($i+1)); echo Run $i; ./minifail_dave; done; */ void* thread_run(void* arg) { write(1,"Thread OK.\n",11); } int pure_test() { pthread_t thread; pthread_create(&thread, NULL, thread_run, NULL); switch (fork()) { case -1: perror("fork() failed"); case 0: write(1,"Child OK.\n",10); _exit(0); default: break; } pthread_join(thread, NULL); return 0; } int main(int argc, char** argv) { return pure_test(); }