lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1333730496.17877.7.camel@satguru>
Date:	Fri, 06 Apr 2012 18:41:36 +0200
From:	Jonas Bonn <jonas@...thpole.se>
To:	Kautuk Consul <consul.kautuk@...il.com>
Cc:	Arnd Bergmann <arnd@...db.de>, linux@...ts.openrisc.net,
	linux-kernel@...r.kernel.org,
	"Mohd. Faris" <mohdfarisq2010@...il.com>
Subject: Re: [PATCH 04/19 v2] openrisc/mm/fault.c: Port OOM changes to
 do_page_fault

Hi Kautuk,

OK, I had a look at this patch and I think it's fine.  This is a little
over my head so I'm just going to take you word for it doing the right
thing... it doesn't seem to fundamentally break anything in any case.
stress_32k runs and the OOM killer takes it down nicely.

I'll paste the output from running stress_32k (here called testkautuk)
here in case you haven't seen how elegant the oom-killer output is on
openrisc...

Thanks for the patch.

Acked-by: Jonas Bonn <jonas@...thpole.se>

/Jonas


# testkautuk
testkautuk
message_alloc  
message_alloc Thread 1 
message_alloc  
message_alloc Thread 1 
message_alloc  
message_alloc Thread 2 
message_alloc  
message_alloc Thread 2 
message_alloc  
message_alloc Thread 2 
message_alloc  
message_alloc Thread 2 
message_alloc  
message_alloc Thread 2 
message_alloc  
message_alloc Thread 2 
message_alloc  
message_alloc Thread 2 
message_alloc  
message_alloc Thread 2 
testkautuk invoked oom-killer: gfp_mask=0x200da, order=0, oom_adj=0,
oom_score_adj=0
Stack dump [0xc1549ca8]:
sp + 00: 0xc01fdba0
sp + 04: 0xc005c110
sp + 08: 0xc1519a00
sp + 12: 0x000200da
sp + 16: 0x00000000
sp + 20: 0x00000000
sp + 24: 0x00000000
sp + 28: 0xc0245290
sp + 32: 0x00000000
sp + 36: 0xc1549d30
sp + 40: 0xc1530970
sp + 44: 0x00000000
sp + 48: 0xc1530970
sp + 52: 0x00000000
sp + 56: 0xc005c638
sp + 60: 0x00000000
sp + 64: 0x0000000c
sp + 68: 0x00000000
sp + 72: 0x00000000
sp + 76: 0x00000010
sp + 80: 0xc024cc6c
sp + 84: 0xc0213b92
sp + 88: 0xc0240000
sp + 92: 0xc1549d2c
sp + 96: 0x00000170
sp + 100: 0x00000eb2
sp + 104: 0x00000000
sp + 108: 0xc1530970
sp + 112: 0x000200da
sp + 116: 0x00000000
sp + 120: 0x00000000
sp + 124: 0xc005cc30
sp + 128: 0xc0213b92
sp + 132: 0xc0240098
sp + 136: 0x00000000
sp + 140: 0x000200da
sp + 144: 0xc024c6a8
sp + 148: 0xc024c6a8
sp + 152: 0x00000000
sp + 156: 0xc024cc60
sp + 160: 0x00000000
sp + 164: 0x00000040
sp + 168: 0x00000001
sp + 172: 0x00000000
sp + 176: 0x00000000
sp + 180: 0xc0061704
sp + 184: 0xc024c6a8
sp + 188: 0x00000000
sp + 192: 0xc024cc64
sp + 196: 0x00000000
sp + 200: 0x000200da
sp + 204: 0x00000000
sp + 208: 0x00000000
sp + 212: 0x00000040
sp + 216: 0x00000010
sp + 220: 0x00000000
sp + 224: 0x00000000
sp + 228: 0x00000050
sp + 232: 0x00000001
sp + 236: 0x00000000
sp + 240: 0x00000040
sp + 244: 0x00000001
sp + 248: 0x00000080
sp + 252: 0x00000000
sp + 256: 0x00000000
sp + 260: 0x00000000
sp + 264: 0x00000000
sp + 268: 0x00000000
sp + 272: 0xc024c6a8
sp + 276: 0xc024c6a8
sp + 280: 0x00000000
sp + 284: 0x00000001
sp + 288: 0xc15a7d00
sp + 292: 0x30b76000
sp + 296: 0xc1531080
sp + 300: 0x00000029
sp + 304: 0xc15440c0
sp + 308: 0xc15310b4
sp + 312: 0x00000001
sp + 316: 0x00030002
sp + 320: 0xc0078e34
sp + 324: 0xc14d1940
sp + 328: 0xc1530f00
sp + 332: 0x00000000
sp + 336: 0xc1531080
sp + 340: 0x00000000
sp + 344: 0xc1548000
sp + 348: 0xc14d1cac
sp + 352: 0xc15a7d00
sp + 356: 0x30b76000
sp + 360: 0x00000029
sp + 364: 0xc1519860
sp + 368: 0xc1549ef0
sp + 372: 0xc1531080
sp + 376: 0x00000300
sp + 380: 0xc15310b4
sp + 384: 0x00000001
sp + 388: 0x00030002
sp + 392: 0xc0007554
sp + 396: 0x30000000
sp + 400: 0xc0244064
sp + 404: 0xffffffff
sp + 408: 0x30b78000
sp + 412: 0xc1549e44
sp + 416: 0xc1549e44
sp + 420: 0x00030002
sp + 424: 0xc1549e70
sp + 428: 0x00000000
sp + 432: 0xc0242de0
sp + 436: 0xc03ecb40
sp + 440: 0x00000000
sp + 444: 0xc0240b70
sp + 448: 0x00000012
sp + 452: 0xc03ed94c
sp + 456: 0xc1549e70
sp + 460: 0xc1549e70
sp + 464: 0x00000000
sp + 468: 0xc03eca14
sp + 472: 0x00000100
sp + 476: 0x00000001
sp + 480: 0x0000000a
sp + 484: 0xc15529c4
sp + 488: 0x00000000
sp + 492: 0xc15da214
sp + 496: 0xc1549eb8
sp + 500: 0xc1519860
sp + 504: 0xc02438f0
sp + 508: 0xc1519cb0
sp + 512: 0xc02438f0
sp + 516: 0xc1530f00
sp + 520: 0xc1549ef0
sp + 524: 0xc01ff790
sp + 528: 0x00000002
sp + 532: 0x00000000
sp + 536: 0x00000000
sp + 540: 0x7f1ffe70
sp + 544: 0x00000000
sp + 548: 0x00000000
sp + 552: 0x00000000
sp + 556: 0x00000000
sp + 560: 0x00000803
sp + 564: 0x00000003
sp + 568: 0x00021680
sp + 572: 0x00000001
sp + 576: 0xffffffff
sp + 580: 0xc0004df0
sp + 584: 0x0000827e
sp + 588: 0x7f1ffd88
sp + 592: 0x7f1ffe70
sp + 596: 0x30b2c008
sp + 600: 0x00000001
sp + 604: 0x00080000
sp + 608: 0x30b75fe8
sp + 612: 0x01010101
sp + 616: 0x00001b01
sp + 620: 0x000004a4
sp + 624: 0x00000000
sp + 628: 0x00000000
sp + 632: 0x00018000
sp + 636: 0x000077e8
sp + 640: 0x00000000
sp + 644: 0x0000847e
sp + 648: 0x00000000
sp + 652: 0xfffffff9
sp + 656: 0x00000000
sp + 660: 0x00008079
sp + 664: 0x00000000
sp + 668: 0x00000001
sp + 672: 0x00000803
sp + 676: 0x00000000
sp + 680: 0x00000003
sp + 684: 0x5af23d90
sp + 688: 0x00021680
sp + 692: 0xfffffff9
sp + 696: 0x00000001
sp + 700: 0x00008079
sp + 704: 0x00000000
sp + 708: 0x8267ce93
sp + 712: 0x000099f4
sp + 716: 0xffffffff
sp + 720: 0xc03ffe60
sp + 724: 0xc03eea6c
sp + 728: 0x00000000
sp + 732: 0x00000000
sp + 736: 0x00000000
sp + 740: 0x00000000
sp + 744: 0x00000000
sp + 748: 0x00000000
sp + 752: 0x00000000
sp + 756: 0x00000000
sp + 760: 0x00000000
sp + 764: 0x00000000
sp + 768: 0x00000000
sp + 772: 0x00000000
sp + 776: 0x00000000
sp + 780: 0x00000000
sp + 784: 0x00000000
sp + 788: 0x00000000
sp + 792: 0x00000000
sp + 796: 0x00000000
sp + 800: 0x00000000
sp + 804: 0x00000000
sp + 808: 0x00000000
sp + 812: 0x00000000
sp + 816: 0x00000000
sp + 820: 0x00000000
sp + 824: 0x00000000
sp + 828: 0x00000000
sp + 832: 0x00000000
sp + 836: 0x00000000
sp + 840: 0x00000000
sp + 844: 0x00000000
sp + 848: 0x00000000
sp + 852: 0x00000000

 [<c01fdba0>]
 [<c005c110>]
 [<c005c638>]
 [<c005cc30>]
 [<c0061704>]
 [<c0078e34>]
 [<c0007554>]
 [<c01ff790>]
 [<c0004df0>]
 =======================
Mem-Info:
Normal per-cpu:
CPU    0: hi:    0, btch:   1 usd:   0
active_anon:2985 inactive_anon:0 isolated_anon:0
 active_file:0 inactive_file:21 isolated_file:32
 unevictable:492 dirty:0 writeback:0 unstable:0
 free:90 slab_reclaimable:0 slab_unreclaimable:0
 mapped:64 shmem:0 pagetables:0 bounce:0
Normal free:720kB min:720kB low:896kB high:1080kB active_anon:23880kB
inactive_anon:0kB active_file:0kB inactive_file:168kB unevictable:3936kB
isolated(anon):0kB isolated(file):256kB present:32640kB mlocked:0kB
dirty:0kB writeback:0kB mapped:512kB shmem:0kB slab_reclaimable:0kB
slab_unreclaimable:0kB kernel_stack:256kB pagetables:0kB unstable:0kB
bounce:0kB writeback_tmp:0kB pages_scanned:524 all_unreclaimable? yes
lowmem_reserve[]: 0 0
Normal: 0*8kB 1*16kB 0*32kB 1*64kB 1*128kB 0*256kB 1*512kB 0*1024kB
0*2048kB 0*4096kB 0*8192kB = 720kB
545 total pagecache pages
4096 pages RAM
334 pages reserved
157 pages shared
3585 pages non-shared
[ pid ]   uid  tgid total_vm      rss cpu oom_adj oom_score_adj name
[   94]     0    94      178       45   0       0             0 sh
[   95]     0    95      178       40   0       0             0 inetd
[  104]     0   104     1685     1495   0       0             0
testkautuk
[  105]     0   105     1685     1491   0       0             0
testkautuk
[  106]     0   106     1685     1491   0       0             0
testkautuk
[  107]     0   107     1685     1495   0       0             0
testkautuk
[  108]     0   108     1685     1495   0       0             0
testkautuk
[  109]     0   109     1685     1491   0       0             0
testkautuk
[  110]     0   110     1685     1495   0       0             0
testkautuk
[  111]     0   111     1685     1491   0       0             0
testkautuk
[  112]     0   112     1685     1495   0       0             0
testkautuk
[  113]     0   113     1685     1495   0       0             0
testkautuk
[  114]     0   114     1685     1491   0       0             0
testkautuk
[  115]     0   115     1685     1491   0       0             0
testkautuk
[  116]     0   116     1685     1495   0       0             0
testkautuk
[  117]     0   117     1685     1491   0       0             0
testkautuk
Out of memory: Kill process 104 (testkautuk) score 368 or sacrifice
child
Killed process 105 (testkautuk) total-vm:13480kB, anon-rss:11856kB,
file-rss:72kB
Kill process 106 (testkautuk) sharing same memory
Kill process 109 (testkautuk) sharing same memory
Kill process 111 (testkautuk) sharing same memory
Kill process 114 (testkautuk) sharing same memory
Kill process 115 (testkautuk) sharing same memory
Kill process 117 (testkautuk) sharing same memory
testkautuk invoked oom-killer: gfp_mask=0x200da, order=0, oom_adj=0,
oom_score_adj=0
Stack dump [0xc15c1ca8]:
sp + 00: 0xc01fdba0
sp + 04: 0xc005c110
sp + 08: 0xc1552b30
sp + 12: 0x000200da
sp + 16: 0x00000000
sp + 20: 0x00000000
sp + 24: 0x00000000
sp + 28: 0xc0245290
sp + 32: 0x00000000
sp + 36: 0xc15c1d30
sp + 40: 0xc1530970
sp + 44: 0x00000000
sp + 48: 0xc1530970
sp + 52: 0x00000000
sp + 56: 0xc005c638
sp + 60: 0x00000000
sp + 64: 0x0000000c
sp + 68: 0x00000000
sp + 72: 0x00000000
sp + 76: 0x00000010
sp + 80: 0xc024cc6c
sp + 84: 0xc0213b92
sp + 88: 0xc0240000
sp + 92: 0xc15c1d2c
sp + 96: 0x000002fd
sp + 100: 0x00000eb2
sp + 104: 0x00000000
sp + 108: 0xc1530970
sp + 112: 0x000200da
sp + 116: 0x00000000
sp + 120: 0x00000000
sp + 124: 0xc005cc30
sp + 128: 0xc0213b92
sp + 132: 0xc0240098
sp + 136: 0x00000000
sp + 140: 0x000200da
sp + 144: 0xc024c6a8
sp + 148: 0xc024c6a8
sp + 152: 0x00000000
sp + 156: 0xc024cc60
sp + 160: 0x00000000
sp + 164: 0x00000040
sp + 168: 0x00000001
sp + 172: 0x00000000
sp + 176: 0x00000000
sp + 180: 0xc0061704
sp + 184: 0xc024c6a8
sp + 188: 0x00000000
sp + 192: 0xc024cc64
sp + 196: 0x00000000
sp + 200: 0x000200da
sp + 204: 0x00000000
sp + 208: 0x00000000
sp + 212: 0x00000040
sp + 216: 0x00000010
sp + 220: 0x00000000
sp + 224: 0x00000000
sp + 228: 0x00000050
sp + 232: 0x00000001
sp + 236: 0x00000000
sp + 240: 0x00000040
sp + 244: 0x00000001
sp + 248: 0x00000080
sp + 252: 0x00000000
sp + 256: 0x00000000
sp + 260: 0x00000000
sp + 264: 0x00000000
sp + 268: 0x00000000
sp + 272: 0xc024c6a8
sp + 276: 0xc024c6a8
sp + 280: 0x00000000
sp + 284: 0x00000001
sp + 288: 0xc15a7d00
sp + 292: 0x316b4000
sp + 296: 0xc1531080
sp + 300: 0x00000029
sp + 304: 0xc15440c4
sp + 308: 0xc15310b4
sp + 312: 0x00000001
sp + 316: 0x00030002
sp + 320: 0xc0078e34
sp + 324: 0x00000000
sp + 328: 0xc1531080
sp + 332: 0x00000300
sp + 336: 0xc1531080
sp + 340: 0x00000001
sp + 344: 0xc15c0000
sp + 348: 0xc1552990
sp + 352: 0xc15a7d00
sp + 356: 0x316b4000
sp + 360: 0x00000029
sp + 364: 0xc1552990
sp + 368: 0xc15c1ef0
sp + 372: 0xc1531080
sp + 376: 0x00000300
sp + 380: 0xc15310b4
sp + 384: 0x00000001
sp + 388: 0x00030002
sp + 392: 0xc0007554
sp + 396: 0x30000000
sp + 400: 0xc0244064
sp + 404: 0xffffffff
sp + 408: 0x316b6000
sp + 412: 0xc03ecb40
sp + 416: 0xc03eca14
sp + 420: 0x00030002
sp + 424: 0xc0242de0
sp + 428: 0x0000000a
sp + 432: 0xc03eca00
sp + 436: 0xc03ecb40
sp + 440: 0x00000000
sp + 444: 0xc0240b70
sp + 448: 0x00000017
sp + 452: 0xc03ed94c
sp + 456: 0xc15c1e70
sp + 460: 0xc15c1e70
sp + 464: 0x00000000
sp + 468: 0xc03eca14
sp + 472: 0x00000100
sp + 476: 0x00000001
sp + 480: 0x0000000a
sp + 484: 0xc15529bc
sp + 488: 0x00000000
sp + 492: 0xc15da214
sp + 496: 0xc15c1eb8
sp + 500: 0xc1552990
sp + 504: 0xc02438f0
sp + 508: 0xc1552540
sp + 512: 0xc02438f0
sp + 516: 0xc1531080
sp + 520: 0xc15c1ef0
sp + 524: 0xc01ff790
sp + 528: 0x00000002
sp + 532: 0x00000000
sp + 536: 0x00000000
sp + 540: 0x7edffe70
sp + 544: 0x00000000
sp + 548: 0x00000000
sp + 552: 0x00000000
sp + 556: 0x00000000
sp + 560: 0x00001005
sp + 564: 0x00000005
sp + 568: 0x00021680
sp + 572: 0x00000001
sp + 576: 0xffffffff
sp + 580: 0xc0004df0
sp + 584: 0x0000827e
sp + 588: 0x7edffd88
sp + 592: 0x7edffe70
sp + 596: 0x31658008
sp + 600: 0x00000001
sp + 604: 0x00080000
sp + 608: 0x316b3fe8
sp + 612: 0x01010101
sp + 616: 0x00001201
sp + 620: 0x0000078c
sp + 624: 0x00000000
sp + 628: 0x00000000
sp + 632: 0x00018000
sp + 636: 0x000077e8
sp + 640: 0x00000000
sp + 644: 0x0000847e
sp + 648: 0x00000000
sp + 652: 0xfffffff9
sp + 656: 0x00000000
sp + 660: 0x00008079
sp + 664: 0x00000000
sp + 668: 0x00000001
sp + 672: 0x00001005
sp + 676: 0x00000000
sp + 680: 0x00000005
sp + 684: 0x5af23d90
sp + 688: 0x00021680
sp + 692: 0xfffffff9
sp + 696: 0x00000001
sp + 700: 0x00008079
sp + 704: 0x00000000
sp + 708: 0x8267ce93
sp + 712: 0x000099f4
sp + 716: 0xffffffff
sp + 720: 0xc03ffe60
sp + 724: 0xc03eea6c
sp + 728: 0x00000000
sp + 732: 0x00000000
sp + 736: 0x00000000
sp + 740: 0x00000000
sp + 744: 0x00000000
sp + 748: 0x00000000
sp + 752: 0x00000000
sp + 756: 0x00000000
sp + 760: 0x00000000
sp + 764: 0x00000000
sp + 768: 0x00000000
sp + 772: 0x00000000
sp + 776: 0x00000000
sp + 780: 0x00000000
sp + 784: 0x00000000
sp + 788: 0x00000000
sp + 792: 0x00000000
sp + 796: 0x00000000
sp + 800: 0x00000000
sp + 804: 0x00000000
sp + 808: 0x00000000
sp + 812: 0x00000000
sp + 816: 0x00000000
sp + 820: 0x00000000
sp + 824: 0x00000000
sp + 828: 0x00000000
sp + 832: 0x00000000
sp + 836: 0x00000000
sp + 840: 0x00000000
sp + 844: 0x00000000
sp + 848: 0x00000000
sp + 852: 0x00000000

 [<c01fdba0>]
 [<c005c110>]
 [<c005c638>]
 [<c005cc30>]
 [<c0061704>]
 [<c0078e34>]
 [<c0007554>]
 [<c01ff790>]
 [<c0004df0>]
 =======================
