From: Jeff Dike Comment some lack of locking in the iomem driver. Also, a couple of variables are in the wrong place, so they are moved. Signed-off-by: Jeff Dike Cc: Paolo 'Blaisorblade' Giarrusso Signed-off-by: Andrew Morton --- arch/um/kernel/mem.c | 10 ---------- arch/um/kernel/physmem.c | 17 +++++++++++++++++ 2 files changed, 17 insertions(+), 10 deletions(-) diff -puN arch/um/kernel/mem.c~uml-locking-comments-in-iomem-driver arch/um/kernel/mem.c --- a/arch/um/kernel/mem.c~uml-locking-comments-in-iomem-driver +++ a/arch/um/kernel/mem.c @@ -367,16 +367,6 @@ struct page *pte_alloc_one(struct mm_str return pte; } -struct iomem_region *iomem_regions = NULL; -int iomem_size = 0; - -extern int parse_iomem(char *str, int *add) __init; - -__uml_setup("iomem=", parse_iomem, -"iomem=,\n" -" Configure as an IO memory region named .\n\n" -); - /* * Overrides for Emacs so that we follow Linus's tabbing style. * Emacs will notice this stuff at the end of the file and automatically diff -puN arch/um/kernel/physmem.c~uml-locking-comments-in-iomem-driver arch/um/kernel/physmem.c --- a/arch/um/kernel/physmem.c~uml-locking-comments-in-iomem-driver +++ a/arch/um/kernel/physmem.c @@ -398,6 +398,23 @@ __uml_setup("mem=", uml_mem_setup, " Example: mem=64M\n\n" ); +extern int __init parse_iomem(char *str, int *add); + +__uml_setup("iomem=", parse_iomem, +"iomem=,\n" +" Configure as an IO memory region named .\n\n" +); + +/* + * This list is constructed in parse_iomem and addresses filled in in + * setup_iomem, both of which run during early boot. Afterwards, it's + * unchanged. + */ +struct iomem_region *iomem_regions = NULL; + +/* Initialized in parse_iomem */ +int iomem_size = 0; + unsigned long find_iomem(char *driver, unsigned long *len_out) { struct iomem_region *region = iomem_regions; _