diff options
author | Anton Ivanov <antivano@cisco.com> | 2014-03-07 13:37:47 -0500 |
---|---|---|
committer | Richard Weinberger <richard@nod.at> | 2014-04-20 17:57:21 -0400 |
commit | 0565103d1adbd765ca45248d04c327c076dd1571 (patch) | |
tree | bc72dc69499b068766284276bee91884afb1218b /arch/um/kernel | |
parent | 9fcb663be42e4727c1beabc7c80e2d839199e6b1 (diff) |
um: Memory corruption on startup
The reverse case of this race (you must msync before read) is
well known. This is the not so common one.
It can be triggered only on systems which do a lot of task
switching and only at UML startup. If you are starting 200+ UMLs
~ 0.5% will always die without this fix.
Signed-off-by: Anton Ivanov <antivano@cisco.com>
[rw: minor whitespace fixes]
Signed-off-by: Richard Weinberger <richard@nod.at>
Diffstat (limited to 'arch/um/kernel')
-rw-r--r-- | arch/um/kernel/physmem.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/arch/um/kernel/physmem.c b/arch/um/kernel/physmem.c index f116db15d402..30fdd5d0067b 100644 --- a/arch/um/kernel/physmem.c +++ b/arch/um/kernel/physmem.c | |||
@@ -103,6 +103,7 @@ void __init setup_physmem(unsigned long start, unsigned long reserve_end, | |||
103 | */ | 103 | */ |
104 | os_seek_file(physmem_fd, __pa(&__syscall_stub_start)); | 104 | os_seek_file(physmem_fd, __pa(&__syscall_stub_start)); |
105 | os_write_file(physmem_fd, &__syscall_stub_start, PAGE_SIZE); | 105 | os_write_file(physmem_fd, &__syscall_stub_start, PAGE_SIZE); |
106 | os_fsync_file(physmem_fd); | ||
106 | 107 | ||
107 | bootmap_size = init_bootmem(pfn, pfn + delta); | 108 | bootmap_size = init_bootmem(pfn, pfn + delta); |
108 | free_bootmem(__pa(reserve_end) + bootmap_size, | 109 | free_bootmem(__pa(reserve_end) + bootmap_size, |