Mem-Info:
Normal per-cpu:
CPU    0: hi:    0, btch:   1 usd:   0
active_anon:2996 inactive_anon:0 isolated_anon:0
 active_file:0 inactive_file:0 isolated_file:0
 unevictable:545 dirty:0 writeback:0 unstable:0
 free:90 slab_reclaimable:0 slab_unreclaimable:0
 mapped:64 shmem:0 pagetables:0 bounce:0
Normal free:720kB min:720kB low:896kB high:1080kB active_anon:23968kB
inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:4360kB
isolated(anon):0kB isolated(file):0kB present:32640kB mlocked:0kB
dirty:0kB writeback:0kB mapped:512kB shmem:0kB slab_reclaimable:0kB
slab_unreclaimable:0kB kernel_stack:208kB pagetables:0kB unstable:0kB
bounce:0kB writeback_tmp:0kB pages_scanned:0 all_unreclaimable? yes
lowmem_reserve[]: 0 0
Normal: 0*8kB 1*16kB 0*32kB 1*64kB 1*128kB 0*256kB 1*512kB 0*1024kB
0*2048kB 0*4096kB 0*8192kB = 720kB
545 total pagecache pages
4096 pages RAM
334 pages reserved
116 pages shared
3608 pages non-shared
[ pid ]   uid  tgid total_vm      rss cpu oom_adj oom_score_adj name
[   94]     0    94      178       45   0       0             0 sh
[   95]     0    95      178       40   0       0             0 inetd
[  104]     0   104     3180     2988   0       0             0
testkautuk
[  107]     0   107     3180     2988   0       0             0
testkautuk
[  108]     0   108     3180     2988   0       0             0
testkautuk
[  110]     0   110     3180     2988   0       0             0
testkautuk
[  112]     0   112     3180     2988   0       0             0
testkautuk
[  113]     0   113     3180     2988   0       0             0
testkautuk
[  116]     0   116     3180     2988   0       0             0
testkautuk
Out of memory: Kill process 104 (testkautuk) score 765 or sacrifice
child
Killed process 104 (testkautuk) total-vm:25440kB, anon-rss:23832kB,
file-rss:72kB
Kill process 107 (testkautuk) sharing same memory
Kill process 108 (testkautuk) sharing same memory
Kill process 110 (testkautuk) sharing same memory
Kill process 112 (testkautuk) sharing same memory
Kill process 113 (testkautuk) sharing same memory
Kill process 116 (testkautuk) sharing same memory
Killed

