From: "D. Bahi" <dbahi@enterasys.com>
To: Blaisorblade <blaisorblade@yahoo.it>
Cc: user-mode-linux-devel@lists.sourceforge.net,
Jeff Dike <jdike@addtoit.com>
Subject: Re: [uml-devel] UML 2.4 shmem.c changes? panic w/ backtrace
Date: Wed, 02 Mar 2005 12:03:39 -0500 [thread overview]
Message-ID: <4225F1EB.9010503@enterasys.com> (raw)
In-Reply-To: <200503021801.28494.blaisorblade@yahoo.it>
[-- Attachment #1: Type: text/plain, Size: 20795 bytes --]
wow! thank you Blaisor. will apply and let you know.
still working on an isolated shmem program that will
reproduce this....
Blaisorblade wrote:
>On Wednesday 02 March 2005 15:07, Blaisorblade wrote:
>
>
>>On Monday 28 February 2005 20:44, Jeff Dike wrote:
>>
>>
>>>dbahi@enterasys.com said:
>>>
>>>
>>>>This happens everytime i try to load an application of ours that uses
>>>>shmem for syslog...
>>>>
>>>>
>>>I persist in seeing no particular UML involvement with this crash :-)
>>>
>>>Can you boil your app down to a test case which reproduces this?
>>>
>>>
>>Jeff, since the UML changes to the shmem.c code are currently unused, just
>>to make sure, can you remove them from the patch, so that we can make sure?
>>They are, actually, the devanon patch.
>>
>>
>
>Ok, D.Bahi, I found that I already prepared a patch to do this work. It also
>removes SKAS support for inner UML, btw, which is untested and probably would
>need some fixes. Apply the patch, and tell us the result.
>
>
>------------------------------------------------------------------------
>
>
>
>Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade_spam@yahoo.it>
>---
>
> um-linux-2.4.27-paolo/arch/um/config.in | 1
> um-linux-2.4.27-paolo/arch/um/defconfig | 1
> um-linux-2.4.27-paolo/arch/um/kernel/ptrace.c | 54 -------
> um-linux-2.4.27-paolo/drivers/char/mem.c | 8 -
> um-linux-2.4.27-paolo/include/linux/fs.h | 2
> um-linux-2.4.27-paolo/include/linux/mm.h | 13 -
> um-linux-2.4.27-paolo/include/linux/shmem_fs.h | 2
> um-linux-2.4.27-paolo/mm/Makefile | 1
> um-linux-2.4.27-paolo/mm/mmap.c | 12 -
> um-linux-2.4.27-paolo/mm/mprotect.c | 14 --
> um-linux-2.4.27-paolo/mm/shmem.c | 149 ---------------------
> um-linux-2.4.27/mm/proc_mm.c | 173 -------------------------
> 12 files changed, 18 insertions(+), 412 deletions(-)
>
>diff -puN drivers/char/mem.c~remove-devanon-skas drivers/char/mem.c
>--- um-linux-2.4.27/drivers/char/mem.c~remove-devanon-skas 2004-11-25 12:57:47.000000000 +0100
>+++ um-linux-2.4.27-paolo/drivers/char/mem.c 2004-11-25 12:57:47.000000000 +0100
>@@ -666,8 +666,6 @@ static struct file_operations full_fops
> write: write_full,
> };
>
>-extern struct file_operations anon_file_operations;
>-
> static int memory_open(struct inode * inode, struct file * filp)
> {
> switch (MINOR(inode->i_rdev)) {
>@@ -697,9 +695,6 @@ static int memory_open(struct inode * in
> case 9:
> filp->f_op = &urandom_fops;
> break;
>- case 10:
>- filp->f_op = &anon_file_operations;
>- break;
> default:
> return -ENXIO;
> }
>@@ -726,8 +721,7 @@ void __init memory_devfs_register (void)
> {5, "zero", S_IRUGO | S_IWUGO, &zero_fops},
> {7, "full", S_IRUGO | S_IWUGO, &full_fops},
> {8, "random", S_IRUGO | S_IWUSR, &random_fops},
>- {9, "urandom", S_IRUGO | S_IWUSR, &urandom_fops},
>- {10, "anon", S_IRUGO | S_IWUSR, &anon_file_operations},
>+ {9, "urandom", S_IRUGO | S_IWUSR, &urandom_fops}
> };
> int i;
>
>diff -puN include/linux/fs.h~remove-devanon-skas include/linux/fs.h
>--- um-linux-2.4.27/include/linux/fs.h~remove-devanon-skas 2004-11-25 12:57:47.000000000 +0100
>+++ um-linux-2.4.27-paolo/include/linux/fs.h 2004-11-25 12:57:47.772483688 +0100
>@@ -870,8 +870,6 @@ struct file_operations {
> unsigned int (*poll) (struct file *, struct poll_table_struct *);
> int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);
> int (*mmap) (struct file *, struct vm_area_struct *);
>- void (*munmap) (struct file *, struct vm_area_struct *,
>- unsigned long start, unsigned long len);
> int (*open) (struct inode *, struct file *);
> int (*flush) (struct file *);
> int (*release) (struct inode *, struct file *);
>diff -puN include/linux/shmem_fs.h~remove-devanon-skas include/linux/shmem_fs.h
>--- um-linux-2.4.27/include/linux/shmem_fs.h~remove-devanon-skas 2004-11-25 12:57:47.000000000 +0100
>+++ um-linux-2.4.27-paolo/include/linux/shmem_fs.h 2004-11-25 12:57:47.772483688 +0100
>@@ -22,8 +22,6 @@ struct shmem_inode_info {
> unsigned long next_index;
> swp_entry_t i_direct[SHMEM_NR_DIRECT]; /* for the first blocks */
> void **i_indirect; /* indirect blocks */
>- unsigned long map_direct[SHMEM_NR_DIRECT];
>- void **map_indirect;
> unsigned long swapped; /* data pages assigned to swap */
> unsigned long flags;
> struct list_head list;
>diff -puN mm/Makefile~remove-devanon-skas mm/Makefile
>--- um-linux-2.4.27/mm/Makefile~remove-devanon-skas 2004-11-25 12:57:47.000000000 +0100
>+++ um-linux-2.4.27-paolo/mm/Makefile 2004-11-25 12:57:47.000000000 +0100
>@@ -17,6 +17,5 @@ obj-y := memory.o mmap.o filemap.o mpro
> shmem.o
>
> obj-$(CONFIG_HIGHMEM) += highmem.o
>-obj-$(CONFIG_PROC_MM) += proc_mm.o
>
> include $(TOPDIR)/Rules.make
>diff -puN mm/mmap.c~remove-devanon-skas mm/mmap.c
>--- um-linux-2.4.27/mm/mmap.c~remove-devanon-skas 2004-11-25 12:57:47.000000000 +0100
>+++ um-linux-2.4.27-paolo/mm/mmap.c 2004-11-25 12:57:47.000000000 +0100
>@@ -391,11 +391,10 @@ static int vma_merge(struct mm_struct *
> return 0;
> }
>
>-unsigned long do_mmap_pgoff(struct mm_struct *mm, struct file * file,
>- unsigned long addr, unsigned long len,
>- unsigned long prot, unsigned long flags,
>- unsigned long pgoff)
>+unsigned long do_mmap_pgoff(struct file * file, unsigned long addr, unsigned long len,
>+ unsigned long prot, unsigned long flags, unsigned long pgoff)
> {
>+ struct mm_struct * mm = current->mm;
> struct vm_area_struct * vma, * prev;
> unsigned int vm_flags;
> int correct_wcount = 0;
>@@ -1001,11 +1000,6 @@ int do_munmap(struct mm_struct *mm, unsi
> remove_shared_vm_struct(mpnt);
> mm->map_count--;
>
>- if((mpnt->vm_file != NULL) && (mpnt->vm_file->f_op != NULL) &&
>- (mpnt->vm_file->f_op->munmap != NULL))
>- mpnt->vm_file->f_op->munmap(mpnt->vm_file, mpnt, st,
>- size);
>-
> zap_page_range(mm, st, size);
>
> /*
>diff -puN mm/mprotect.c~remove-devanon-skas mm/mprotect.c
>--- um-linux-2.4.27/mm/mprotect.c~remove-devanon-skas 2004-11-25 12:57:47.000000000 +0100
>+++ um-linux-2.4.27-paolo/mm/mprotect.c 2004-11-25 12:57:47.000000000 +0100
>@@ -264,8 +264,7 @@ static int mprotect_fixup(struct vm_area
> return 0;
> }
>
>-long do_mprotect(struct mm_struct *mm, unsigned long start, size_t len,
>- unsigned long prot)
>+asmlinkage long sys_mprotect(unsigned long start, size_t len, unsigned long prot)
> {
> unsigned long nstart, end, tmp;
> struct vm_area_struct * vma, * next, * prev;
>@@ -282,9 +281,9 @@ long do_mprotect(struct mm_struct *mm, u
> if (end == start)
> return 0;
>
>- down_write(&mm->mmap_sem);
>+ down_write(¤t->mm->mmap_sem);
>
>- vma = find_vma_prev(mm, start, &prev);
>+ vma = find_vma_prev(current->mm, start, &prev);
> error = -ENOMEM;
> if (!vma || vma->vm_start > start)
> goto out;
>@@ -333,11 +332,6 @@ long do_mprotect(struct mm_struct *mm, u
> prev->vm_mm->map_count--;
> }
> out:
>- up_write(&mm->mmap_sem);
>+ up_write(¤t->mm->mmap_sem);
> return error;
> }
>-
>-asmlinkage long sys_mprotect(unsigned long start, size_t len, unsigned long prot)
>-{
>- return(do_mprotect(current->mm, start, len, prot));
>-}
>diff -L mm/proc_mm.c -puN mm/proc_mm.c~remove-devanon-skas /dev/null
>--- um-linux-2.4.27/mm/proc_mm.c
>+++ /dev/null 2004-06-25 17:47:25.000000000 +0200
>@@ -1,173 +0,0 @@
>-/*
>- * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
>- * Licensed under the GPL
>- */
>-
>-#include "linux/init.h"
>-#include "linux/proc_fs.h"
>-#include "linux/proc_mm.h"
>-#include "linux/file.h"
>-#include "asm/uaccess.h"
>-#include "asm/mmu_context.h"
>-
>-static struct file_operations proc_mm_fops;
>-
>-struct mm_struct *proc_mm_get_mm(int fd)
>-{
>- struct mm_struct *ret = ERR_PTR(-EBADF);
>- struct file *file;
>-
>- file = fget(fd);
>- if (!file)
>- goto out;
>-
>- ret = ERR_PTR(-EINVAL);
>- if(file->f_op != &proc_mm_fops)
>- goto out_fput;
>-
>- ret = file->private_data;
>- out_fput:
>- fput(file);
>- out:
>- return(ret);
>-}
>-
>-extern long do_mmap2(struct mm_struct *mm, unsigned long addr,
>- unsigned long len, unsigned long prot,
>- unsigned long flags, unsigned long fd,
>- unsigned long pgoff);
>-
>-static ssize_t write_proc_mm(struct file *file, const char *buffer,
>- size_t count, loff_t *ppos)
>-{
>- struct mm_struct *mm = file->private_data;
>- struct proc_mm_op req;
>- int n, ret;
>-
>- if(count > sizeof(req))
>- return(-EINVAL);
>-
>- n = copy_from_user(&req, buffer, count);
>- if(n != 0)
>- return(-EFAULT);
>-
>- ret = count;
>- switch(req.op){
>- case MM_MMAP: {
>- struct mm_mmap *map = &req.u.mmap;
>-
>- ret = do_mmap2(mm, map->addr, map->len, map->prot,
>- map->flags, map->fd, map->offset >> PAGE_SHIFT);
>- if((ret & ~PAGE_MASK) == 0)
>- ret = count;
>-
>- break;
>- }
>- case MM_MUNMAP: {
>- struct mm_munmap *unmap = &req.u.munmap;
>-
>- down_write(&mm->mmap_sem);
>- ret = do_munmap(mm, unmap->addr, unmap->len);
>- up_write(&mm->mmap_sem);
>-
>- if(ret == 0)
>- ret = count;
>- break;
>- }
>- case MM_MPROTECT: {
>- struct mm_mprotect *protect = &req.u.mprotect;
>-
>- ret = do_mprotect(mm, protect->addr, protect->len,
>- protect->prot);
>- if(ret == 0)
>- ret = count;
>- break;
>- }
>-
>- case MM_COPY_SEGMENTS: {
>- struct mm_struct *from = proc_mm_get_mm(req.u.copy_segments);
>-
>- if(IS_ERR(from)){
>- ret = PTR_ERR(from);
>- break;
>- }
>-
>- mm_copy_segments(from, mm);
>- break;
>- }
>- default:
>- ret = -EINVAL;
>- break;
>- }
>-
>- return(ret);
>-}
>-
>-static int open_proc_mm(struct inode *inode, struct file *file)
>-{
>- struct mm_struct *mm = mm_alloc();
>- int ret;
>-
>- ret = -ENOMEM;
>- if(mm == NULL)
>- goto out_mem;
>-
>- ret = init_new_context(current, mm);
>- if(ret)
>- goto out_free;
>-
>- spin_lock(&mmlist_lock);
>- list_add(&mm->mmlist, ¤t->mm->mmlist);
>- mmlist_nr++;
>- spin_unlock(&mmlist_lock);
>-
>- file->private_data = mm;
>-
>- return(0);
>-
>- out_free:
>- mmput(mm);
>- out_mem:
>- return(ret);
>-}
>-
>-static int release_proc_mm(struct inode *inode, struct file *file)
>-{
>- struct mm_struct *mm = file->private_data;
>-
>- mmput(mm);
>- return(0);
>-}
>-
>-static struct file_operations proc_mm_fops = {
>- .open = open_proc_mm,
>- .release = release_proc_mm,
>- .write = write_proc_mm,
>-};
>-
>-static int make_proc_mm(void)
>-{
>- struct proc_dir_entry *ent;
>-
>- ent = create_proc_entry("mm", 0222, &proc_root);
>- if(ent == NULL){
>- printk("make_proc_mm : Failed to register /proc/mm\n");
>- return(0);
>- }
>- ent->proc_fops = &proc_mm_fops;
>-
>- return(0);
>-}
>-
>-__initcall(make_proc_mm);
>-
>-/*
>- * Overrides for Emacs so that we follow Linus's tabbing style.
>- * Emacs will notice this stuff at the end of the file and automatically
>- * adjust the settings for this buffer only. This must remain at the end
>- * of the file.
>- * ---------------------------------------------------------------------------
>- * Local variables:
>- * c-file-style: "linux"
>- * End:
>- */
>diff -puN mm/shmem.c~remove-devanon-skas mm/shmem.c
>--- um-linux-2.4.27/mm/shmem.c~remove-devanon-skas 2004-11-25 12:57:47.000000000 +0100
>+++ um-linux-2.4.27-paolo/mm/shmem.c 2004-11-25 12:57:47.000000000 +0100
>@@ -128,17 +128,16 @@ static void shmem_removepage(struct page
> * +-> 48-51
> * +-> 52-55
> */
>-static void *shmem_block(unsigned long index, unsigned long *page,
>- unsigned long *direct, void ***indirect)
>+static swp_entry_t *shmem_swp_entry(struct shmem_inode_info *info, unsigned long index, unsigned long *page)
> {
> unsigned long offset;
> void **dir;
>
> if (index < SHMEM_NR_DIRECT)
>- return direct+index;
>- if (!*indirect) {
>+ return info->i_direct+index;
>+ if (!info->i_indirect) {
> if (page) {
>- *indirect = (void **) *page;
>+ info->i_indirect = (void **) *page;
> *page = 0;
> }
> return NULL; /* need another page */
>@@ -147,7 +146,7 @@ static void *shmem_block(unsigned long i
> index -= SHMEM_NR_DIRECT;
> offset = index % ENTRIES_PER_PAGE;
> index /= ENTRIES_PER_PAGE;
>- dir = *indirect;
>+ dir = info->i_indirect;
>
> if (index >= ENTRIES_PER_PAGE/2) {
> index -= ENTRIES_PER_PAGE/2;
>@@ -170,21 +169,7 @@ static void *shmem_block(unsigned long i
> *dir = (void *) *page;
> *page = 0;
> }
>- return (unsigned long **) *dir + offset;
>-}
>-
>-static swp_entry_t *shmem_swp_entry(struct shmem_inode_info *info, unsigned long index, unsigned long *page)
>-{
>- return((swp_entry_t *) shmem_block(index, page,
>- (unsigned long *) info->i_direct,
>- &info->i_indirect));
>-}
>-
>-static unsigned long *shmem_map_count(struct shmem_inode_info *info,
>- unsigned long index, unsigned long *page)
>-{
>- return((unsigned long *) shmem_block(index, page, info->map_direct,
>- &info->map_indirect));
>+ return (swp_entry_t *) *dir + offset;
> }
>
> /*
>@@ -862,7 +847,6 @@ static int shmem_mmap(struct file *file,
> ops = &shmem_vm_ops;
> if (!S_ISREG(inode->i_mode))
> return -EACCES;
>-
> UPDATE_ATIME(inode);
> vma->vm_ops = ops;
> return 0;
>@@ -1752,125 +1736,4 @@ int shmem_zero_setup(struct vm_area_stru
> return 0;
> }
>
>-static int adjust_map_counts(struct shmem_inode_info *info,
>- unsigned long offset, unsigned long len,
>- int adjust)
>-{
>- unsigned long idx, i, *count, page = 0;
>-
>- spin_lock(&info->lock);
>- offset >>= PAGE_SHIFT;
>- len >>= PAGE_SHIFT;
>- for(i = 0; i < len; i++){
>- idx = (i + offset) >> (PAGE_CACHE_SHIFT - PAGE_SHIFT);
>-
>- while((count = shmem_map_count(info, idx, &page)) == NULL){
>- spin_unlock(&info->lock);
>- page = get_zeroed_page(GFP_KERNEL);
>- if(page == 0)
>- return(-ENOMEM);
>- spin_lock(&info->lock);
>- }
>-
>- if(page != 0)
>- free_page(page);
>-
>- *count += adjust;
>- }
>- spin_unlock(&info->lock);
>- return(0);
>-}
>-
> EXPORT_SYMBOL(shmem_file_setup);
>-
>-struct file_operations anon_file_operations;
>-
>-static int anon_mmap(struct file *file, struct vm_area_struct *vma)
>-{
>- struct file *new;
>- struct inode *inode;
>- loff_t size = vma->vm_end - vma->vm_start;
>- int err;
>-
>- if(file->private_data == NULL){
>- new = shmem_file_setup("dev/anon", size);
>- if(IS_ERR(new))
>- return(PTR_ERR(new));
>-
>- new->f_op = &anon_file_operations;
>- file->private_data = new;
>- }
>-
>- if (vma->vm_file)
>- fput(vma->vm_file);
>- vma->vm_file = file->private_data;
>- get_file(vma->vm_file);
>-
>- inode = vma->vm_file->f_dentry->d_inode;
>- err = adjust_map_counts(SHMEM_I(inode), vma->vm_pgoff, size, 1);
>- if(err)
>- return(err);
>-
>- vma->vm_ops = &shmem_vm_ops;
>- return 0;
>-}
>-
>-static void anon_munmap(struct file *file, struct vm_area_struct *vma,
>- unsigned long start, unsigned long len)
>-{
>- struct inode *inode = file->f_dentry->d_inode;
>- struct shmem_inode_info *info = SHMEM_I(inode);
>- pgd_t *pgd;
>- pmd_t *pmd;
>- pte_t *pte;
>- struct page *page;
>- unsigned long addr, idx, *count;
>-
>- for(addr = start; addr < start + len; addr += PAGE_SIZE){
>- idx = (addr - vma->vm_start + vma->vm_pgoff);
>- idx >>= PAGE_CACHE_SHIFT;
>-
>- count = shmem_map_count(info, idx, NULL);
>- BUG_ON(count == NULL);
>-
>- (*count)--;
>- if(*count > 0)
>- continue;
>-
>- pgd = pgd_offset(vma->vm_mm, addr);
>- if(pgd_none(*pgd))
>- continue;
>-
>- pmd = pmd_offset(pgd, addr);
>- if(pmd_none(*pmd))
>- continue;
>-
>- pte = pte_offset(pmd, addr);
>- if(!pte_present(*pte)) /* XXX need to handle swapped pages */
>- continue;
>-
>- *pte = pte_mkclean(*pte);
>-
>- page = pte_page(*pte);
>- LockPage(page);
>- lru_cache_del(page);
>- ClearPageDirty(page);
>- remove_inode_page(page);
>- UnlockPage(page);
>-
>- page_cache_release(page);
>- }
>-}
>-
>-int anon_release(struct inode *inode, struct file *file)
>-{
>- if(file->private_data != NULL)
>- fput(file->private_data);
>- return(0);
>-}
>-
>-struct file_operations anon_file_operations = {
>- .mmap = anon_mmap,
>- .munmap = anon_munmap,
>- .release = anon_release,
>-};
>diff -puN arch/um/config.in~remove-devanon-skas arch/um/config.in
>--- um-linux-2.4.27/arch/um/config.in~remove-devanon-skas 2004-11-25 13:05:25.000000000 +0100
>+++ um-linux-2.4.27-paolo/arch/um/config.in 2004-11-25 13:07:26.000000000 +0100
>@@ -52,7 +52,6 @@ fi
> int 'Nesting level' CONFIG_NEST_LEVEL 0
> int 'Kernel address space size (in .5G units)' CONFIG_KERNEL_HALF_GIGS 1
> bool 'Highmem support' CONFIG_HIGHMEM
>-bool '/proc/mm' CONFIG_PROC_MM
> int 'Kernel stack size order' CONFIG_KERNEL_STACK_ORDER 2
> bool 'Real-time Clock' CONFIG_UML_REAL_TIME_CLOCK
> endmenu
>diff -puN arch/um/defconfig~remove-devanon-skas arch/um/defconfig
>--- um-linux-2.4.27/arch/um/defconfig~remove-devanon-skas 2004-11-25 13:05:37.000000000 +0100
>+++ um-linux-2.4.27-paolo/arch/um/defconfig 2004-11-25 13:07:26.000000000 +0100
>@@ -37,7 +37,6 @@ CONFIG_MAGIC_SYSRQ=y
> CONFIG_NEST_LEVEL=0
> CONFIG_KERNEL_HALF_GIGS=1
> # CONFIG_HIGHMEM is not set
>-CONFIG_PROC_MM=y
> CONFIG_KERNEL_STACK_ORDER=2
> CONFIG_UML_REAL_TIME_CLOCK=y
>
>diff -puN arch/um/kernel/ptrace.c~remove-devanon-skas arch/um/kernel/ptrace.c
>--- um-linux-2.4.27/arch/um/kernel/ptrace.c~remove-devanon-skas 2004-11-25 13:05:49.000000000 +0100
>+++ um-linux-2.4.27-paolo/arch/um/kernel/ptrace.c 2004-11-25 13:07:26.000000000 +0100
>@@ -7,9 +7,6 @@
> #include "linux/mm.h"
> #include "linux/errno.h"
> #include "linux/smp_lock.h"
>-#ifdef CONFIG_PROC_MM
>-#include "linux/proc_mm.h"
>-#endif
> #include "asm/ptrace.h"
> #include "asm/uaccess.h"
> #include "kern_util.h"
>@@ -231,57 +228,6 @@ int sys_ptrace(long request, long pid, l
> ret = set_fpxregs(data, child);
> break;
> #endif
>- case PTRACE_FAULTINFO: {
>- struct ptrace_faultinfo fault;
>-
>- fault = ((struct ptrace_faultinfo)
>- { .is_write = child->thread.err,
>- .addr = child->thread.cr2 });
>- ret = copy_to_user((unsigned long *) data, &fault,
>- sizeof(fault));
>- if(ret)
>- break;
>- break;
>- }
>- case PTRACE_SIGPENDING:
>- ret = copy_to_user((unsigned long *) data,
>- &child->pending.signal,
>- sizeof(child->pending.signal));
>- break;
>-
>- case PTRACE_LDT: {
>- struct ptrace_ldt ldt;
>-
>- if(copy_from_user(&ldt, (unsigned long *) data,
>- sizeof(ldt))){
>- ret = -EIO;
>- break;
>- }
>-
>- /* This one is confusing, so just punt and return -EIO for
>- * now
>- */
>- ret = -EIO;
>- break;
>- }
>-#ifdef CONFIG_PROC_MM
>- case PTRACE_SWITCH_MM: {
>- struct mm_struct *old = child->mm;
>- struct mm_struct *new = proc_mm_get_mm(data);
>-
>- if(IS_ERR(new)){
>- ret = PTR_ERR(new);
>- break;
>- }
>-
>- atomic_inc(&new->mm_users);
>- child->mm = new;
>- child->active_mm = new;
>- mmput(old);
>- ret = 0;
>- break;
>- }
>-#endif
> default:
> ret = -EIO;
> break;
>diff -puN include/linux/mm.h~remove-devanon-skas include/linux/mm.h
>--- um-linux-2.4.27/include/linux/mm.h~remove-devanon-skas 2004-11-25 13:15:05.310753896 +0100
>+++ um-linux-2.4.27-paolo/include/linux/mm.h 2004-11-25 13:16:05.670577808 +0100
>@@ -517,9 +517,6 @@ extern int ptrace_check_attach(struct ta
> int get_user_pages(struct task_struct *tsk, struct mm_struct *mm, unsigned long start,
> int len, int write, int force, struct page **pages, struct vm_area_struct **vmas);
>
>-extern long do_mprotect(struct mm_struct *mm, unsigned long start,
>- size_t len, unsigned long prot);
>-
> /*
> * On a two-level page table, this ends up being trivial. Thus the
> * inlining and the symmetry break with pte_alloc() that does all
>@@-567,10 +564,9 @@ extern void exit_mmap(struct mm_struct *
>
> extern unsigned long get_unmapped_area(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
>
>-extern unsigned long do_mmap_pgoff(struct mm_struct *mm, struct file *file,
>- unsigned long addr, unsigned long len,
>- unsigned long prot, unsigned long flag,
>- unsigned long pgoff);
>+extern unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
>+ unsigned long len, unsigned long prot,
>+ unsigned long flag, unsigned long pgoff);
>
> static inline unsigned long do_mmap(struct file *file, unsigned long addr,
> unsigned long len, unsigned long prot,
>@@ -580,8 +576,7 @@ static inline unsigned long do_mmap(stru
> if ((offset + PAGE_ALIGN(len)) < offset)
> goto out;
> if (!(offset & ~PAGE_MASK))
>- ret = do_mmap_pgoff(current->mm, file, addr, len, prot, flag,
>- offset >> PAGE_SHIFT);
>+ ret = do_mmap_pgoff(file, addr, len, prot, flag, offset >> PAGE_SHIFT);
> out:
> return ret;
> }
>_
>
>
--
db
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 187 bytes --]
prev parent reply other threads:[~2005-03-02 17:04 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-11-23 16:01 [uml-devel] UML 2.4 shmem.c changes? panic w/ backtrace D. Bahi
2004-11-23 20:13 ` Blaisorblade
2004-11-24 2:42 ` Jeff Dike
2005-02-24 23:13 ` D. Bahi
2005-02-28 19:44 ` Jeff Dike
2005-03-02 14:07 ` Blaisorblade
2005-03-02 17:01 ` Blaisorblade
2005-03-02 17:03 ` D. Bahi [this message]
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=4225F1EB.9010503@enterasys.com \
--to=dbahi@enterasys.com \
--cc=blaisorblade@yahoo.it \
--cc=jdike@addtoit.com \
--cc=user-mode-linux-devel@lists.sourceforge.net \
/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