diff options
Diffstat (limited to 'arch/um/include')
82 files changed, 308 insertions, 1193 deletions
diff --git a/arch/um/include/asm/Kbuild b/arch/um/include/asm/Kbuild new file mode 100644 index 00000000000..a5e4b606821 --- /dev/null +++ b/arch/um/include/asm/Kbuild @@ -0,0 +1,28 @@ +generic-y += barrier.h +generic-y += bug.h +generic-y += clkdev.h +generic-y += cputime.h +generic-y += current.h +generic-y += delay.h +generic-y += device.h +generic-y += emergency-restart.h +generic-y += exec.h +generic-y += ftrace.h +generic-y += futex.h +generic-y += hardirq.h +generic-y += hash.h +generic-y += hw_irq.h +generic-y += io.h +generic-y += irq_regs.h +generic-y += kdebug.h +generic-y += mcs_spinlock.h +generic-y += mutex.h +generic-y += param.h +generic-y += pci.h +generic-y += percpu.h +generic-y += preempt.h +generic-y += sections.h +generic-y += switch_to.h +generic-y += topology.h +generic-y += trace_clock.h +generic-y += xor.h diff --git a/arch/um/include/asm/apic.h b/arch/um/include/asm/apic.h deleted file mode 100644 index 876dee84ab1..00000000000 --- a/arch/um/include/asm/apic.h +++ /dev/null @@ -1,4 +0,0 @@ -#ifndef __UM_APIC_H -#define __UM_APIC_H - -#endif diff --git a/arch/um/include/asm/arch_hweight.h b/arch/um/include/asm/arch_hweight.h deleted file mode 100644 index c656cf443f4..00000000000 --- a/arch/um/include/asm/arch_hweight.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef _ASM_UM_HWEIGHT_H -#define _ASM_UM_HWEIGHT_H - -#include <asm-generic/bitops/arch_hweight.h> - -#endif diff --git a/arch/um/include/asm/asm-offsets.h b/arch/um/include/asm/asm-offsets.h deleted file mode 100644 index d370ee36a18..00000000000 --- a/arch/um/include/asm/asm-offsets.h +++ /dev/null @@ -1 +0,0 @@ -#include <generated/asm-offsets.h> diff --git a/arch/um/include/asm/auxvec.h b/arch/um/include/asm/auxvec.h deleted file mode 100644 index 1e5e1c2fc9b..00000000000 --- a/arch/um/include/asm/auxvec.h +++ /dev/null @@ -1,4 +0,0 @@ -#ifndef __UM_AUXVEC_H -#define __UM_AUXVEC_H - -#endif diff --git a/arch/um/include/asm/checksum.h b/arch/um/include/asm/checksum.h deleted file mode 100644 index 5b501361e36..00000000000 --- a/arch/um/include/asm/checksum.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef __UM_CHECKSUM_H -#define __UM_CHECKSUM_H - -#include "sysdep/checksum.h" - -#endif diff --git a/arch/um/include/asm/common.lds.S b/arch/um/include/asm/common.lds.S index ac55b9efa1c..1dd5bd8a8c5 100644 --- a/arch/um/include/asm/common.lds.S +++ b/arch/um/include/asm/common.lds.S @@ -42,7 +42,7 @@  	INIT_SETUP(0)    } -  PERCPU(32) +  PERCPU_SECTION(32)    .initcall.init : {  	INIT_CALLS @@ -57,7 +57,6 @@  	*(.uml.initcall.init)  	__uml_initcall_end = .;    } -  __init_end = .;    SECURITY_INIT diff --git a/arch/um/include/asm/cputime.h b/arch/um/include/asm/cputime.h deleted file mode 100644 index c84acbadfa2..00000000000 --- a/arch/um/include/asm/cputime.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef __UM_CPUTIME_H -#define __UM_CPUTIME_H - -#include <asm-generic/cputime.h> - -#endif /* __UM_CPUTIME_H */ diff --git a/arch/um/include/asm/current.h b/arch/um/include/asm/current.h deleted file mode 100644 index c2191d9aa03..00000000000 --- a/arch/um/include/asm/current.h +++ /dev/null @@ -1,13 +0,0 @@ -/* - * Copyright (C) 2000 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com) - * Licensed under the GPL - */ - -#ifndef __UM_CURRENT_H -#define __UM_CURRENT_H - -#include "linux/thread_info.h" - -#define current (current_thread_info()->task) - -#endif diff --git a/arch/um/include/asm/delay.h b/arch/um/include/asm/delay.h deleted file mode 100644 index c71e32b6741..00000000000 --- a/arch/um/include/asm/delay.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef __UM_DELAY_H -#define __UM_DELAY_H - -#define MILLION 1000000 - -/* Undefined on purpose */ -extern void __bad_udelay(void); - -extern void __udelay(unsigned long usecs); -extern void __delay(unsigned long loops); - -#define udelay(n) ((__builtin_constant_p(n) && (n) > 20000) ? \ -	__bad_udelay() : __udelay(n)) - -/* It appears that ndelay is not used at all for UML, and has never been - * implemented. */ -extern void __unimplemented_ndelay(void); -#define ndelay(n) __unimplemented_ndelay() - -#endif diff --git a/arch/um/include/asm/desc.h b/arch/um/include/asm/desc.h deleted file mode 100644 index 4ec34a51b62..00000000000 --- a/arch/um/include/asm/desc.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef __UM_DESC_H -#define __UM_DESC_H - -/* Taken from asm-i386/desc.h, it's the only thing we need. The rest wouldn't - * compile, and has never been used. */ -#define LDT_empty(info) (\ -	(info)->base_addr	== 0	&& \ -	(info)->limit		== 0	&& \ -	(info)->contents	== 0	&& \ -	(info)->read_exec_only	== 1	&& \ -	(info)->seg_32bit	== 0	&& \ -	(info)->limit_in_pages	== 0	&& \ -	(info)->seg_not_present	== 1	&& \ -	(info)->useable		== 0	) - -#endif diff --git a/arch/um/include/asm/device.h b/arch/um/include/asm/device.h deleted file mode 100644 index d8f9872b0e2..00000000000 --- a/arch/um/include/asm/device.h +++ /dev/null @@ -1,7 +0,0 @@ -/* - * Arch specific extensions to struct device - * - * This file is released under the GPLv2 - */ -#include <asm-generic/device.h> - diff --git a/arch/um/include/asm/dma.h b/arch/um/include/asm/dma.h index 9f6139a8a52..f88c5860520 100644 --- a/arch/um/include/asm/dma.h +++ b/arch/um/include/asm/dma.h @@ -1,7 +1,7 @@  #ifndef __UM_DMA_H  #define __UM_DMA_H -#include "asm/io.h" +#include <asm/io.h>  extern unsigned long uml_physmem; diff --git a/arch/um/include/asm/emergency-restart.h b/arch/um/include/asm/emergency-restart.h deleted file mode 100644 index 108d8c48e42..00000000000 --- a/arch/um/include/asm/emergency-restart.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef _ASM_EMERGENCY_RESTART_H -#define _ASM_EMERGENCY_RESTART_H - -#include <asm-generic/emergency-restart.h> - -#endif /* _ASM_EMERGENCY_RESTART_H */ diff --git a/arch/um/include/asm/fixmap.h b/arch/um/include/asm/fixmap.h index 69c0252345f..3094ea3c73b 100644 --- a/arch/um/include/asm/fixmap.h +++ b/arch/um/include/asm/fixmap.h @@ -2,7 +2,6 @@  #define __UM_FIXMAP_H  #include <asm/processor.h> -#include <asm/system.h>  #include <asm/kmap_types.h>  #include <asm/archparam.h>  #include <asm/page.h> @@ -44,13 +43,6 @@ enum fixed_addresses {  extern void __set_fixmap (enum fixed_addresses idx,  			  unsigned long phys, pgprot_t flags); -#define set_fixmap(idx, phys) \ -		__set_fixmap(idx, phys, PAGE_KERNEL) -/* - * Some hardware wants to get fixmapped without caching. - */ -#define set_fixmap_nocache(idx, phys) \ -		__set_fixmap(idx, phys, PAGE_KERNEL_NOCACHE)  /*   * used by vmalloc.c.   * @@ -63,37 +55,6 @@ extern void __set_fixmap (enum fixed_addresses idx,  #define FIXADDR_SIZE	(__end_of_fixed_addresses << PAGE_SHIFT)  #define FIXADDR_START	(FIXADDR_TOP - FIXADDR_SIZE) -#define __fix_to_virt(x)	(FIXADDR_TOP - ((x) << PAGE_SHIFT)) -#define __virt_to_fix(x)      ((FIXADDR_TOP - ((x)&PAGE_MASK)) >> PAGE_SHIFT) - -extern void __this_fixmap_does_not_exist(void); - -/* - * 'index to address' translation. If anyone tries to use the idx - * directly without tranlation, we catch the bug with a NULL-deference - * kernel oops. Illegal ranges of incoming indices are caught too. - */ -static inline unsigned long fix_to_virt(const unsigned int idx) -{ -	/* -	 * this branch gets completely eliminated after inlining, -	 * except when someone tries to use fixaddr indices in an -	 * illegal way. (such as mixing up address types or using -	 * out-of-range indices). -	 * -	 * If it doesn't get removed, the linker will complain -	 * loudly with a reasonably clear error message.. -	 */ -	if (idx >= __end_of_fixed_addresses) -		__this_fixmap_does_not_exist(); - -        return __fix_to_virt(idx); -} - -static inline unsigned long virt_to_fix(const unsigned long vaddr) -{ -      BUG_ON(vaddr >= FIXADDR_TOP || vaddr < FIXADDR_START); -      return __virt_to_fix(vaddr); -} +#include <asm-generic/fixmap.h>  #endif diff --git a/arch/um/include/asm/ftrace.h b/arch/um/include/asm/ftrace.h deleted file mode 100644 index 40a8c178f10..00000000000 --- a/arch/um/include/asm/ftrace.h +++ /dev/null @@ -1 +0,0 @@ -/* empty */ diff --git a/arch/um/include/asm/futex.h b/arch/um/include/asm/futex.h deleted file mode 100644 index 6a332a9f099..00000000000 --- a/arch/um/include/asm/futex.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef _ASM_FUTEX_H -#define _ASM_FUTEX_H - -#include <asm-generic/futex.h> - -#endif diff --git a/arch/um/include/asm/hardirq.h b/arch/um/include/asm/hardirq.h deleted file mode 100644 index fb3c05a0cbb..00000000000 --- a/arch/um/include/asm/hardirq.h +++ /dev/null @@ -1 +0,0 @@ -#include <asm-generic/hardirq.h> diff --git a/arch/um/include/asm/hw_irq.h b/arch/um/include/asm/hw_irq.h deleted file mode 100644 index 1cf84cf5f21..00000000000 --- a/arch/um/include/asm/hw_irq.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef _ASM_UM_HW_IRQ_H -#define _ASM_UM_HW_IRQ_H - -#include "asm/irq.h" -#include "asm/archparam.h" - -#endif diff --git a/arch/um/include/asm/io.h b/arch/um/include/asm/io.h deleted file mode 100644 index 44e8b8c772a..00000000000 --- a/arch/um/include/asm/io.h +++ /dev/null @@ -1,57 +0,0 @@ -#ifndef __UM_IO_H -#define __UM_IO_H - -#include "asm/page.h" - -#define IO_SPACE_LIMIT 0xdeadbeef /* Sure hope nothing uses this */ - -static inline int inb(unsigned long i) { return(0); } -static inline void outb(char c, unsigned long i) { } - -/* - * Change virtual addresses to physical addresses and vv. - * These are pretty trivial - */ -static inline unsigned long virt_to_phys(volatile void * address) -{ -	return __pa((void *) address); -} - -static inline void * phys_to_virt(unsigned long address) -{ -	return __va(address); -} - -/* - * Convert a physical pointer to a virtual kernel pointer for /dev/mem - * access - */ -#define xlate_dev_mem_ptr(p)	__va(p) - -/* - * Convert a virtual cached pointer to an uncached pointer - */ -#define xlate_dev_kmem_ptr(p)	p - -static inline void writeb(unsigned char b, volatile void __iomem *addr) -{ -	*(volatile unsigned char __force *) addr = b; -} -static inline void writew(unsigned short b, volatile void __iomem *addr) -{ -	*(volatile unsigned short __force *) addr = b; -} -static inline void writel(unsigned int b, volatile void __iomem *addr) -{ -	*(volatile unsigned int __force *) addr = b; -} -static inline void writeq(unsigned int b, volatile void __iomem *addr) -{ -	*(volatile unsigned long long __force *) addr = b; -} -#define __raw_writeb writeb -#define __raw_writew writew -#define __raw_writel writel -#define __raw_writeq writeq - -#endif diff --git a/arch/um/include/asm/irq_regs.h b/arch/um/include/asm/irq_regs.h deleted file mode 100644 index 3dd9c0b7027..00000000000 --- a/arch/um/include/asm/irq_regs.h +++ /dev/null @@ -1 +0,0 @@ -#include <asm-generic/irq_regs.h> diff --git a/arch/um/include/asm/irq_vectors.h b/arch/um/include/asm/irq_vectors.h deleted file mode 100644 index 272a81e0ce1..00000000000 --- a/arch/um/include/asm/irq_vectors.h +++ /dev/null @@ -1,10 +0,0 @@ -/*  - * Copyright (C) 2002 Jeff Dike (jdike@karaya.com) - * Licensed under the GPL - */ - -#ifndef __UM_IRQ_VECTORS_H -#define __UM_IRQ_VECTORS_H - -#endif - diff --git a/arch/um/include/asm/irqflags.h b/arch/um/include/asm/irqflags.h index 659b9abdfdb..c780d8a1677 100644 --- a/arch/um/include/asm/irqflags.h +++ b/arch/um/include/asm/irqflags.h @@ -1,6 +1,42 @@  #ifndef __UM_IRQFLAGS_H  #define __UM_IRQFLAGS_H -/* Empty for now */ +extern int get_signals(void); +extern int set_signals(int enable); +extern void block_signals(void); +extern void unblock_signals(void); + +static inline unsigned long arch_local_save_flags(void) +{ +	return get_signals(); +} + +static inline void arch_local_irq_restore(unsigned long flags) +{ +	set_signals(flags); +} + +static inline void arch_local_irq_enable(void) +{ +	unblock_signals(); +} + +static inline void arch_local_irq_disable(void) +{ +	block_signals(); +} + +static inline unsigned long arch_local_irq_save(void) +{ +	unsigned long flags; +	flags = arch_local_save_flags(); +	arch_local_irq_disable(); +	return flags; +} + +static inline bool arch_irqs_disabled(void) +{ +	return arch_local_save_flags() == 0; +}  #endif diff --git a/arch/um/include/asm/kdebug.h b/arch/um/include/asm/kdebug.h deleted file mode 100644 index 6ece1b03766..00000000000 --- a/arch/um/include/asm/kdebug.h +++ /dev/null @@ -1 +0,0 @@ -#include <asm-generic/kdebug.h> diff --git a/arch/um/include/asm/kmap_types.h b/arch/um/include/asm/kmap_types.h index 6c03acdb440..2e0a6b1d830 100644 --- a/arch/um/include/asm/kmap_types.h +++ b/arch/um/include/asm/kmap_types.h @@ -8,22 +8,6 @@  /* No more #include "asm/arch/kmap_types.h" ! */ -enum km_type { -	KM_BOUNCE_READ, -	KM_SKB_SUNRPC_DATA, -	KM_SKB_DATA_SOFTIRQ, -	KM_USER0, -	KM_USER1, -	KM_UML_USERCOPY,	/* UML specific, for copy_*_user - used in do_op_one_page */ -	KM_BIO_SRC_IRQ, -	KM_BIO_DST_IRQ, -	KM_PTE0, -	KM_PTE1, -	KM_IRQ0, -	KM_IRQ1, -	KM_SOFTIRQ0, -	KM_SOFTIRQ1, -	KM_TYPE_NR -}; +#define KM_TYPE_NR 14  #endif diff --git a/arch/um/include/asm/kvm_para.h b/arch/um/include/asm/kvm_para.h new file mode 100644 index 00000000000..14fab8f0b95 --- /dev/null +++ b/arch/um/include/asm/kvm_para.h @@ -0,0 +1 @@ +#include <asm-generic/kvm_para.h> diff --git a/arch/um/include/asm/mmu.h b/arch/um/include/asm/mmu.h index cf259de5153..da705448590 100644 --- a/arch/um/include/asm/mmu.h +++ b/arch/um/include/asm/mmu.h @@ -1,12 +1,24 @@  /*  - * Copyright (C) 2002 Jeff Dike (jdike@karaya.com) + * Copyright (C) 2002 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)   * Licensed under the GPL   */ -#ifndef __MMU_H -#define __MMU_H +#ifndef __ARCH_UM_MMU_H +#define __ARCH_UM_MMU_H -#include "um_mmu.h" +#include <mm_id.h> +#include <asm/mm_context.h> -#endif +typedef struct mm_context { +	struct mm_id id; +	struct uml_arch_mm_context arch; +	struct page *stub_pages[2]; +} mm_context_t; + +extern void __switch_mm(struct mm_id * mm_idp); +/* Avoid tangled inclusion with asm/ldt.h */ +extern long init_new_ldt(struct mm_context *to_mm, struct mm_context *from_mm); +extern void free_ldt(struct mm_context *mm); + +#endif diff --git a/arch/um/include/asm/mmu_context.h b/arch/um/include/asm/mmu_context.h index 34d813011b7..aa4a743dc4a 100644 --- a/arch/um/include/asm/mmu_context.h +++ b/arch/um/include/asm/mmu_context.h @@ -6,15 +6,12 @@  #ifndef __UM_MMU_CONTEXT_H  #define __UM_MMU_CONTEXT_H -#include "linux/sched.h" -#include "um_mmu.h" +#include <linux/sched.h> +#include <asm/mmu.h> -extern void arch_dup_mmap(struct mm_struct *oldmm, struct mm_struct *mm); +extern void uml_setup_stubs(struct mm_struct *mm);  extern void arch_exit_mmap(struct mm_struct *mm); -#define get_mmu_context(task) do ; while(0) -#define activate_context(tsk) do ; while(0) -  #define deactivate_mm(tsk,mm)	do { } while (0)  extern void force_flush_all(void); @@ -26,7 +23,9 @@ static inline void activate_mm(struct mm_struct *old, struct mm_struct *new)  	 * when the new ->mm is used for the first time.  	 */  	__switch_mm(&new->context.id); -	arch_dup_mmap(old, new); +	down_write(&new->mmap_sem); +	uml_setup_stubs(new); +	up_write(&new->mmap_sem);  }  static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,  @@ -42,6 +41,11 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,  	}  } +static inline void arch_dup_mmap(struct mm_struct *oldmm, struct mm_struct *mm) +{ +	uml_setup_stubs(mm); +} +  static inline void enter_lazy_tlb(struct mm_struct *mm,   				  struct task_struct *tsk)  { diff --git a/arch/um/include/asm/mutex.h b/arch/um/include/asm/mutex.h deleted file mode 100644 index 458c1f7fbc1..00000000000 --- a/arch/um/include/asm/mutex.h +++ /dev/null @@ -1,9 +0,0 @@ -/* - * Pull in the generic implementation for the mutex fastpath. - * - * TODO: implement optimized primitives instead, or leave the generic - * implementation in place, or pick the atomic_xchg() based generic - * implementation. (see asm-generic/mutex-xchg.h for details) - */ - -#include <asm-generic/mutex-dec.h> diff --git a/arch/um/include/asm/page.h b/arch/um/include/asm/page.h index 4cc9b6cf480..5ff53d9185f 100644 --- a/arch/um/include/asm/page.h +++ b/arch/um/include/asm/page.h @@ -19,7 +19,7 @@  struct page;  #include <linux/types.h> -#include <sysdep/vm-flags.h> +#include <asm/vm-flags.h>  /*   * These are used to make use of C type-checking.. @@ -99,7 +99,7 @@ extern unsigned long uml_physmem;  #define __va_space (8*1024*1024) -#include "mem.h" +#include <mem.h>  /* Cast to unsigned long before casting to void * to avoid a warning from   * mmap_kmem about cutting a long long down to a void *.  Not sure that diff --git a/arch/um/include/asm/page_offset.h b/arch/um/include/asm/page_offset.h deleted file mode 100644 index 1c168dfbf35..00000000000 --- a/arch/um/include/asm/page_offset.h +++ /dev/null @@ -1 +0,0 @@ -#define PAGE_OFFSET_RAW (uml_physmem) diff --git a/arch/um/include/asm/param.h b/arch/um/include/asm/param.h deleted file mode 100644 index e44f4e60d16..00000000000 --- a/arch/um/include/asm/param.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef _UM_PARAM_H -#define _UM_PARAM_H - -#define EXEC_PAGESIZE   4096 - -#ifndef NOGROUP -#define NOGROUP         (-1) -#endif - -#define MAXHOSTNAMELEN  64      /* max length of hostname */ - -#ifdef __KERNEL__ -#define HZ CONFIG_HZ -#define USER_HZ	100	   /* .. some user interfaces are in "ticks" */ -#define CLOCKS_PER_SEC (USER_HZ)  /* frequency at which times() counts */ -#else -#define HZ 100 -#endif - -#endif diff --git a/arch/um/include/asm/pci.h b/arch/um/include/asm/pci.h deleted file mode 100644 index b44cf59ede1..00000000000 --- a/arch/um/include/asm/pci.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef __UM_PCI_H -#define __UM_PCI_H - -#define PCI_DMA_BUS_IS_PHYS     (1) - -#endif diff --git a/arch/um/include/asm/pda.h b/arch/um/include/asm/pda.h deleted file mode 100644 index ddcd774fc2a..00000000000 --- a/arch/um/include/asm/pda.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright 2003 PathScale, Inc. - * - * Licensed under the GPL - */ - -#ifndef __UM_PDA_X86_64_H -#define __UM_PDA_X86_64_H - -/* XXX */ -struct foo { -	unsigned int __softirq_pending; -	unsigned int __nmi_count; -}; - -extern struct foo me; - -#define read_pda(me) (&me) - -#endif - diff --git a/arch/um/include/asm/pgalloc.h b/arch/um/include/asm/pgalloc.h index 32c8ce4e151..bf90b2aa200 100644 --- a/arch/um/include/asm/pgalloc.h +++ b/arch/um/include/asm/pgalloc.h @@ -8,8 +8,7 @@  #ifndef __UM_PGALLOC_H  #define __UM_PGALLOC_H -#include "linux/mm.h" -#include "asm/fixmap.h" +#include <linux/mm.h>  #define pmd_populate_kernel(mm, pmd, pte) \  	set_pmd(pmd, __pmd(_PAGE_TABLE + (unsigned long) __pa(pte))) diff --git a/arch/um/include/asm/pgtable.h b/arch/um/include/asm/pgtable.h index 41474fb5eee..bf974f712af 100644 --- a/arch/um/include/asm/pgtable.h +++ b/arch/um/include/asm/pgtable.h @@ -23,9 +23,9 @@  				   pte_present gives true */  #ifdef CONFIG_3_LEVEL_PGTABLES -#include "asm/pgtable-3level.h" +#include <asm/pgtable-3level.h>  #else -#include "asm/pgtable-2level.h" +#include <asm/pgtable-2level.h>  #endif  extern pgd_t swapper_pg_dir[PTRS_PER_PGD]; @@ -271,6 +271,12 @@ static inline void set_pte(pte_t *pteptr, pte_t pteval)  }  #define set_pte_at(mm,addr,ptep,pteval) set_pte(ptep,pteval) +#define __HAVE_ARCH_PTE_SAME +static inline int pte_same(pte_t pte_a, pte_t pte_b) +{ +	return !((pte_val(pte_a) ^ pte_val(pte_b)) & ~_PAGE_NEWPAGE); +} +  /*   * Conversion functions: convert a page and protection to a page entry,   * and a page entry and page directory to the page they refer to. @@ -346,11 +352,11 @@ extern pte_t *virt_to_pte(struct mm_struct *mm, unsigned long addr);  #define update_mmu_cache(vma,address,ptep) do ; while (0)  /* Encode and de-code a swap entry */ -#define __swp_type(x)			(((x).val >> 4) & 0x3f) +#define __swp_type(x)			(((x).val >> 5) & 0x1f)  #define __swp_offset(x)			((x).val >> 11)  #define __swp_entry(type, offset) \ -	((swp_entry_t) { ((type) << 4) | ((offset) << 11) }) +	((swp_entry_t) { ((type) << 5) | ((offset) << 11) })  #define __pte_to_swp_entry(pte) \  	((swp_entry_t) { pte_val(pte_mkuptodate(pte)) })  #define __swp_entry_to_pte(x)		((pte_t) { (x).val }) diff --git a/arch/um/include/asm/processor-generic.h b/arch/um/include/asm/processor-generic.h index bed668824b5..cbc5edd5a90 100644 --- a/arch/um/include/asm/processor-generic.h +++ b/arch/um/include/asm/processor-generic.h @@ -10,32 +10,23 @@ struct pt_regs;  struct task_struct; -#include "asm/ptrace.h" -#include "registers.h" -#include "sysdep/archsetjmp.h" +#include <asm/ptrace.h> +#include <registers.h> +#include <sysdep/archsetjmp.h> + +#include <linux/prefetch.h>  struct mm_struct;  struct thread_struct { -	struct task_struct *saved_task; -	/* -	 * This flag is set to 1 before calling do_fork (and analyzed in -	 * copy_thread) to mark that we are begin called from userspace (fork / -	 * vfork / clone), and reset to 0 after. It is left to 0 when called -	 * from kernelspace (i.e. kernel_thread() or fork_idle(), -	 * as of 2.6.11). -	 */ -	int forking;  	struct pt_regs regs; +	struct pt_regs *segv_regs;  	int singlestep_syscall;  	void *fault_addr;  	jmp_buf *fault_catcher;  	struct task_struct *prev_sched; -	unsigned long temp_stack; -	jmp_buf *exec_buf;  	struct arch_thread arch;  	jmp_buf switch_buf; -	int mm_count;  	struct {  		int op;  		union { @@ -56,29 +47,17 @@ struct thread_struct {  #define INIT_THREAD \  { \ -	.forking		= 0, \  	.regs		   	= EMPTY_REGS,	\  	.fault_addr		= NULL, \  	.prev_sched		= NULL, \ -	.temp_stack		= 0, \ -	.exec_buf		= NULL, \  	.arch			= INIT_ARCH_THREAD, \  	.request		= { 0 } \  } -extern struct task_struct *alloc_task_struct(void); -  static inline void release_thread(struct task_struct *task)  {  } -extern int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags); - -static inline void prepare_to_copy(struct task_struct *tsk) -{ -} - -  extern unsigned long thread_saved_pc(struct task_struct *t);  static inline void mm_copy_segments(struct mm_struct *from_mm, diff --git a/arch/um/include/asm/ptrace-generic.h b/arch/um/include/asm/ptrace-generic.h index b7c5bab9bd7..cb9b3c47ca8 100644 --- a/arch/um/include/asm/ptrace-generic.h +++ b/arch/um/include/asm/ptrace-generic.h @@ -9,8 +9,7 @@  #ifndef __ASSEMBLY__  #include <asm/ptrace-abi.h> -#include <asm/user.h> -#include "sysdep/ptrace.h" +#include <sysdep/ptrace.h>  struct pt_regs {  	struct uml_pt_regs regs; @@ -23,17 +22,10 @@ struct pt_regs {  #define PT_REGS_IP(r) UPT_IP(&(r)->regs)  #define PT_REGS_SP(r) UPT_SP(&(r)->regs) -#define PT_REG(r, reg) UPT_REG(&(r)->regs, reg) -#define PT_REGS_SET(r, reg, val) UPT_SET(&(r)->regs, reg, val) - -#define PT_REGS_SET_SYSCALL_RETURN(r, res) \ -	UPT_SET_SYSCALL_RETURN(&(r)->regs, res)  #define PT_REGS_RESTART_SYSCALL(r) UPT_RESTART_SYSCALL(&(r)->regs)  #define PT_REGS_SYSCALL_NR(r) UPT_SYSCALL_NR(&(r)->regs) -#define PT_REGS_SC(r) UPT_SC(&(r)->regs) -  #define instruction_pointer(regs) PT_REGS_IP(regs)  struct task_struct; @@ -42,15 +34,11 @@ extern long subarch_ptrace(struct task_struct *child, long request,  	unsigned long addr, unsigned long data);  extern unsigned long getreg(struct task_struct *child, int regno);  extern int putreg(struct task_struct *child, int regno, unsigned long value); -extern int get_fpregs(struct user_i387_struct __user *buf, -		      struct task_struct *child); -extern int set_fpregs(struct user_i387_struct __user *buf, -		      struct task_struct *child); - -extern void show_regs(struct pt_regs *regs);  extern int arch_copy_tls(struct task_struct *new);  extern void clear_flushed_tls(struct task_struct *task); +extern void syscall_trace_enter(struct pt_regs *regs); +extern void syscall_trace_leave(struct pt_regs *regs);  #endif diff --git a/arch/um/include/asm/required-features.h b/arch/um/include/asm/required-features.h deleted file mode 100644 index dfb967b2d2f..00000000000 --- a/arch/um/include/asm/required-features.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef __UM_REQUIRED_FEATURES_H -#define __UM_REQUIRED_FEATURES_H - -/* - * Nothing to see, just need something for the i386 and x86_64 asm - * headers to include. - */ - -#endif diff --git a/arch/um/include/asm/sections.h b/arch/um/include/asm/sections.h deleted file mode 100644 index 6b0231eefea..00000000000 --- a/arch/um/include/asm/sections.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef _UM_SECTIONS_H -#define _UM_SECTIONS_H - -/* nothing to see, move along */ -#include <asm-generic/sections.h> - -#endif diff --git a/arch/um/include/asm/segment.h b/arch/um/include/asm/segment.h deleted file mode 100644 index 45183fcd10b..00000000000 --- a/arch/um/include/asm/segment.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef __UM_SEGMENT_H -#define __UM_SEGMENT_H - -extern int host_gdt_entry_tls_min; - -#define GDT_ENTRY_TLS_ENTRIES 3 -#define GDT_ENTRY_TLS_MIN host_gdt_entry_tls_min -#define GDT_ENTRY_TLS_MAX (GDT_ENTRY_TLS_MIN + GDT_ENTRY_TLS_ENTRIES - 1) - -#endif diff --git a/arch/um/include/asm/smp.h b/arch/um/include/asm/smp.h index f27a9631317..e4507938d8c 100644 --- a/arch/um/include/asm/smp.h +++ b/arch/um/include/asm/smp.h @@ -3,15 +3,14 @@  #ifdef CONFIG_SMP -#include "linux/bitops.h" -#include "asm/current.h" -#include "linux/cpumask.h" +#include <linux/bitops.h> +#include <asm/current.h> +#include <linux/cpumask.h>  #define raw_smp_processor_id() (current_thread->cpu)  #define cpu_logical_map(n) (n)  #define cpu_number_map(n) (n) -#define PROC_CHANGE_PENALTY	15 /* Pick a number, any number */  extern int hard_smp_processor_id(void);  #define NO_PROC_ID -1 diff --git a/arch/um/include/shared/sysrq.h b/arch/um/include/asm/sysrq.h index c8d332b56b9..c8d332b56b9 100644 --- a/arch/um/include/shared/sysrq.h +++ b/arch/um/include/asm/sysrq.h diff --git a/arch/um/include/asm/system.h b/arch/um/include/asm/system.h deleted file mode 100644 index 68a90ecd145..00000000000 --- a/arch/um/include/asm/system.h +++ /dev/null @@ -1,47 +0,0 @@ -#ifndef __UM_SYSTEM_GENERIC_H -#define __UM_SYSTEM_GENERIC_H - -#include "sysdep/system.h" - -extern int get_signals(void); -extern int set_signals(int enable); -extern void block_signals(void); -extern void unblock_signals(void); - -static inline unsigned long arch_local_save_flags(void) -{ -	return get_signals(); -} - -static inline void arch_local_irq_restore(unsigned long flags) -{ -	set_signals(flags); -} - -static inline void arch_local_irq_enable(void) -{ -	unblock_signals(); -} - -static inline void arch_local_irq_disable(void) -{ -	block_signals(); -} - -static inline unsigned long arch_local_irq_save(void) -{ -	unsigned long flags; -	flags = arch_local_save_flags(); -	arch_local_irq_disable(); -	return flags; -} - -static inline bool arch_irqs_disabled(void) -{ -	return arch_local_save_flags() == 0; -} - -extern void *_switch_to(void *prev, void *next, void *last); -#define switch_to(prev, next, last) prev = _switch_to(prev, next, last) - -#endif diff --git a/arch/um/include/asm/thread_info.h b/arch/um/include/asm/thread_info.h index e2cf786bda0..1c5b2a83046 100644 --- a/arch/um/include/asm/thread_info.h +++ b/arch/um/include/asm/thread_info.h @@ -49,7 +49,10 @@ static inline struct thread_info *current_thread_info(void)  {  	struct thread_info *ti;  	unsigned long mask = THREAD_SIZE - 1; -	ti = (struct thread_info *) (((unsigned long) &ti) & ~mask); +	void *p; + +	asm volatile ("" : "=r" (p) : "0" (&ti)); +	ti = (struct thread_info *) (((unsigned long)p) & ~mask);  	return ti;  } @@ -57,26 +60,19 @@ static inline struct thread_info *current_thread_info(void)  #endif -#define PREEMPT_ACTIVE		0x10000000 -  #define TIF_SYSCALL_TRACE	0	/* syscall trace active */  #define TIF_SIGPENDING		1	/* signal pending */  #define TIF_NEED_RESCHED	2	/* rescheduling necessary */ -#define TIF_POLLING_NRFLAG      3       /* true if poll_idle() is polling -					 * TIF_NEED_RESCHED */  #define TIF_RESTART_BLOCK	4  #define TIF_MEMDIE		5	/* is terminating due to OOM killer */  #define TIF_SYSCALL_AUDIT	6  #define TIF_RESTORE_SIGMASK	7 -#define TIF_FREEZE		16	/* is freezing for suspend */ +#define TIF_NOTIFY_RESUME	8  #define _TIF_SYSCALL_TRACE	(1 << TIF_SYSCALL_TRACE)  #define _TIF_SIGPENDING		(1 << TIF_SIGPENDING)  #define _TIF_NEED_RESCHED	(1 << TIF_NEED_RESCHED) -#define _TIF_POLLING_NRFLAG     (1 << TIF_POLLING_NRFLAG)  #define _TIF_MEMDIE		(1 << TIF_MEMDIE)  #define _TIF_SYSCALL_AUDIT	(1 << TIF_SYSCALL_AUDIT) -#define _TIF_RESTORE_SIGMASK	(1 << TIF_RESTORE_SIGMASK) -#define _TIF_FREEZE		(1 << TIF_FREEZE)  #endif diff --git a/arch/um/include/asm/tlb.h b/arch/um/include/asm/tlb.h index 660caedac9e..16eb63fac57 100644 --- a/arch/um/include/asm/tlb.h +++ b/arch/um/include/asm/tlb.h @@ -22,9 +22,6 @@ struct mmu_gather {  	unsigned int		fullmm; /* non-zero means full mm flush */  }; -/* Users of the generic TLB shootdown code must declare this storage space. */ -DECLARE_PER_CPU(struct mmu_gather, mmu_gathers); -  static inline void __tlb_remove_tlb_entry(struct mmu_gather *tlb, pte_t *ptep,  					  unsigned long address)  { @@ -47,33 +44,40 @@ static inline void init_tlb_gather(struct mmu_gather *tlb)  	}  } -/* tlb_gather_mmu - *	Return a pointer to an initialized struct mmu_gather. - */ -static inline struct mmu_gather * -tlb_gather_mmu(struct mm_struct *mm, unsigned int full_mm_flush) +static inline void +tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm, unsigned long start, unsigned long end)  { -	struct mmu_gather *tlb = &get_cpu_var(mmu_gathers); -  	tlb->mm = mm; -	tlb->fullmm = full_mm_flush; +	tlb->start = start; +	tlb->end = end; +	tlb->fullmm = !(start | (end+1));  	init_tlb_gather(tlb); - -	return tlb;  }  extern void flush_tlb_mm_range(struct mm_struct *mm, unsigned long start,  			       unsigned long end);  static inline void -tlb_flush_mmu(struct mmu_gather *tlb, unsigned long start, unsigned long end) +tlb_flush_mmu_tlbonly(struct mmu_gather *tlb) +{ +	flush_tlb_mm_range(tlb->mm, tlb->start, tlb->end); +} + +static inline void +tlb_flush_mmu_free(struct mmu_gather *tlb) +{ +	init_tlb_gather(tlb); +} + +static inline void +tlb_flush_mmu(struct mmu_gather *tlb)  {  	if (!tlb->need_flush)  		return; -	flush_tlb_mm_range(tlb->mm, tlb->start, tlb->end); -	init_tlb_gather(tlb); +	tlb_flush_mmu_tlbonly(tlb); +	tlb_flush_mmu_free(tlb);  }  /* tlb_finish_mmu @@ -83,12 +87,10 @@ tlb_flush_mmu(struct mmu_gather *tlb, unsigned long start, unsigned long end)  static inline void  tlb_finish_mmu(struct mmu_gather *tlb, unsigned long start, unsigned long end)  { -	tlb_flush_mmu(tlb, start, end); +	tlb_flush_mmu(tlb);  	/* keep the page table cache within bounds */  	check_pgt_cache(); - -	put_cpu_var(mmu_gathers);  }  /* tlb_remove_page @@ -96,11 +98,16 @@ tlb_finish_mmu(struct mmu_gather *tlb, unsigned long start, unsigned long end)   *	while handling the additional races in SMP caused by other CPUs   *	caching valid mappings in their TLBs.   */ -static inline void tlb_remove_page(struct mmu_gather *tlb, struct page *page) +static inline int __tlb_remove_page(struct mmu_gather *tlb, struct page *page)  {  	tlb->need_flush = 1;  	free_page_and_swap_cache(page); -	return; +	return 1; /* avoid calling tlb_flush_mmu */ +} + +static inline void tlb_remove_page(struct mmu_gather *tlb, struct page *page) +{ +	__tlb_remove_page(tlb, page);  }  /** diff --git a/arch/um/include/asm/topology.h b/arch/um/include/asm/topology.h deleted file mode 100644 index 0905e4f21d4..00000000000 --- a/arch/um/include/asm/topology.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef _ASM_UM_TOPOLOGY_H -#define _ASM_UM_TOPOLOGY_H - -#include <asm-generic/topology.h> - -#endif diff --git a/arch/um/include/asm/uaccess.h b/arch/um/include/asm/uaccess.h index b9a895d6fa1..3f22fbf7ca1 100644 --- a/arch/um/include/asm/uaccess.h +++ b/arch/um/include/asm/uaccess.h @@ -6,15 +6,15 @@  #ifndef __UM_UACCESS_H  #define __UM_UACCESS_H -#include <asm/errno.h> -#include <asm/processor.h> -  /* thread_info has a mm_segment_t in it, so put the definition up here */  typedef struct {  	unsigned long seg;  } mm_segment_t; -#include "linux/thread_info.h" +#include <linux/thread_info.h> +#include <linux/errno.h> +#include <asm/processor.h> +#include <asm/elf.h>  #define VERIFY_READ 0  #define VERIFY_WRITE 1 @@ -38,7 +38,86 @@ typedef struct {  #define segment_eq(a, b) ((a).seg == (b).seg) -#include "um_uaccess.h" +#define __under_task_size(addr, size) \ +	(((unsigned long) (addr) < TASK_SIZE) && \ +	 (((unsigned long) (addr) + (size)) < TASK_SIZE)) + +#define __access_ok_vsyscall(type, addr, size) \ +	 ((type == VERIFY_READ) && \ +	  ((unsigned long) (addr) >= FIXADDR_USER_START) && \ +	  ((unsigned long) (addr) + (size) <= FIXADDR_USER_END) && \ +	  ((unsigned long) (addr) + (size) >= (unsigned long)(addr))) + +#define __addr_range_nowrap(addr, size) \ +	((unsigned long) (addr) <= ((unsigned long) (addr) + (size))) + +#define access_ok(type, addr, size) \ +	(__addr_range_nowrap(addr, size) && \ +	 (__under_task_size(addr, size) || \ +	  __access_ok_vsyscall(type, addr, size) || \ +	  segment_eq(get_fs(), KERNEL_DS))) + +extern int copy_from_user(void *to, const void __user *from, int n); +extern int copy_to_user(void __user *to, const void *from, int n); + +/* + * strncpy_from_user: - Copy a NUL terminated string from userspace. + * @dst:   Destination address, in kernel space.  This buffer must be at + *         least @count bytes long. + * @src:   Source address, in user space. + * @count: Maximum number of bytes to copy, including the trailing NUL. + * + * Copies a NUL-terminated string from userspace to kernel space. + * + * On success, returns the length of the string (not including the trailing + * NUL). + * + * If access to userspace fails, returns -EFAULT (some data may have been + * copied). + * + * If @count is smaller than the length of the string, copies @count bytes + * and returns @count. + */ + +extern int strncpy_from_user(char *dst, const char __user *src, int count); + +/* + * __clear_user: - Zero a block of memory in user space, with less checking. + * @to:   Destination address, in user space. + * @n:    Number of bytes to zero. + * + * Zero a block of memory in user space.  Caller must check + * the specified block with access_ok() before calling this function. + * + * Returns number of bytes that could not be cleared. + * On success, this will be zero. + */ +extern int __clear_user(void __user *mem, int len); + +/* + * clear_user: - Zero a block of memory in user space. + * @to:   Destination address, in user space. + * @n:    Number of bytes to zero. + * + * Zero a block of memory in user space. + * + * Returns number of bytes that could not be cleared. + * On success, this will be zero. + */ +extern int clear_user(void __user *mem, int len); + +/* + * strlen_user: - Get the size of a string in user space. + * @str: The string to measure. + * @n:   The maximum valid length + * + * Get the size of a NUL-terminated string in user space. + * + * Returns the size of the string INCLUDING the terminating NUL. + * On exception, returns 0. + * If the string is too long, returns a value greater than @n. + */ +extern int strnlen_user(const void __user *str, int len);  #define __copy_from_user(to, from, n) copy_from_user(to, from, n) diff --git a/arch/um/include/asm/xor.h b/arch/um/include/asm/xor.h deleted file mode 100644 index a19db3e1724..00000000000 --- a/arch/um/include/asm/xor.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef __UM_XOR_H -#define __UM_XOR_H - -#include "asm-generic/xor.h" - -#endif diff --git a/arch/um/include/shared/arch.h b/arch/um/include/shared/arch.h index 2de92a08a76..4f46abda060 100644 --- a/arch/um/include/shared/arch.h +++ b/arch/um/include/shared/arch.h @@ -6,7 +6,7 @@  #ifndef __ARCH_H__  #define __ARCH_H__ -#include "sysdep/ptrace.h" +#include <sysdep/ptrace.h>  extern void arch_check_bugs(void);  extern int arch_fixup(unsigned long address, struct uml_pt_regs *regs); diff --git a/arch/um/include/shared/as-layout.h b/arch/um/include/shared/as-layout.h index a92b678503c..41c8c774ec1 100644 --- a/arch/um/include/shared/as-layout.h +++ b/arch/um/include/shared/as-layout.h @@ -6,7 +6,7 @@  #ifndef __START_H__  #define __START_H__ -#include "kern_constants.h" +#include <generated/asm-offsets.h>  /*   * Stolen from linux/const.h, which can't be directly included since @@ -35,7 +35,7 @@  #ifndef __ASSEMBLY__ -#include "sysdep/ptrace.h" +#include <sysdep/ptrace.h>  struct cpu_task {  	int pid; @@ -44,7 +44,6 @@ struct cpu_task {  extern struct cpu_task cpu_tasks[]; -extern unsigned long low_physmem;  extern unsigned long high_physmem;  extern unsigned long uml_physmem;  extern unsigned long uml_reserved; @@ -52,15 +51,14 @@ extern unsigned long end_vm;  extern unsigned long start_vm;  extern unsigned long long highmem; -extern unsigned long _stext, _etext, _sdata, _edata, __bss_start, _end; -extern unsigned long _unprotected_end;  extern unsigned long brk_start;  extern unsigned long host_task_size;  extern int linux_main(int argc, char **argv); -extern void (*sig_info[])(int, struct uml_pt_regs *); +struct siginfo; +extern void (*sig_info[])(int, struct siginfo *si, struct uml_pt_regs *);  #endif diff --git a/arch/um/include/shared/chan_kern.h b/arch/um/include/shared/chan_kern.h deleted file mode 100644 index 1e651457e04..00000000000 --- a/arch/um/include/shared/chan_kern.h +++ /dev/null @@ -1,50 +0,0 @@ -/*  - * Copyright (C) 2000, 2001 Jeff Dike (jdike@karaya.com) - * Licensed under the GPL - */ - -#ifndef __CHAN_KERN_H__ -#define __CHAN_KERN_H__ - -#include "linux/tty.h" -#include "linux/list.h" -#include "linux/console.h" -#include "chan_user.h" -#include "line.h" - -struct chan { -	struct list_head list; -	struct list_head free_list; -	struct line *line; -	char *dev; -	unsigned int primary:1; -	unsigned int input:1; -	unsigned int output:1; -	unsigned int opened:1; -	unsigned int enabled:1; -	int fd; -	const struct chan_ops *ops; -	void *data; -}; - -extern void chan_interrupt(struct list_head *chans, struct delayed_work *task, -			   struct tty_struct *tty, int irq); -extern int parse_chan_pair(char *str, struct line *line, int device, -			   const struct chan_opts *opts, char **error_out); -extern int write_chan(struct list_head *chans, const char *buf, int len, -			     int write_irq); -extern int console_write_chan(struct list_head *chans, const char *buf,  -			      int len); -extern int console_open_chan(struct line *line, struct console *co); -extern void deactivate_chan(struct list_head *chans, int irq); -extern void reactivate_chan(struct list_head *chans, int irq); -extern void chan_enable_winch(struct list_head *chans, struct tty_struct *tty); -extern int enable_chan(struct line *line); -extern void close_chan(struct list_head *chans, int delay_free_irq); -extern int chan_window_size(struct list_head *chans,  -			     unsigned short *rows_out,  -			     unsigned short *cols_out); -extern int chan_config_string(struct list_head *chans, char *str, int size, -			      char **error_out); - -#endif diff --git a/arch/um/include/shared/chan_user.h b/arch/um/include/shared/chan_user.h deleted file mode 100644 index 9b9ced85b70..00000000000 --- a/arch/um/include/shared/chan_user.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (C) 2000, 2001 Jeff Dike (jdike@karaya.com) - * Licensed under the GPL - */ - -#ifndef __CHAN_USER_H__ -#define __CHAN_USER_H__ - -#include "init.h" - -struct chan_opts { -	void (*const announce)(char *dev_name, int dev); -	char *xterm_title; -	const int raw; -}; - -enum chan_init_pri { INIT_STATIC, INIT_ALL, INIT_ONE }; - -struct chan_ops { -	char *type; -	void *(*init)(char *, int, const struct chan_opts *); -	int (*open)(int, int, int, void *, char **); -	void (*close)(int, void *); -	int (*read)(int, char *, void *); -	int (*write)(int, const char *, int, void *); -	int (*console_write)(int, const char *, int); -	int (*window_size)(int, void *, unsigned short *, unsigned short *); -	void (*free)(void *); -	int winch; -}; - -extern const struct chan_ops fd_ops, null_ops, port_ops, pts_ops, pty_ops, -	tty_ops, xterm_ops; - -extern void generic_close(int fd, void *unused); -extern int generic_read(int fd, char *c_out, void *unused); -extern int generic_write(int fd, const char *buf, int n, void *unused); -extern int generic_console_write(int fd, const char *buf, int n); -extern int generic_window_size(int fd, void *unused, unsigned short *rows_out, -			       unsigned short *cols_out); -extern void generic_free(void *data); - -struct tty_struct; -extern void register_winch(int fd,  struct tty_struct *tty); -extern void register_winch_irq(int fd, int tty_fd, int pid, -			       struct tty_struct *tty, unsigned long stack); - -#define __channel_help(fn, prefix) \ -__uml_help(fn, prefix "[0-9]*=<channel description>\n" \ -"    Attach a console or serial line to a host channel.  See\n" \ -"    http://user-mode-linux.sourceforge.net/old/input.html for a complete\n" \ -"    description of this switch.\n\n" \ -); - -#endif diff --git a/arch/um/include/shared/common-offsets.h b/arch/um/include/shared/common-offsets.h index 72009c7e321..c9230680902 100644 --- a/arch/um/include/shared/common-offsets.h +++ b/arch/um/include/shared/common-offsets.h @@ -2,24 +2,11 @@  DEFINE(KERNEL_MADV_REMOVE, MADV_REMOVE); -OFFSET(HOST_TASK_REGS, task_struct, thread.regs); -OFFSET(HOST_TASK_PID, task_struct, pid); -  DEFINE(UM_KERN_PAGE_SIZE, PAGE_SIZE);  DEFINE(UM_KERN_PAGE_MASK, PAGE_MASK);  DEFINE(UM_KERN_PAGE_SHIFT, PAGE_SHIFT);  DEFINE(UM_NSEC_PER_SEC, NSEC_PER_SEC); -DEFINE_STR(UM_KERN_EMERG, KERN_EMERG); -DEFINE_STR(UM_KERN_ALERT, KERN_ALERT); -DEFINE_STR(UM_KERN_CRIT, KERN_CRIT); -DEFINE_STR(UM_KERN_ERR, KERN_ERR); -DEFINE_STR(UM_KERN_WARNING, KERN_WARNING); -DEFINE_STR(UM_KERN_NOTICE, KERN_NOTICE); -DEFINE_STR(UM_KERN_INFO, KERN_INFO); -DEFINE_STR(UM_KERN_DEBUG, KERN_DEBUG); -DEFINE_STR(UM_KERN_CONT, KERN_CONT); -  DEFINE(UM_ELF_CLASS, ELF_CLASS);  DEFINE(UM_ELFCLASS32, ELFCLASS32);  DEFINE(UM_ELFCLASS64, ELFCLASS64); @@ -43,8 +30,8 @@ DEFINE(UM_NSEC_PER_USEC, NSEC_PER_USEC);  #ifdef CONFIG_PRINTK  DEFINE(UML_CONFIG_PRINTK, CONFIG_PRINTK);  #endif -#ifdef CONFIG_NO_HZ -DEFINE(UML_CONFIG_NO_HZ, CONFIG_NO_HZ); +#ifdef CONFIG_NO_HZ_COMMON +DEFINE(UML_CONFIG_NO_HZ_COMMON, CONFIG_NO_HZ_COMMON);  #endif  #ifdef CONFIG_UML_X86  DEFINE(UML_CONFIG_UML_X86, CONFIG_UML_X86); diff --git a/arch/um/include/shared/frame_kern.h b/arch/um/include/shared/frame_kern.h index 76078490c25..f2ca5702a4e 100644 --- a/arch/um/include/shared/frame_kern.h +++ b/arch/um/include/shared/frame_kern.h @@ -6,16 +6,13 @@  #ifndef __FRAME_KERN_H_  #define __FRAME_KERN_H_ -#define _S(nr) (1<<((nr)-1)) -#define _BLOCKABLE (~(_S(SIGKILL) | _S(SIGSTOP))) - -extern int setup_signal_stack_sc(unsigned long stack_top, int sig,  +extern int setup_signal_stack_sc(unsigned long stack_top, int sig,  				 struct k_sigaction *ka, -				 struct pt_regs *regs,  +				 struct pt_regs *regs,  				 sigset_t *mask); -extern int setup_signal_stack_si(unsigned long stack_top, int sig,  +extern int setup_signal_stack_si(unsigned long stack_top, int sig,  				 struct k_sigaction *ka, -				 struct pt_regs *regs, siginfo_t *info,  +				 struct pt_regs *regs, struct siginfo *info,  				 sigset_t *mask);  #endif diff --git a/arch/um/include/shared/initrd.h b/arch/um/include/shared/initrd.h deleted file mode 100644 index 22673bcc273..00000000000 --- a/arch/um/include/shared/initrd.h +++ /dev/null @@ -1,12 +0,0 @@ -/* - * Copyright (C) 2000 Jeff Dike (jdike@karaya.com) - * Licensed under the GPL - */ - -#ifndef __INITRD_USER_H__ -#define __INITRD_USER_H__ - -extern int load_initrd(char *filename, void *buf, int size); - -#endif - diff --git a/arch/um/include/shared/irq_kern.h b/arch/um/include/shared/irq_kern.h index b05d22f3d84..e05bd667de1 100644 --- a/arch/um/include/shared/irq_kern.h +++ b/arch/um/include/shared/irq_kern.h @@ -6,13 +6,13 @@  #ifndef __IRQ_KERN_H__  #define __IRQ_KERN_H__ -#include "linux/interrupt.h" -#include "asm/ptrace.h" +#include <linux/interrupt.h> +#include <asm/ptrace.h>  extern int um_request_irq(unsigned int irq, int fd, int type,  			  irq_handler_t handler,  			  unsigned long irqflags,  const char * devname,  			  void *dev_id); - +void um_free_irq(unsigned int irq, void *dev);  #endif diff --git a/arch/um/include/shared/irq_user.h b/arch/um/include/shared/irq_user.h index c6c784df267..df563305395 100644 --- a/arch/um/include/shared/irq_user.h +++ b/arch/um/include/shared/irq_user.h @@ -6,7 +6,7 @@  #ifndef __IRQ_USER_H__  #define __IRQ_USER_H__ -#include "sysdep/ptrace.h" +#include <sysdep/ptrace.h>  struct irq_fd {  	struct irq_fd *next; @@ -20,7 +20,8 @@ struct irq_fd {  enum { IRQ_READ, IRQ_WRITE }; -extern void sigio_handler(int sig, struct uml_pt_regs *regs); +struct siginfo; +extern void sigio_handler(int sig, struct siginfo *unused_si, struct uml_pt_regs *regs);  extern void free_irq_by_fd(int fd);  extern void reactivate_fd(int fd, int irqnum);  extern void deactivate_fd(int fd, int irqnum); diff --git a/arch/um/include/shared/kern.h b/arch/um/include/shared/kern.h index 4ce3fc650e5..6cd01240bbf 100644 --- a/arch/um/include/shared/kern.h +++ b/arch/um/include/shared/kern.h @@ -13,28 +13,10 @@   * includes.   */ -extern int errno; - -extern int clone(int (*proc)(void *), void *sp, int flags, void *data); -extern int sleep(int);  extern int printf(const char *fmt, ...); -extern char *strerror(int errnum); -extern char *ptsname(int __fd); -extern int munmap(void *, int);  extern void *sbrk(int increment); -extern void *malloc(int size); -extern void perror(char *err); -extern int kill(int pid, int sig); -extern int getuid(void); -extern int getgid(void);  extern int pause(void); -extern int write(int, const void *, int);  extern void exit(int); -extern int close(int); -extern int read(unsigned int, char *, int); -extern int pipe(int *); -extern int sched_yield(void); -extern int ptrace(int op, int pid, long addr, long data);  #endif diff --git a/arch/um/include/shared/kern_util.h b/arch/um/include/shared/kern_util.h index 3c341222d25..83a91f97633 100644 --- a/arch/um/include/shared/kern_util.h +++ b/arch/um/include/shared/kern_util.h @@ -6,8 +6,10 @@  #ifndef __KERN_UTIL_H__  #define __KERN_UTIL_H__ -#include "sysdep/ptrace.h" -#include "sysdep/faultinfo.h" +#include <sysdep/ptrace.h> +#include <sysdep/faultinfo.h> + +struct siginfo;  extern int uml_exitcode; @@ -21,9 +23,8 @@ extern unsigned long alloc_stack(int order, int atomic);  extern void free_stack(unsigned long stack, int order);  extern int do_signal(void); -extern void copy_sc(struct uml_pt_regs *regs, void *from);  extern void interrupt_end(void); -extern void relay_signal(int sig, struct uml_pt_regs *regs); +extern void relay_signal(int sig, struct siginfo *si, struct uml_pt_regs *regs);  extern unsigned long segv(struct faultinfo fi, unsigned long ip,  			  int is_user, struct uml_pt_regs *regs); @@ -34,9 +35,8 @@ extern unsigned int do_IRQ(int irq, struct uml_pt_regs *regs);  extern int smp_sigio_handler(void);  extern void initial_thread_cb(void (*proc)(void *), void *arg);  extern int is_syscall(unsigned long addr); -extern void timer_handler(int sig, struct uml_pt_regs *regs); -extern void timer_handler(int sig, struct uml_pt_regs *regs); +extern void timer_handler(int sig, struct siginfo *unused_si, struct uml_pt_regs *regs);  extern int start_uml(void);  extern void paging_init(void); @@ -49,7 +49,7 @@ extern void do_uml_exitcalls(void);   * GFP_ATOMIC.   */  extern int __cant_sleep(void); -extern void *get_current(void); +extern int get_current_pid(void);  extern int copy_from_user_proc(void *to, void *from, int size);  extern int cpu(void);  extern char *uml_strdup(const char *string); @@ -60,9 +60,9 @@ extern unsigned long from_irq_stack(int nested);  extern void syscall_trace(struct uml_pt_regs *regs, int entryexit);  extern int singlestepping(void *t); -extern void segv_handler(int sig, struct uml_pt_regs *regs); -extern void bus_handler(int sig, struct uml_pt_regs *regs); -extern void winch(int sig, struct uml_pt_regs *regs); +extern void segv_handler(int sig, struct siginfo *unused_si, struct uml_pt_regs *regs); +extern void bus_handler(int sig, struct siginfo *si, struct uml_pt_regs *regs); +extern void winch(int sig, struct siginfo *unused_si, struct uml_pt_regs *regs);  extern void fatal_sigsegv(void) __attribute__ ((noreturn)); diff --git a/arch/um/include/shared/ldt.h b/arch/um/include/shared/ldt.h deleted file mode 100644 index a7f999a5877..00000000000 --- a/arch/um/include/shared/ldt.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2004 Fujitsu Siemens Computers GmbH - * Licensed under the GPL - * - * Author: Bodo Stroesser <bstroesser@fujitsu-siemens.com> - */ - -#ifndef __ASM_LDT_H -#define __ASM_LDT_H - -#include <linux/mutex.h> -#include <sysdep/host_ldt.h> - -extern void ldt_host_info(void); - -#define LDT_PAGES_MAX \ -	((LDT_ENTRIES * LDT_ENTRY_SIZE)/PAGE_SIZE) -#define LDT_ENTRIES_PER_PAGE \ -	(PAGE_SIZE/LDT_ENTRY_SIZE) -#define LDT_DIRECT_ENTRIES \ -	((LDT_PAGES_MAX*sizeof(void *))/LDT_ENTRY_SIZE) - -struct ldt_entry { -	__u32 a; -	__u32 b; -}; - -typedef struct uml_ldt { -	int entry_count; -	struct mutex lock; -	union { -		struct ldt_entry * pages[LDT_PAGES_MAX]; -		struct ldt_entry entries[LDT_DIRECT_ENTRIES]; -	} u; -} uml_ldt_t; - -#endif diff --git a/arch/um/include/shared/line.h b/arch/um/include/shared/line.h deleted file mode 100644 index 311a0d3d93a..00000000000 --- a/arch/um/include/shared/line.h +++ /dev/null @@ -1,105 +0,0 @@ -/*  - * Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com) - * Licensed under the GPL - */ - -#ifndef __LINE_H__ -#define __LINE_H__ - -#include "linux/list.h" -#include "linux/workqueue.h" -#include "linux/tty.h" -#include "linux/interrupt.h" -#include "linux/spinlock.h" -#include "linux/mutex.h" -#include "chan_user.h" -#include "mconsole_kern.h" - -/* There's only one modifiable field in this - .mc.list */ -struct line_driver { -	const char *name; -	const char *device_name; -	const short major; -	const short minor_start; -	const short type; -	const short subtype; -	const int read_irq; -	const char *read_irq_name; -	const int write_irq; -	const char *write_irq_name; -	struct mc_device mc; -}; - -struct line { -	struct tty_struct *tty; -	spinlock_t count_lock; -	int valid; - -	char *init_str; -	int init_pri; -	struct list_head chan_list; - -	/*This lock is actually, mostly, local to*/ -	spinlock_t lock; -	int throttled; -	/* Yes, this is a real circular buffer. -	 * XXX: And this should become a struct kfifo! -	 * -	 * buffer points to a buffer allocated on demand, of length -	 * LINE_BUFSIZE, head to the start of the ring, tail to the end.*/ -	char *buffer; -	char *head; -	char *tail; - -	int sigio; -	struct delayed_work task; -	const struct line_driver *driver; -	int have_irq; -}; - -#define LINE_INIT(str, d) \ -	{ .count_lock =	__SPIN_LOCK_UNLOCKED((str).count_lock), \ -	  .init_str =	str,	\ -	  .init_pri =	INIT_STATIC, \ -	  .valid =	1, \ -	  .lock =	__SPIN_LOCK_UNLOCKED((str).lock), \ -	  .driver =	d } - -extern void line_close(struct tty_struct *tty, struct file * filp); -extern int line_open(struct line *lines, struct tty_struct *tty); -extern int line_setup(struct line *lines, unsigned int sizeof_lines, -		      char *init, char **error_out); -extern int line_write(struct tty_struct *tty, const unsigned char *buf, -		      int len); -extern int line_put_char(struct tty_struct *tty, unsigned char ch); -extern void line_set_termios(struct tty_struct *tty, struct ktermios * old); -extern int line_chars_in_buffer(struct tty_struct *tty); -extern void line_flush_buffer(struct tty_struct *tty); -extern void line_flush_chars(struct tty_struct *tty); -extern int line_write_room(struct tty_struct *tty); -extern int line_ioctl(struct tty_struct *tty, struct file * file, -		      unsigned int cmd, unsigned long arg); -extern void line_throttle(struct tty_struct *tty); -extern void line_unthrottle(struct tty_struct *tty); - -extern char *add_xterm_umid(char *base); -extern int line_setup_irq(int fd, int input, int output, struct line *line, -			  void *data); -extern void line_close_chan(struct line *line); -extern struct tty_driver *register_lines(struct line_driver *line_driver, -					 const struct tty_operations *driver, -					 struct line *lines, int nlines); -extern void lines_init(struct line *lines, int nlines, struct chan_opts *opts); -extern void close_lines(struct line *lines, int nlines); - -extern int line_config(struct line *lines, unsigned int sizeof_lines, -		       char *str, const struct chan_opts *opts, -		       char **error_out); -extern int line_id(char **str, int *start_out, int *end_out); -extern int line_remove(struct line *lines, unsigned int sizeof_lines, int n, -		       char **error_out); -extern int line_get_config(char *dev, struct line *lines, -			   unsigned int sizeof_lines, char *str, -			   int size, char **error_out); - -#endif diff --git a/arch/um/include/shared/longjmp.h b/arch/um/include/shared/longjmp.h index e860bc5848e..9bdddf4c405 100644 --- a/arch/um/include/shared/longjmp.h +++ b/arch/um/include/shared/longjmp.h @@ -1,8 +1,8 @@  #ifndef __UML_LONGJMP_H  #define __UML_LONGJMP_H -#include "sysdep/archsetjmp.h" -#include "os.h" +#include <sysdep/archsetjmp.h> +#include <os.h>  extern int setjmp(jmp_buf);  extern void longjmp(jmp_buf, int); diff --git a/arch/um/include/shared/mconsole.h b/arch/um/include/shared/mconsole.h deleted file mode 100644 index c139ae1d682..00000000000 --- a/arch/um/include/shared/mconsole.h +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright (C) 2001 Lennert Buytenhek (buytenh@gnu.org) - * Copyright (C) 2001 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com) - * Licensed under the GPL - */ - -#ifndef __MCONSOLE_H__ -#define __MCONSOLE_H__ - -#ifndef __KERNEL__ -#include <stdint.h> -#define u32 uint32_t -#endif - -#include "sysdep/ptrace.h" - -#define MCONSOLE_MAGIC (0xcafebabe) -#define MCONSOLE_MAX_DATA (512) -#define MCONSOLE_VERSION 2 - -struct mconsole_request { -	u32 magic; -	u32 version; -	u32 len; -	char data[MCONSOLE_MAX_DATA]; -}; - -struct mconsole_reply { -	u32 err; -	u32 more; -	u32 len; -	char data[MCONSOLE_MAX_DATA]; -}; - -struct mconsole_notify { -	u32 magic; -	u32 version; -	enum { MCONSOLE_SOCKET, MCONSOLE_PANIC, MCONSOLE_HANG, -	       MCONSOLE_USER_NOTIFY } type; -	u32 len; -	char data[MCONSOLE_MAX_DATA]; -}; - -struct mc_request; - -enum mc_context { MCONSOLE_INTR, MCONSOLE_PROC }; - -struct mconsole_command -{ -	char *command; -	void (*handler)(struct mc_request *req); -	enum mc_context context; -}; - -struct mc_request -{ -	int len; -	int as_interrupt; - -	int originating_fd; -	unsigned int originlen; -	unsigned char origin[128];			/* sockaddr_un */ - -	struct mconsole_request request; -	struct mconsole_command *cmd; -	struct uml_pt_regs regs; -}; - -extern char mconsole_socket_name[]; - -extern int mconsole_unlink_socket(void); -extern int mconsole_reply_len(struct mc_request *req, const char *reply, -			      int len, int err, int more); -extern int mconsole_reply(struct mc_request *req, const char *str, int err, -			  int more); - -extern void mconsole_version(struct mc_request *req); -extern void mconsole_help(struct mc_request *req); -extern void mconsole_halt(struct mc_request *req); -extern void mconsole_reboot(struct mc_request *req); -extern void mconsole_config(struct mc_request *req); -extern void mconsole_remove(struct mc_request *req); -extern void mconsole_sysrq(struct mc_request *req); -extern void mconsole_cad(struct mc_request *req); -extern void mconsole_stop(struct mc_request *req); -extern void mconsole_go(struct mc_request *req); -extern void mconsole_log(struct mc_request *req); -extern void mconsole_proc(struct mc_request *req); -extern void mconsole_stack(struct mc_request *req); - -extern int mconsole_get_request(int fd, struct mc_request *req); -extern int mconsole_notify(char *sock_name, int type, const void *data, -			   int len); -extern char *mconsole_notify_socket(void); -extern void lock_notify(void); -extern void unlock_notify(void); - -#endif diff --git a/arch/um/include/shared/mconsole_kern.h b/arch/um/include/shared/mconsole_kern.h deleted file mode 100644 index d2fe07e7895..00000000000 --- a/arch/um/include/shared/mconsole_kern.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com) - * Licensed under the GPL - */ - -#ifndef __MCONSOLE_KERN_H__ -#define __MCONSOLE_KERN_H__ - -#include "linux/list.h" -#include "mconsole.h" - -struct mconsole_entry { -	struct list_head list; -	struct mc_request request; -}; - -/* All these methods are called in process context. */ -struct mc_device { -	struct list_head list; -	char *name; -	int (*config)(char *, char **); -	int (*get_config)(char *, char *, int, char **); -	int (*id)(char **, int *, int *); -	int (*remove)(int, char **); -}; - -#define CONFIG_CHUNK(str, size, current, chunk, end) \ -do { \ -	current += strlen(chunk); \ -	if(current >= size) \ -		str = NULL; \ -	if(str != NULL){ \ -		strcpy(str, chunk); \ -		str += strlen(chunk); \ -	} \ -	if(end) \ -		current++; \ -} while(0) - -#ifdef CONFIG_MCONSOLE - -extern void mconsole_register_dev(struct mc_device *new); - -#else - -static inline void mconsole_register_dev(struct mc_device *new) -{ -} - -#endif - -#endif diff --git a/arch/um/include/shared/mem_kern.h b/arch/um/include/shared/mem_kern.h deleted file mode 100644 index 69be0fd0ce4..00000000000 --- a/arch/um/include/shared/mem_kern.h +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright (C) 2003 Jeff Dike (jdike@addtoit.com) - * Licensed under the GPL - */ - -#ifndef __MEM_KERN_H__ -#define __MEM_KERN_H__ - -#include "linux/list.h" -#include "linux/types.h" - -struct remapper { -	struct list_head list; -	int (*proc)(int, unsigned long, int, __u64); -}; - -extern void register_remapper(struct remapper *info); - -#endif - diff --git a/arch/um/include/shared/net_kern.h b/arch/um/include/shared/net_kern.h index 5c367f22595..012ac87d490 100644 --- a/arch/um/include/shared/net_kern.h +++ b/arch/um/include/shared/net_kern.h @@ -18,7 +18,6 @@ struct uml_net {  	struct net_device *dev;  	struct platform_device pdev;  	int index; -	unsigned char mac[ETH_ALEN];  };  struct uml_net_private { diff --git a/arch/um/include/shared/os.h b/arch/um/include/shared/os.h index c4617baaa4f..08eec0b691b 100644 --- a/arch/um/include/shared/os.h +++ b/arch/um/include/shared/os.h @@ -7,10 +7,9 @@  #define __OS_H__  #include <stdarg.h> -#include "irq_user.h" -#include "longjmp.h" -#include "mm_id.h" -#include "sysdep/tls.h" +#include <irq_user.h> +#include <longjmp.h> +#include <mm_id.h>  #define CATCH_EINTR(expr) while ((errno = 0, ((expr) < 0)) && (errno == EINTR)) @@ -29,6 +28,12 @@  #define OS_ACC_R_OK    4       /* Test for read permission.  */  #define OS_ACC_RW_OK   (OS_ACC_W_OK | OS_ACC_R_OK) /* Test for RW permission */ +#ifdef CONFIG_64BIT +#define OS_LIB_PATH	"/usr/lib64/" +#else +#define OS_LIB_PATH	"/usr/lib/" +#endif +  /*   * types taken from stat_file() in hostfs_user.c   * (if they are wrong here, they are wrong there...). @@ -131,11 +136,13 @@ extern int os_ioctl_generic(int fd, unsigned int cmd, unsigned long arg);  extern int os_get_ifname(int fd, char *namebuf);  extern int os_set_slip(int fd);  extern int os_mode_fd(int fd, int mode); +extern int os_fsync_file(int fd);  extern int os_seek_file(int fd, unsigned long long offset);  extern int os_open_file(const char *file, struct openflags flags, int mode);  extern int os_read_file(int fd, void *buf, int len);  extern int os_write_file(int fd, const void *buf, int count); +extern int os_sync_file(int fd);  extern int os_file_size(const char *file, unsigned long long *size_out);  extern int os_file_modtime(const char *file, unsigned long *modtime);  extern int os_pipe(int *fd, int stream, int close_on_exec); @@ -186,7 +193,6 @@ extern int os_getpid(void);  extern int os_getpgrp(void);  extern void init_new_thread_signals(void); -extern int run_kernel_thread(int (*fn)(void *), void *arg, jmp_buf **jmp_ptr);  extern int os_map_memory(void *virt, int fd, unsigned long long off,  			 unsigned long len, int r, int w, int x); @@ -196,12 +202,7 @@ extern int os_unmap_memory(void *addr, int len);  extern int os_drop_memory(void *addr, int length);  extern int can_drop_memory(void);  extern void os_flush_stdout(void); - -/* uaccess.c */ -extern unsigned long __do_user_copy(void *to, const void *from, int n, -				    void **fault_addr, jmp_buf **fault_catcher, -				    void (*op)(void *to, const void *from, -					       int n), int *faulted_out); +extern int os_mincore(void *addr, unsigned long len);  /* execvp.c */  extern int execvp_noalloc(char *buf, const char *file, char *const argv[]); @@ -212,10 +213,6 @@ extern int run_helper_thread(int (*proc)(void *), void *arg,  extern int helper_wait(int pid); -/* tls.c */ -extern int os_set_thread_area(user_desc_t *info, int pid); -extern int os_get_thread_area(user_desc_t *info, int pid); -  /* umid.c */  extern int umid_file_name(char *name, char *buf, int len);  extern int set_umid(char *name); @@ -225,12 +222,13 @@ extern char *get_umid(void);  extern void timer_init(void);  extern void set_sigstack(void *sig_stack, int size);  extern void remove_sigstack(void); -extern void set_handler(int sig, void (*handler)(int), int flags, ...); +extern void set_handler(int sig);  extern int change_sig(int signal, int on);  extern void block_signals(void);  extern void unblock_signals(void);  extern int get_signals(void);  extern int set_signals(int enable); +extern int os_is_signal_stack(void);  /* util.c */  extern void stack_protections(unsigned long address); @@ -238,6 +236,8 @@ extern int raw(int fd);  extern void setup_machinename(char *machine_out);  extern void setup_hostinfo(char *buf, int len);  extern void os_dump_core(void) __attribute__ ((noreturn)); +extern void um_early_printk(const char *s, unsigned int n); +extern void os_fix_helper_signals(void);  /* time.c */  extern void idle_sleep(unsigned long long nsecs); diff --git a/arch/um/include/shared/process.h b/arch/um/include/shared/process.h deleted file mode 100644 index bb873a51262..00000000000 --- a/arch/um/include/shared/process.h +++ /dev/null @@ -1,17 +0,0 @@ -/*  - * Copyright (C) 2000 - 2008 Jeff Dike (jdike@{addtoit,linux.intel}.com) - * Licensed under the GPL - */ - -#ifndef __PROCESS_H__ -#define __PROCESS_H__ - -#include <signal.h> - -/* Copied from linux/compiler-gcc.h since we can't include it directly */ -#define barrier() __asm__ __volatile__("": : :"memory") - -extern void sig_handler(int sig, struct sigcontext *sc); -extern void alarm_handler(int sig, struct sigcontext *sc); - -#endif diff --git a/arch/um/include/shared/ptrace_user.h b/arch/um/include/shared/ptrace_user.h index 7fd8539bc19..56b2f284b10 100644 --- a/arch/um/include/shared/ptrace_user.h +++ b/arch/um/include/shared/ptrace_user.h @@ -6,7 +6,8 @@  #ifndef __PTRACE_USER_H__  #define __PTRACE_USER_H__ -#include "sysdep/ptrace_user.h" +#include <sys/ptrace.h> +#include <sysdep/ptrace_user.h>  extern int ptrace_getregs(long pid, unsigned long *regs_out);  extern int ptrace_setregs(long pid, unsigned long *regs_in); diff --git a/arch/um/include/shared/registers.h b/arch/um/include/shared/registers.h index b0b4589e0eb..f5b76355ad7 100644 --- a/arch/um/include/shared/registers.h +++ b/arch/um/include/shared/registers.h @@ -6,8 +6,8 @@  #ifndef __REGISTERS_H  #define __REGISTERS_H -#include "sysdep/ptrace.h" -#include "sysdep/archsetjmp.h" +#include <sysdep/ptrace.h> +#include <sysdep/archsetjmp.h>  extern int save_fp_registers(int pid, unsigned long *fp_regs);  extern int restore_fp_registers(int pid, unsigned long *fp_regs); @@ -16,7 +16,7 @@ extern int restore_fpx_registers(int pid, unsigned long *fp_regs);  extern int save_registers(int pid, struct uml_pt_regs *regs);  extern int restore_registers(int pid, struct uml_pt_regs *regs);  extern int init_registers(int pid); -extern void get_safe_registers(unsigned long *regs); +extern void get_safe_registers(unsigned long *regs, unsigned long *fp_regs);  extern unsigned long get_thread_reg(int reg, jmp_buf *buf);  extern int get_fp_registers(int pid, unsigned long *regs);  extern int put_fp_registers(int pid, unsigned long *regs); diff --git a/arch/um/include/shared/skas/skas.h b/arch/um/include/shared/skas/skas.h index 64d2c744330..c45df961c87 100644 --- a/arch/um/include/shared/skas/skas.h +++ b/arch/um/include/shared/skas/skas.h @@ -6,7 +6,7 @@  #ifndef __SKAS_H  #define __SKAS_H -#include "sysdep/ptrace.h" +#include <sysdep/ptrace.h>  extern int userspace_pid[];  extern int proc_mm, ptrace_faultinfo, ptrace_ldt; diff --git a/arch/um/include/shared/skas_ptrace.h b/arch/um/include/shared/skas_ptrace.h index 3d31bbacd01..630a9c92b93 100644 --- a/arch/um/include/shared/skas_ptrace.h +++ b/arch/um/include/shared/skas_ptrace.h @@ -9,6 +9,6 @@  #define PTRACE_FAULTINFO 52  #define PTRACE_SWITCH_MM 55 -#include "sysdep/skas_ptrace.h" +#include <sysdep/skas_ptrace.h>  #endif diff --git a/arch/um/include/shared/skas_ptregs.h b/arch/um/include/shared/skas_ptregs.h deleted file mode 100644 index 73db19e9c07..00000000000 --- a/arch/um/include/shared/skas_ptregs.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef __SKAS_PT_REGS_ -#define __SKAS_PT_REGS_ - -#include <user_constants.h> - -#endif diff --git a/arch/um/include/shared/syscall.h b/arch/um/include/shared/syscall.h deleted file mode 100644 index dda1df901a0..00000000000 --- a/arch/um/include/shared/syscall.h +++ /dev/null @@ -1,12 +0,0 @@ -/* - * Copyright (C) 2002 Jeff Dike (jdike@karaya.com) - * Licensed under the GPL - */ - -#ifndef __SYSCALL_USER_H -#define __SYSCALL_USER_H - -extern int record_syscall_start(int syscall); -extern void record_syscall_end(int index, long result); - -#endif diff --git a/arch/um/include/shared/task.h b/arch/um/include/shared/task.h deleted file mode 100644 index 3fe726b3cf4..00000000000 --- a/arch/um/include/shared/task.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef __TASK_H -#define __TASK_H - -#include <kern_constants.h> - -#define TASK_REGS(task) ((struct uml_pt_regs *) &(((char *) (task))[HOST_TASK_REGS])) -#define TASK_PID(task) *((int *) &(((char *) (task))[HOST_TASK_PID])) - -#endif diff --git a/arch/um/include/shared/tlb.h b/arch/um/include/shared/tlb.h deleted file mode 100644 index ecd2265b301..00000000000 --- a/arch/um/include/shared/tlb.h +++ /dev/null @@ -1,15 +0,0 @@ -/*  - * Copyright (C) 2002 Jeff Dike (jdike@karaya.com) - * Licensed under the GPL - */ - -#ifndef __TLB_H__ -#define __TLB_H__ - -#include "um_mmu.h" - -extern void force_flush_all(void); -extern int flush_tlb_kernel_range_common(unsigned long start, -					 unsigned long end); - -#endif diff --git a/arch/um/include/shared/ubd_user.h b/arch/um/include/shared/ubd_user.h deleted file mode 100644 index 3845051f1b1..00000000000 --- a/arch/um/include/shared/ubd_user.h +++ /dev/null @@ -1,16 +0,0 @@ -/*  - * Copyright (C) 2000 Jeff Dike (jdike@karaya.com) - * Copyright (C) 2001 RidgeRun, Inc (glonnon@ridgerun.com) - * Licensed under the GPL - */ - -#ifndef __UM_UBD_USER_H -#define __UM_UBD_USER_H - -extern void ignore_sigwinch_sig(void); -extern int start_io_thread(unsigned long sp, int *fds_out); -extern int io_thread(void *arg); -extern int kernel_fd; - -#endif - diff --git a/arch/um/include/shared/um_malloc.h b/arch/um/include/shared/um_malloc.h index c554d706d10..6395fef6b69 100644 --- a/arch/um/include/shared/um_malloc.h +++ b/arch/um/include/shared/um_malloc.h @@ -6,7 +6,7 @@  #ifndef __UM_MALLOC_H__  #define __UM_MALLOC_H__ -#include "kern_constants.h" +#include <generated/asm-offsets.h>  extern void *uml_kmalloc(int size, int flags);  extern void kfree(const void *ptr); diff --git a/arch/um/include/shared/um_mmu.h b/arch/um/include/shared/um_mmu.h deleted file mode 100644 index b1a7e47d102..00000000000 --- a/arch/um/include/shared/um_mmu.h +++ /dev/null @@ -1,24 +0,0 @@ -/*  - * Copyright (C) 2002 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com) - * Licensed under the GPL - */ - -#ifndef __ARCH_UM_MMU_H -#define __ARCH_UM_MMU_H - -#include "mm_id.h" -#include "ldt.h" - -typedef struct mm_context { -	struct mm_id id; -	struct uml_ldt ldt; -	struct page **stub_pages; -} mm_context_t; - -extern void __switch_mm(struct mm_id * mm_idp); - -/* Avoid tangled inclusion with asm/ldt.h */ -extern long init_new_ldt(struct mm_context *to_mm, struct mm_context *from_mm); -extern void free_ldt(struct mm_context *mm); - -#endif diff --git a/arch/um/include/shared/um_uaccess.h b/arch/um/include/shared/um_uaccess.h deleted file mode 100644 index 45c04999d67..00000000000 --- a/arch/um/include/shared/um_uaccess.h +++ /dev/null @@ -1,97 +0,0 @@ -/*  - * Copyright (C) 2002 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com) - * Licensed under the GPL - */ - -#ifndef __ARCH_UM_UACCESS_H -#define __ARCH_UM_UACCESS_H - -#include <asm/elf.h> -#include <asm/fixmap.h> -#include "sysdep/archsetjmp.h" - -#define __under_task_size(addr, size) \ -	(((unsigned long) (addr) < TASK_SIZE) && \ -	 (((unsigned long) (addr) + (size)) < TASK_SIZE)) - -#define __access_ok_vsyscall(type, addr, size) \ -	 ((type == VERIFY_READ) && \ -	  ((unsigned long) (addr) >= FIXADDR_USER_START) && \ -	  ((unsigned long) (addr) + (size) <= FIXADDR_USER_END) && \ -	  ((unsigned long) (addr) + (size) >= (unsigned long)(addr))) - -#define __addr_range_nowrap(addr, size) \ -	((unsigned long) (addr) <= ((unsigned long) (addr) + (size))) - -#define access_ok(type, addr, size) \ -	(__addr_range_nowrap(addr, size) && \ -	 (__under_task_size(addr, size) || \ -	  __access_ok_vsyscall(type, addr, size) || \ -	  segment_eq(get_fs(), KERNEL_DS))) - -extern int copy_from_user(void *to, const void __user *from, int n); -extern int copy_to_user(void __user *to, const void *from, int n); - -extern int __do_copy_to_user(void *to, const void *from, int n, -			     void **fault_addr, jmp_buf **fault_catcher); - -/* - * strncpy_from_user: - Copy a NUL terminated string from userspace. - * @dst:   Destination address, in kernel space.  This buffer must be at - *         least @count bytes long. - * @src:   Source address, in user space. - * @count: Maximum number of bytes to copy, including the trailing NUL. - * - * Copies a NUL-terminated string from userspace to kernel space. - * - * On success, returns the length of the string (not including the trailing - * NUL). - * - * If access to userspace fails, returns -EFAULT (some data may have been - * copied). - * - * If @count is smaller than the length of the string, copies @count bytes - * and returns @count. - */ - -extern int strncpy_from_user(char *dst, const char __user *src, int count); - -/* - * __clear_user: - Zero a block of memory in user space, with less checking. - * @to:   Destination address, in user space. - * @n:    Number of bytes to zero. - * - * Zero a block of memory in user space.  Caller must check - * the specified block with access_ok() before calling this function. - * - * Returns number of bytes that could not be cleared. - * On success, this will be zero. - */ -extern int __clear_user(void __user *mem, int len); - -/* - * clear_user: - Zero a block of memory in user space. - * @to:   Destination address, in user space. - * @n:    Number of bytes to zero. - * - * Zero a block of memory in user space. - * - * Returns number of bytes that could not be cleared. - * On success, this will be zero. - */ -extern int clear_user(void __user *mem, int len); - -/* - * strlen_user: - Get the size of a string in user space. - * @str: The string to measure. - * @n:   The maximum valid length - * - * Get the size of a NUL-terminated string in user space. - * - * Returns the size of the string INCLUDING the terminating NUL. - * On exception, returns 0. - * If the string is too long, returns a value greater than @n. - */ -extern int strnlen_user(const void __user *str, int len); - -#endif diff --git a/arch/um/include/shared/user.h b/arch/um/include/shared/user.h index 293f7c794fa..cef06856333 100644 --- a/arch/um/include/shared/user.h +++ b/arch/um/include/shared/user.h @@ -6,7 +6,7 @@  #ifndef __USER_H__  #define __USER_H__ -#include "kern_constants.h" +#include <generated/asm-offsets.h>  /*   * The usual definition - copied here because the kernel provides its own, @@ -26,6 +26,17 @@  extern void panic(const char *fmt, ...)  	__attribute__ ((format (printf, 1, 2))); +/* Requires preincluding include/linux/kern_levels.h */ +#define UM_KERN_EMERG	KERN_EMERG +#define UM_KERN_ALERT	KERN_ALERT +#define UM_KERN_CRIT	KERN_CRIT +#define UM_KERN_ERR	KERN_ERR +#define UM_KERN_WARNING	KERN_WARNING +#define UM_KERN_NOTICE	KERN_NOTICE +#define UM_KERN_INFO	KERN_INFO +#define UM_KERN_DEBUG	KERN_DEBUG +#define UM_KERN_CONT	KERN_CONT +  #ifdef UML_CONFIG_PRINTK  extern int printk(const char *fmt, ...)  	__attribute__ ((format (printf, 1, 2))); @@ -36,10 +47,11 @@ static inline int printk(const char *fmt, ...)  }  #endif -extern void schedule(void);  extern int in_aton(char *str); -extern int open_gdb_chan(void);  extern size_t strlcpy(char *, const char *, size_t);  extern size_t strlcat(char *, const char *, size_t); +/* Copied from linux/compiler-gcc.h since we can't include it directly */ +#define barrier() __asm__ __volatile__("": : :"memory") +  #endif  | 