--------- <END OF OUTPUT> --------------

On Sat, 2012-03-31 at 08:00 -0400, Kautuk Consul wrote:
> Commit d065bd810b6deb67d4897a14bfe21f8eb526ba99
> (mm: retry page fault when blocking on disk transfer) and
> commit 37b23e0525d393d48a7d59f870b3bc061a30ccdb
> (x86,mm: make pagefault killable)
> 
> The above commits introduced changes into the x86 pagefault handler
> for making the page fault handler retryable as well as killable.
> 
> These changes reduce the mmap_sem hold time, which is crucial
> during OOM killer invocation.
> 
> Port these changes to openrisc.
> 
> Signed-off-by: Mohd. Faris <mohdfarisq2010@...il.com>
> Signed-off-by: Kautuk Consul <consul.kautuk@...il.com>
> ---
>  arch/openrisc/mm/fault.c |   32 ++++++++++++++++++++++++++------
>  1 files changed, 26 insertions(+), 6 deletions(-)
> 
> diff --git a/arch/openrisc/mm/fault.c b/arch/openrisc/mm/fault.c
> index a5dce82..40f850e 100644
> --- a/arch/openrisc/mm/fault.c
> +++ b/arch/openrisc/mm/fault.c
> @@ -54,6 +54,7 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long address,
>  	struct vm_area_struct *vma;
>  	siginfo_t info;
>  	int fault;
> +	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
>  
>  	tsk = current;
>  
> @@ -105,6 +106,7 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long address,
>  	if (in_interrupt() || !mm)
>  		goto no_context;
>  
> +retry:
>  	down_read(&mm->mmap_sem);
>  	vma = find_vma(mm, address);
>  
> @@ -143,6 +145,7 @@ good_area:
>  	if (write_acc) {
>  		if (!(vma->vm_flags & VM_WRITE))
>  			goto bad_area;
> +		flags |= FAULT_FLAG_WRITE;
>  	} else {
>  		/* not present */
>  		if (!(vma->vm_flags & (VM_READ | VM_EXEC)))
> @@ -159,7 +162,11 @@ good_area:
>  	 * the fault.
>  	 */
>  
> -	fault = handle_mm_fault(mm, vma, address, write_acc);
> +	fault = handle_mm_fault(mm, vma, address, flags);
> +
> +	if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
> +		return;
> +
>  	if (unlikely(fault & VM_FAULT_ERROR)) {
>  		if (fault & VM_FAULT_OOM)
>  			goto out_of_memory;
> @@ -167,11 +174,24 @@ good_area:
>  			goto do_sigbus;
>  		BUG();
>  	}
> -	/*RGD modeled on Cris */
> -	if (fault & VM_FAULT_MAJOR)
> -		tsk->maj_flt++;
> -	else
> -		tsk->min_flt++;
> +
> +	if (flags & FAULT_FLAG_ALLOW_RETRY) {
> +		/*RGD modeled on Cris */
> +		if (fault & VM_FAULT_MAJOR)
> +			tsk->maj_flt++;
> +		else
> +			tsk->min_flt++;
> +		if (fault & VM_FAULT_RETRY) {
> +			flags &= ~FAULT_FLAG_ALLOW_RETRY;
> +
> +			 /* No need to up_read(&mm->mmap_sem) as we would
> +			 * have already released it in __lock_page_or_retry
> +			 * in mm/filemap.c.
> +			 */
> +
> +			goto retry;
> +		}
> +	}
>  
>  	up_read(&mm->mmap_sem);
>  	return;


Download attachment "signature.asc" of type "application/pgp-signature" (199 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