Commit 0132ac48 authored by Anton Blanchard's avatar Anton Blanchard

Merge samba.org:/scratch/anton/linux-2.5

into samba.org:/scratch/anton/tmp3
parents 582a045d d05120a9
...@@ -13,10 +13,10 @@ ...@@ -13,10 +13,10 @@
# Adjusted for PPC64 by Tom Gall # Adjusted for PPC64 by Tom Gall
# #
KERNELLOAD = 0xc000000000000000 KERNELLOAD := 0xc000000000000000
LDFLAGS := -m elf64ppc LDFLAGS := -m elf64ppc
LDFLAGS_vmlinux = -Bstatic -e $(KERNELLOAD) -Ttext $(KERNELLOAD) LDFLAGS_vmlinux := -Bstatic -e $(KERNELLOAD) -Ttext $(KERNELLOAD)
LDFLAGS_BLOB := --format binary --oformat elf64-powerpc LDFLAGS_BLOB := --format binary --oformat elf64-powerpc
CFLAGS += -msoft-float -pipe -Wno-uninitialized -mminimal-toc \ CFLAGS += -msoft-float -pipe -Wno-uninitialized -mminimal-toc \
-mtraceback=full -mcpu=power4 -mtraceback=full -mcpu=power4
...@@ -29,21 +29,19 @@ core-y += arch/ppc64/mm/ ...@@ -29,21 +29,19 @@ core-y += arch/ppc64/mm/
core-$(CONFIG_XMON) += arch/ppc64/xmon/ core-$(CONFIG_XMON) += arch/ppc64/xmon/
drivers-$(CONFIG_OPROFILE) += arch/ppc64/oprofile/ drivers-$(CONFIG_OPROFILE) += arch/ppc64/oprofile/
makeboot =$(Q)$(MAKE) -f scripts/Makefile.build obj=arch/ppc64/boot $(1) boot := arch/ppc64/boot
boottarget-$(CONFIG_PPC_PSERIES) := zImage zImage.initrd boottarget-$(CONFIG_PPC_PSERIES) := zImage zImage.initrd
boottarget-$(CONFIG_PPC_ISERIES) := vmlinux.sminitrd vmlinux.initrd vmlinux.sm boottarget-$(CONFIG_PPC_ISERIES) := vmlinux.sminitrd vmlinux.initrd vmlinux.sm
$(boottarget-y): vmlinux $(boottarget-y): vmlinux
$(call makeboot,arch/ppc64/boot/$@) $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
%_config: arch/ppc64/configs/%_defconfig %_config: arch/ppc64/configs/%_defconfig
rm -f .config arch/ppc64/defconfig rm -f .config arch/ppc64/defconfig
cp -f arch/ppc64/configs/$(@:config=defconfig) arch/ppc64/defconfig cp -f arch/ppc64/configs/$(@:config=defconfig) arch/ppc64/defconfig
archclean: archclean:
$(Q)$(MAKE) -f scripts/Makefile.clean obj=arch/ppc64/boot $(Q)$(MAKE) $(clean)=$(boot)
archmrproper:
prepare: include/asm-ppc64/offsets.h prepare: include/asm-ppc64/offsets.h
......
...@@ -79,7 +79,7 @@ $(obj)/vmlinux.initrd: vmlinux $(obj)/addRamDisk $(obj)/ramdisk.image.gz System. ...@@ -79,7 +79,7 @@ $(obj)/vmlinux.initrd: vmlinux $(obj)/addRamDisk $(obj)/ramdisk.image.gz System.
$(obj)/vmlinux.sminitrd: $(obj)/vmlinux.sm $(obj)/addRamDisk $(obj)/ramdisk.image.gz FORCE $(obj)/vmlinux.sminitrd: $(obj)/vmlinux.sm $(obj)/addRamDisk $(obj)/ramdisk.image.gz FORCE
$(call if_changed,ramdisk) $(call if_changed,ramdisk)
$(obj)/sysmap.o: System.map $(obj)/piggyback $(obj)/sysmap.o: System.map $(obj)/piggyback FORCE
$(call if_changed,piggy) $(call if_changed,piggy)
addsection = $(BOOTOBJCOPY) $(1) \ addsection = $(BOOTOBJCOPY) $(1) \
...@@ -92,7 +92,7 @@ quiet_cmd_addnote = ADDNOTE $@ ...@@ -92,7 +92,7 @@ quiet_cmd_addnote = ADDNOTE $@
quiet_cmd_piggy = PIGGY $@ quiet_cmd_piggy = PIGGY $@
cmd_piggy = $(obj)/piggyback $(@:.o=) < $< | $(BOOTAS) -o $@ cmd_piggy = $(obj)/piggyback $(@:.o=) < $< | $(BOOTAS) -o $@
$(call gz-sec, $(required)): $(obj)/kernel-%.gz: % $(call gz-sec, $(required)): $(obj)/kernel-%.gz: % FORCE
$(call if_changed,gzip) $(call if_changed,gzip)
$(obj)/kernel-initrd.gz: $(obj)/ramdisk.image.gz $(obj)/kernel-initrd.gz: $(obj)/ramdisk.image.gz
...@@ -101,7 +101,7 @@ $(obj)/kernel-initrd.gz: $(obj)/ramdisk.image.gz ...@@ -101,7 +101,7 @@ $(obj)/kernel-initrd.gz: $(obj)/ramdisk.image.gz
$(call src-sec, $(required) $(initrd)): $(obj)/kernel-%.c: $(obj)/kernel-%.gz $(call src-sec, $(required) $(initrd)): $(obj)/kernel-%.c: $(obj)/kernel-%.gz
touch $@ touch $@
$(call obj-sec, $(required) $(initrd)): $(obj)/kernel-%.o: $(obj)/kernel-%.c $(call obj-sec, $(required) $(initrd)): $(obj)/kernel-%.o: $(obj)/kernel-%.c FORCE
$(call if_changed_dep,bootcc) $(call if_changed_dep,bootcc)
$(call addsection, $@) $(call addsection, $@)
......
...@@ -208,6 +208,12 @@ copy_thread(int nr, unsigned long clone_flags, unsigned long usp, ...@@ -208,6 +208,12 @@ copy_thread(int nr, unsigned long clone_flags, unsigned long usp,
} else { } else {
childregs->gpr[1] = usp; childregs->gpr[1] = usp;
p->thread.regs = childregs; p->thread.regs = childregs;
if (clone_flags & CLONE_SETTLS) {
if (test_thread_flag(TIF_32BIT))
childregs->gpr[2] = childregs->gpr[6];
else
childregs->gpr[13] = childregs->gpr[6];
}
} }
childregs->gpr[3] = 0; /* Result from fork() */ childregs->gpr[3] = 0; /* Result from fork() */
sp -= STACK_FRAME_OVERHEAD; sp -= STACK_FRAME_OVERHEAD;
...@@ -304,7 +310,7 @@ int sys_clone(unsigned long clone_flags, unsigned long p2, unsigned long p3, ...@@ -304,7 +310,7 @@ int sys_clone(unsigned long clone_flags, unsigned long p2, unsigned long p3,
if (clone_flags & (CLONE_PARENT_SETTID | CLONE_CHILD_SETTID | if (clone_flags & (CLONE_PARENT_SETTID | CLONE_CHILD_SETTID |
CLONE_CHILD_CLEARTID)) { CLONE_CHILD_CLEARTID)) {
parent_tidptr = p3; parent_tidptr = p3;
child_tidptr = p4; child_tidptr = p5;
if (test_thread_flag(TIF_32BIT)) { if (test_thread_flag(TIF_32BIT)) {
parent_tidptr &= 0xffffffff; parent_tidptr &= 0xffffffff;
child_tidptr &= 0xffffffff; child_tidptr &= 0xffffffff;
......
...@@ -83,9 +83,7 @@ ...@@ -83,9 +83,7 @@
#define _PAGE_WRITETHRU 0x040UL /* W: cache write-through */ #define _PAGE_WRITETHRU 0x040UL /* W: cache write-through */
#define _PAGE_DIRTY 0x080UL /* C: page changed */ #define _PAGE_DIRTY 0x080UL /* C: page changed */
#define _PAGE_ACCESSED 0x100UL /* R: page referenced */ #define _PAGE_ACCESSED 0x100UL /* R: page referenced */
#if 0 #define _PAGE_FILE 0x200UL /* software: pte holds file offset */
#define _PAGE_HPTENOIX 0x200UL /* software: pte HPTE slot unknown */
#endif
#define _PAGE_HASHPTE 0x400UL /* software: pte has an associated HPTE */ #define _PAGE_HASHPTE 0x400UL /* software: pte has an associated HPTE */
#define _PAGE_EXEC 0x800UL /* software: i-cache coherence required */ #define _PAGE_EXEC 0x800UL /* software: i-cache coherence required */
#define _PAGE_SECONDARY 0x8000UL /* software: HPTE is in secondary group */ #define _PAGE_SECONDARY 0x8000UL /* software: HPTE is in secondary group */
...@@ -234,6 +232,7 @@ static inline int pte_write(pte_t pte) { return pte_val(pte) & _PAGE_RW;} ...@@ -234,6 +232,7 @@ static inline int pte_write(pte_t pte) { return pte_val(pte) & _PAGE_RW;}
static inline int pte_exec(pte_t pte) { return pte_val(pte) & _PAGE_EXEC;} static inline int pte_exec(pte_t pte) { return pte_val(pte) & _PAGE_EXEC;}
static inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_DIRTY;} static inline int pte_dirty(pte_t pte) { return pte_val(pte) & _PAGE_DIRTY;}
static inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED;} static inline int pte_young(pte_t pte) { return pte_val(pte) & _PAGE_ACCESSED;}
static inline int pte_file(pte_t pte) { return pte_val(pte) & _PAGE_FILE;}
static inline void pte_uncache(pte_t pte) { pte_val(pte) |= _PAGE_NO_CACHE; } static inline void pte_uncache(pte_t pte) { pte_val(pte) |= _PAGE_NO_CACHE; }
static inline void pte_cache(pte_t pte) { pte_val(pte) &= ~_PAGE_NO_CACHE; } static inline void pte_cache(pte_t pte) { pte_val(pte) &= ~_PAGE_NO_CACHE; }
...@@ -349,11 +348,14 @@ struct vm_area_struct; ...@@ -349,11 +348,14 @@ struct vm_area_struct;
extern void update_mmu_cache(struct vm_area_struct *, unsigned long, pte_t); extern void update_mmu_cache(struct vm_area_struct *, unsigned long, pte_t);
/* Encode and de-code a swap entry */ /* Encode and de-code a swap entry */
#define __swp_type(entry) (((entry).val >> 1) & 0x3f) #define __swp_type(entry) (((entry).val >> 1) & 0x3f)
#define __swp_offset(entry) ((entry).val >> 8) #define __swp_offset(entry) ((entry).val >> 8)
#define __swp_entry(type, offset) ((swp_entry_t) { ((type) << 1) | ((offset) << 8) }) #define __swp_entry(type, offset) ((swp_entry_t) { ((type) << 1) | ((offset) << 8) })
#define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) >> PTE_SHIFT }) #define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) >> PTE_SHIFT })
#define __swp_entry_to_pte(x) ((pte_t) { (x).val << PTE_SHIFT }) #define __swp_entry_to_pte(x) ((pte_t) { (x).val << PTE_SHIFT })
#define pte_to_pgoff(pte) (pte_val(pte) >> PTE_SHIFT)
#define pgoff_to_pte(off) ((pte_t) {((off) << PTE_SHIFT)|_PAGE_FILE})
#define PTE_FILE_MAX_BITS (BITS_PER_LONG - PTE_SHIFT)
/* /*
* kern_addr_valid is intended to indicate whether an address is a valid * kern_addr_valid is intended to indicate whether an address is a valid
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment