提交 cfa76f02 编写于 作者: L Linus Torvalds

Merge branch 'master' of hera.kernel.org:/pub/scm/linux/kernel/git/kyle/parisc-2.6

* 'master' of hera.kernel.org:/pub/scm/linux/kernel/git/kyle/parisc-2.6: (29 commits)
  [PARISC] fix uninitialized variable warning in asm/rtc.h
  [PARISC] Port checkstack.pl to parisc
  [PARISC] Make palo target work when $obj != $src
  [PARISC] Zap unused variable warnings in pci.c
  [PARISC] Fix tests in palo target
  [PARISC] Fix palo target
  [PARISC] Restore palo target
  [PARISC] Attempt to clean up parisc/Makefile
  [PARISC] Fix infinite loop in /proc/iomem
  [PARISC] Quiet sysfs_create_link __must_check warnings in pdc_stable
  [PARISC] Squelch pci_enable_device __must_check warning in superio
  [PARISC] Kill off broken irqstack code
  [PARISC] Remove hardcoded uses of PAGE_SIZE
  [PARISC] Clean up pointless ASM_PAGE_SIZE_DIV use
  [PARISC] Kill off the last vestiges of ASM_PAGE_SIZE
  [PARISC] Kill off ASM_PAGE_SIZE use
  [PARISC] Beautify parisc vmlinux.lds.S
  [PARISC] Clean up a resource_size_t warning in sba_iommu
  [PARISC] Kill incorrect cast warning in unwinder
  [PARISC] Kill zone_to_nid printk warning
  ...

Fixed trivial conflict in include/asm-parisc/tlbflush.h manually
...@@ -19,26 +19,27 @@ ...@@ -19,26 +19,27 @@
NM = sh $(srctree)/arch/parisc/nm NM = sh $(srctree)/arch/parisc/nm
CHECKFLAGS += -D__hppa__=1 CHECKFLAGS += -D__hppa__=1
MACHINE := $(shell uname -m)
ifeq ($(MACHINE),parisc*)
NATIVE := 1
endif
ifdef CONFIG_64BIT ifdef CONFIG_64BIT
CROSS_COMPILE := $(shell if [ -x /usr/bin/hppa64-linux-gnu-gcc ]; then \
echo hppa64-linux-gnu-; else echo hppa64-linux-; fi)
UTS_MACHINE := parisc64 UTS_MACHINE := parisc64
CHECKFLAGS += -D__LP64__=1 -m64 CHECKFLAGS += -D__LP64__=1 -m64
else WIDTH := 64
MACHINE := $(subst 64,,$(shell uname -m)) CROSS_COMPILE := hppa64-linux-gnu-
ifneq ($(MACHINE),parisc) else # 32-bit
CROSS_COMPILE := hppa-linux- WIDTH :=
endif
endif endif
FINAL_LD=$(CROSS_COMPILE)ld --warn-common --warn-section-align # attempt to help out folks who are cross-compiling
ifeq ($(NATIVE),1)
CROSS_COMPILE := hppa$(WIDTH)-linux-
endif
OBJCOPY_FLAGS =-O binary -R .note -R .comment -S OBJCOPY_FLAGS =-O binary -R .note -R .comment -S
ifneq ($(call cc-ifversion, -lt, 0303, "bad"),)
$(error Sorry, GCC v3.3 or above is required.)
endif
cflags-y := -pipe cflags-y := -pipe
# These flags should be implied by an hppa-linux configuration, but they # These flags should be implied by an hppa-linux configuration, but they
...@@ -69,7 +70,7 @@ kernel-y := mm/ kernel/ math-emu/ kernel/init_task.o ...@@ -69,7 +70,7 @@ kernel-y := mm/ kernel/ math-emu/ kernel/init_task.o
kernel-$(CONFIG_HPUX) += hpux/ kernel-$(CONFIG_HPUX) += hpux/
core-y += $(addprefix arch/parisc/, $(kernel-y)) core-y += $(addprefix arch/parisc/, $(kernel-y))
libs-y += arch/parisc/lib/ `$(CC) -print-libgcc-file-name` libs-y += arch/parisc/lib/
drivers-$(CONFIG_OPROFILE) += arch/parisc/oprofile/ drivers-$(CONFIG_OPROFILE) += arch/parisc/oprofile/
...@@ -77,27 +78,27 @@ PALO := $(shell if which palo; then : ; \ ...@@ -77,27 +78,27 @@ PALO := $(shell if which palo; then : ; \
elif [ -x /sbin/palo ]; then echo /sbin/palo; \ elif [ -x /sbin/palo ]; then echo /sbin/palo; \
fi) fi)
PALOCONF := $(shell if [ -f $(src)/palo.conf ]; then echo $(src)/palo.conf; \
else echo $(obj)/palo.conf; \
fi)
palo: vmlinux palo: vmlinux
@if [ -x $PALO ]; then \ @if test ! -x "$(PALO)"; then \
echo 'ERROR: Please install palo first (apt-get install palo)';\ echo 'ERROR: Please install palo first (apt-get install palo)';\
echo 'or build it from source and install it somewhere in your $$PATH';\ echo 'or build it from source and install it somewhere in your $$PATH';\
false; \ false; \
fi fi
@if [ ! -f ./palo.conf ]; then \ @if test ! -f "$(PALOCONF)"; then \
cp arch/parisc/defpalo.conf palo.conf; \ cp $(src)/arch/parisc/defpalo.conf $(obj)/palo.conf; \
echo 'A generic palo config file (./palo.conf) has been created for you.'; \ echo 'A generic palo config file ($(obj)/palo.conf) has been created for you.'; \
echo 'You should check it and re-run "make palo".'; \ echo 'You should check it and re-run "make palo".'; \
echo 'WARNING: the "lifimage" file is now placed in this directory by default!'; \ echo 'WARNING: the "lifimage" file is now placed in this directory by default!'; \
false; \ false; \
fi fi
$(PALO) -f ./palo.conf $(PALO) -f $(PALOCONF)
oldpalo: vmlinux
export TOPDIR=`pwd`; \
unset STRIP LDFLAGS CPP CPPFLAGS AFLAGS CFLAGS CC LD; cd ../palo && make lifimage
# Shorthands for known targets not supported by parisc, use palo as default # Shorthands for known targets not supported by parisc, use vmlinux as default
Image zImage bzImage: palo Image zImage bzImage: vmlinux
kernel_install: vmlinux kernel_install: vmlinux
sh $(src)/arch/parisc/install.sh \ sh $(src)/arch/parisc/install.sh \
...@@ -116,3 +117,12 @@ define archhelp ...@@ -116,3 +117,12 @@ define archhelp
@echo ' (distribution) /sbin/installkernel or' @echo ' (distribution) /sbin/installkernel or'
@echo ' copy to $$(INSTALL_PATH)' @echo ' copy to $$(INSTALL_PATH)'
endef endef
# we require gcc 3.3 or above to compile the kernel
archprepare: checkbin
checkbin:
@if test "$(call cc-version)" -lt "0303"; then \
echo -n "Sorry, GCC v3.3 or above is required to build " ; \
echo "the kernel." ; \
false ; \
fi
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
.import hpux_call_table .import hpux_call_table
.import hpux_syscall_exit,code .import hpux_syscall_exit,code
.align 4096 .align PAGE_SIZE
ENTRY(hpux_gateway_page) ENTRY(hpux_gateway_page)
nop nop
#ifdef CONFIG_64BIT #ifdef CONFIG_64BIT
...@@ -103,5 +103,5 @@ syscall_nosys: ...@@ -103,5 +103,5 @@ syscall_nosys:
ldo -ENOSYS(%r0),%r28 ldo -ENOSYS(%r0),%r28
ENDPROC(hpux_gateway_page) ENDPROC(hpux_gateway_page)
.align 4096 .align PAGE_SIZE
ENTRY(end_hpux_gateway_page) ENTRY(end_hpux_gateway_page)
...@@ -290,9 +290,6 @@ int main(void) ...@@ -290,9 +290,6 @@ int main(void)
DEFINE(ASM_PTE_ENTRY_SIZE, PTE_ENTRY_SIZE); DEFINE(ASM_PTE_ENTRY_SIZE, PTE_ENTRY_SIZE);
DEFINE(ASM_PFN_PTE_SHIFT, PFN_PTE_SHIFT); DEFINE(ASM_PFN_PTE_SHIFT, PFN_PTE_SHIFT);
DEFINE(ASM_PT_INITIAL, PT_INITIAL); DEFINE(ASM_PT_INITIAL, PT_INITIAL);
DEFINE(ASM_PAGE_SIZE, PAGE_SIZE);
DEFINE(ASM_PAGE_SIZE_DIV64, PAGE_SIZE/64);
DEFINE(ASM_PAGE_SIZE_DIV128, PAGE_SIZE/128);
BLANK(); BLANK();
DEFINE(EXCDATA_IP, offsetof(struct exception_data, fault_ip)); DEFINE(EXCDATA_IP, offsetof(struct exception_data, fault_ip));
DEFINE(EXCDATA_SPACE, offsetof(struct exception_data, fault_space)); DEFINE(EXCDATA_SPACE, offsetof(struct exception_data, fault_space));
......
...@@ -98,7 +98,6 @@ ...@@ -98,7 +98,6 @@
* The "get_stack" macros are responsible for determining the * The "get_stack" macros are responsible for determining the
* kernel stack value. * kernel stack value.
* *
* For Faults:
* If sr7 == 0 * If sr7 == 0
* Already using a kernel stack, so call the * Already using a kernel stack, so call the
* get_stack_use_r30 macro to push a pt_regs structure * get_stack_use_r30 macro to push a pt_regs structure
...@@ -110,26 +109,6 @@ ...@@ -110,26 +109,6 @@
* task pointer pointed to by cr30. Set the stack * task pointer pointed to by cr30. Set the stack
* pointer to point to the end of the task structure. * pointer to point to the end of the task structure.
* *
* For Interrupts:
* If sr7 == 0
* Already using a kernel stack, check to see if r30
* is already pointing to the per processor interrupt
* stack. If it is, call the get_stack_use_r30 macro
* to push a pt_regs structure on the stack, and store
* registers there. Otherwise, call get_stack_use_cr31
* to get a pointer to the base of the interrupt stack
* and push a pt_regs structure on that stack.
* else
* Need to set up a kernel stack, so call the
* get_stack_use_cr30 macro to set up a pointer
* to the pt_regs structure contained within the
* task pointer pointed to by cr30. Set the stack
* pointer to point to the end of the task structure.
* N.B: We don't use the interrupt stack for the
* first interrupt from userland, because signals/
* resched's are processed when returning to userland,
* and we can sleep in those cases.
*
* Note that we use shadowed registers for temps until * Note that we use shadowed registers for temps until
* we can save %r26 and %r29. %r26 is used to preserve * we can save %r26 and %r29. %r26 is used to preserve
* %r8 (a shadowed register) which temporarily contained * %r8 (a shadowed register) which temporarily contained
...@@ -652,7 +631,7 @@ ...@@ -652,7 +631,7 @@
.text .text
.align 4096 .align PAGE_SIZE
ENTRY(fault_vector_20) ENTRY(fault_vector_20)
/* First vector is invalid (0) */ /* First vector is invalid (0) */
...@@ -904,7 +883,7 @@ ENDPROC(_switch_to) ...@@ -904,7 +883,7 @@ ENDPROC(_switch_to)
* *
*/ */
.align 4096 .align PAGE_SIZE
ENTRY(syscall_exit_rfi) ENTRY(syscall_exit_rfi)
mfctl %cr30,%r16 mfctl %cr30,%r16
...@@ -1086,23 +1065,13 @@ intr_do_preempt: ...@@ -1086,23 +1065,13 @@ intr_do_preempt:
intr_extint: intr_extint:
CMPIB=,n 0,%r16,1f CMPIB=,n 0,%r16,1f
get_stack_use_cr30 get_stack_use_cr30
b,n 3f b,n 2f
1: 1:
#if 0 /* Interrupt Stack support not working yet! */
mfctl %cr31,%r1
copy %r30,%r17
/* FIXME! depi below has hardcoded idea of interrupt stack size (32k)*/
DEPI 0,31,15,%r17
CMPB=,n %r1,%r17,2f
get_stack_use_cr31
b,n 3f
#endif
2:
get_stack_use_r30 get_stack_use_r30
2:
3:
save_specials %r29 save_specials %r29
virt_map virt_map
save_general %r29 save_general %r29
......
...@@ -95,7 +95,7 @@ $bss_loop: ...@@ -95,7 +95,7 @@ $bss_loop:
1: 1:
stw %r3,0(%r4) stw %r3,0(%r4)
ldo (ASM_PAGE_SIZE >> PxD_VALUE_SHIFT)(%r3),%r3 ldo (PAGE_SIZE >> PxD_VALUE_SHIFT)(%r3),%r3
addib,> -1,%r1,1b addib,> -1,%r1,1b
#if PT_NLEVELS == 3 #if PT_NLEVELS == 3
ldo ASM_PMD_ENTRY_SIZE(%r4),%r4 ldo ASM_PMD_ENTRY_SIZE(%r4),%r4
...@@ -128,10 +128,6 @@ $pgt_fill_loop: ...@@ -128,10 +128,6 @@ $pgt_fill_loop:
/* And the stack pointer too */ /* And the stack pointer too */
ldo THREAD_SZ_ALGN(%r6),%sp ldo THREAD_SZ_ALGN(%r6),%sp
/* And the interrupt stack */
load32 interrupt_stack,%r6
mtctl %r6,%cr31
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
/* Set the smp rendevous address into page zero. /* Set the smp rendevous address into page zero.
** It would be safer to do this in init_smp_config() but ** It would be safer to do this in init_smp_config() but
......
...@@ -55,13 +55,13 @@ ...@@ -55,13 +55,13 @@
* IODC requires 7K byte stack. That leaves 1K byte for os_hpmc. * IODC requires 7K byte stack. That leaves 1K byte for os_hpmc.
*/ */
.align 4096 .align PAGE_SIZE
hpmc_stack: hpmc_stack:
.block 16384 .block 16384
#define HPMC_IODC_BUF_SIZE 0x8000 #define HPMC_IODC_BUF_SIZE 0x8000
.align 4096 .align PAGE_SIZE
hpmc_iodc_buf: hpmc_iodc_buf:
.block HPMC_IODC_BUF_SIZE .block HPMC_IODC_BUF_SIZE
......
...@@ -49,7 +49,6 @@ EXPORT_SYMBOL(init_mm); ...@@ -49,7 +49,6 @@ EXPORT_SYMBOL(init_mm);
* way process stacks are handled. This is done by having a special * way process stacks are handled. This is done by having a special
* "init_task" linker map entry.. * "init_task" linker map entry..
*/ */
unsigned char interrupt_stack[ISTACK_SIZE] __attribute__ ((section("init_istack"), aligned(4096)));
union thread_union init_thread_union union thread_union init_thread_union
__attribute__((aligned(128))) __attribute__((__section__(".data.init_task"))) = __attribute__((aligned(128))) __attribute__((__section__(".data.init_task"))) =
{ INIT_THREAD_INFO(init_task) }; { INIT_THREAD_INFO(init_task) };
......
...@@ -289,7 +289,7 @@ ENTRY(copy_user_page_asm) ...@@ -289,7 +289,7 @@ ENTRY(copy_user_page_asm)
*/ */
ldd 0(%r25), %r19 ldd 0(%r25), %r19
ldi ASM_PAGE_SIZE_DIV128, %r1 ldi (PAGE_SIZE / 128), %r1
ldw 64(%r25), %r0 /* prefetch 1 cacheline ahead */ ldw 64(%r25), %r0 /* prefetch 1 cacheline ahead */
ldw 128(%r25), %r0 /* prefetch 2 */ ldw 128(%r25), %r0 /* prefetch 2 */
...@@ -355,7 +355,7 @@ ENTRY(copy_user_page_asm) ...@@ -355,7 +355,7 @@ ENTRY(copy_user_page_asm)
* use ldd/std on a 32 bit kernel. * use ldd/std on a 32 bit kernel.
*/ */
ldw 0(%r25), %r19 ldw 0(%r25), %r19
ldi ASM_PAGE_SIZE_DIV64, %r1 ldi (PAGE_SIZE / 64), %r1
1: 1:
ldw 4(%r25), %r20 ldw 4(%r25), %r20
...@@ -553,7 +553,7 @@ ENTRY(__clear_user_page_asm) ...@@ -553,7 +553,7 @@ ENTRY(__clear_user_page_asm)
pdtlb 0(%r28) pdtlb 0(%r28)
#ifdef CONFIG_64BIT #ifdef CONFIG_64BIT
ldi ASM_PAGE_SIZE_DIV128, %r1 ldi (PAGE_SIZE / 128), %r1
/* PREFETCH (Write) has not (yet) been proven to help here */ /* PREFETCH (Write) has not (yet) been proven to help here */
/* #define PREFETCHW_OP ldd 256(%0), %r0 */ /* #define PREFETCHW_OP ldd 256(%0), %r0 */
...@@ -578,7 +578,7 @@ ENTRY(__clear_user_page_asm) ...@@ -578,7 +578,7 @@ ENTRY(__clear_user_page_asm)
ldo 128(%r28), %r28 ldo 128(%r28), %r28
#else /* ! CONFIG_64BIT */ #else /* ! CONFIG_64BIT */
ldi ASM_PAGE_SIZE_DIV64, %r1 ldi (PAGE_SIZE / 64), %r1
1: 1:
stw %r0, 0(%r28) stw %r0, 0(%r28)
......
...@@ -122,31 +122,9 @@ EXPORT_SYMBOL($$divI_12); ...@@ -122,31 +122,9 @@ EXPORT_SYMBOL($$divI_12);
EXPORT_SYMBOL($$divI_14); EXPORT_SYMBOL($$divI_14);
EXPORT_SYMBOL($$divI_15); EXPORT_SYMBOL($$divI_15);
extern void __ashrdi3(void);
extern void __ashldi3(void);
extern void __lshrdi3(void);
extern void __muldi3(void);
EXPORT_SYMBOL(__ashrdi3);
EXPORT_SYMBOL(__ashldi3);
EXPORT_SYMBOL(__lshrdi3);
EXPORT_SYMBOL(__muldi3);
asmlinkage void * __canonicalize_funcptr_for_compare(void *); asmlinkage void * __canonicalize_funcptr_for_compare(void *);
EXPORT_SYMBOL(__canonicalize_funcptr_for_compare); EXPORT_SYMBOL(__canonicalize_funcptr_for_compare);
#ifdef CONFIG_64BIT
extern void __divdi3(void);
extern void __udivdi3(void);
extern void __umoddi3(void);
extern void __moddi3(void);
EXPORT_SYMBOL(__divdi3);
EXPORT_SYMBOL(__udivdi3);
EXPORT_SYMBOL(__umoddi3);
EXPORT_SYMBOL(__moddi3);
#endif
#ifndef CONFIG_64BIT #ifndef CONFIG_64BIT
extern void $$dyncall(void); extern void $$dyncall(void);
EXPORT_SYMBOL($$dyncall); EXPORT_SYMBOL($$dyncall);
......
...@@ -569,11 +569,10 @@ static void *fail_alloc_consistent(struct device *dev, size_t size, ...@@ -569,11 +569,10 @@ static void *fail_alloc_consistent(struct device *dev, size_t size,
static void *pa11_dma_alloc_noncoherent(struct device *dev, size_t size, static void *pa11_dma_alloc_noncoherent(struct device *dev, size_t size,
dma_addr_t *dma_handle, gfp_t flag) dma_addr_t *dma_handle, gfp_t flag)
{ {
void *addr = NULL; void *addr;
/* rely on kmalloc to be cacheline aligned */ addr = (void *)__get_free_pages(flag, get_order(size));
addr = kmalloc(size, flag); if (addr)
if(addr)
*dma_handle = (dma_addr_t)virt_to_phys(addr); *dma_handle = (dma_addr_t)virt_to_phys(addr);
return addr; return addr;
...@@ -582,7 +581,7 @@ static void *pa11_dma_alloc_noncoherent(struct device *dev, size_t size, ...@@ -582,7 +581,7 @@ static void *pa11_dma_alloc_noncoherent(struct device *dev, size_t size,
static void pa11_dma_free_noncoherent(struct device *dev, size_t size, static void pa11_dma_free_noncoherent(struct device *dev, size_t size,
void *vaddr, dma_addr_t iova) void *vaddr, dma_addr_t iova)
{ {
kfree(vaddr); free_pages((unsigned long)vaddr, get_order(size));
return; return;
} }
......
...@@ -194,37 +194,13 @@ void __init pcibios_init_bus(struct pci_bus *bus) ...@@ -194,37 +194,13 @@ void __init pcibios_init_bus(struct pci_bus *bus)
pci_write_config_word(dev, PCI_BRIDGE_CONTROL, bridge_ctl); pci_write_config_word(dev, PCI_BRIDGE_CONTROL, bridge_ctl);
} }
/* KLUGE: Link the child and parent resources - generic PCI didn't */
static void
pcibios_link_hba_resources( struct resource *hba_res, struct resource *r)
{
if (!r->parent) {
printk(KERN_EMERG "PCI: resource not parented! [%p-%p]\n",
(void*) r->start, (void*) r->end);
r->parent = hba_res;
/* reverse link is harder *sigh* */
if (r->parent->child) {
if (r->parent->sibling) {
struct resource *next = r->parent->sibling;
while (next->sibling)
next = next->sibling;
next->sibling = r;
} else {
r->parent->sibling = r;
}
} else
r->parent->child = r;
}
}
/* called by drivers/pci/setup-bus.c:pci_setup_bridge(). */ /* called by drivers/pci/setup-bus.c:pci_setup_bridge(). */
void __devinit pcibios_resource_to_bus(struct pci_dev *dev, void __devinit pcibios_resource_to_bus(struct pci_dev *dev,
struct pci_bus_region *region, struct resource *res) struct pci_bus_region *region, struct resource *res)
{ {
struct pci_bus *bus = dev->bus; #ifdef CONFIG_64BIT
struct pci_hba_data *hba = HBA_DATA(bus->bridge->platform_data); struct pci_hba_data *hba = HBA_DATA(dev->bus->bridge->platform_data);
#endif
if (res->flags & IORESOURCE_IO) { if (res->flags & IORESOURCE_IO) {
/* /*
...@@ -243,23 +219,15 @@ void __devinit pcibios_resource_to_bus(struct pci_dev *dev, ...@@ -243,23 +219,15 @@ void __devinit pcibios_resource_to_bus(struct pci_dev *dev,
} }
DBG_RES("pcibios_resource_to_bus(%02x %s [%lx,%lx])\n", DBG_RES("pcibios_resource_to_bus(%02x %s [%lx,%lx])\n",
bus->number, res->flags & IORESOURCE_IO ? "IO" : "MEM", dev->bus->number, res->flags & IORESOURCE_IO ? "IO" : "MEM",
region->start, region->end); region->start, region->end);
/* KLUGE ALERT
** if this resource isn't linked to a "parent", then it seems
** to be a child of the HBA - lets link it in.
*/
pcibios_link_hba_resources(&hba->io_space, bus->resource[0]);
pcibios_link_hba_resources(&hba->lmmio_space, bus->resource[1]);
} }
void pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res, void pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res,
struct pci_bus_region *region) struct pci_bus_region *region)
{ {
#ifdef CONFIG_64BIT #ifdef CONFIG_64BIT
struct pci_bus *bus = dev->bus; struct pci_hba_data *hba = HBA_DATA(dev->bus->bridge->platform_data);
struct pci_hba_data *hba = HBA_DATA(bus->bridge->platform_data);
#endif #endif
if (res->flags & IORESOURCE_MEM) { if (res->flags & IORESOURCE_MEM) {
......
...@@ -82,7 +82,12 @@ static int __cpuinit processor_probe(struct parisc_device *dev) ...@@ -82,7 +82,12 @@ static int __cpuinit processor_probe(struct parisc_device *dev)
unsigned long cpuid; unsigned long cpuid;
struct cpuinfo_parisc *p; struct cpuinfo_parisc *p;
#ifndef CONFIG_SMP #ifdef CONFIG_SMP
if (num_online_cpus() >= NR_CPUS) {
printk(KERN_INFO "num_online_cpus() >= NR_CPUS\n");
return 1;
}
#else
if (boot_cpu_data.cpu_count > 0) { if (boot_cpu_data.cpu_count > 0) {
printk(KERN_INFO "CONFIG_SMP=n ignoring additional CPUs\n"); printk(KERN_INFO "CONFIG_SMP=n ignoring additional CPUs\n");
return 1; return 1;
......
...@@ -432,22 +432,10 @@ smp_cpu_init(int cpunum) ...@@ -432,22 +432,10 @@ smp_cpu_init(int cpunum)
void __init smp_callin(void) void __init smp_callin(void)
{ {
int slave_id = cpu_now_booting; int slave_id = cpu_now_booting;
#if 0
void *istack;
#endif
smp_cpu_init(slave_id); smp_cpu_init(slave_id);
preempt_disable(); preempt_disable();
#if 0 /* NOT WORKING YET - see entry.S */
istack = (void *)__get_free_pages(GFP_KERNEL,ISTACK_ORDER);
if (istack == NULL) {
printk(KERN_CRIT "Failed to allocate interrupt stack for cpu %d\n",slave_id);
BUG();
}
mtctl(istack,31);
#endif
flush_cache_all_local(); /* start with known state */ flush_cache_all_local(); /* start with known state */
flush_tlb_all_local(NULL); flush_tlb_all_local(NULL);
......
...@@ -473,3 +473,10 @@ long sys32_lookup_dcookie(u32 cookie_high, u32 cookie_low, char __user *buf, ...@@ -473,3 +473,10 @@ long sys32_lookup_dcookie(u32 cookie_high, u32 cookie_low, char __user *buf,
return sys_lookup_dcookie((u64)cookie_high << 32 | cookie_low, return sys_lookup_dcookie((u64)cookie_high << 32 | cookie_low,
buf, len); buf, len);
} }
asmlinkage long compat_sys_fallocate(int fd, int mode, u32 offhi, u32 offlo,
u32 lenhi, u32 lenlo)
{
return sys_fallocate(fd, mode, ((loff_t)offhi << 32) | offlo,
((loff_t)lenhi << 32) | lenlo);
}
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include <asm/asm-offsets.h> #include <asm/asm-offsets.h>
#include <asm/unistd.h> #include <asm/unistd.h>
#include <asm/errno.h> #include <asm/errno.h>
#include <asm/page.h>
#include <asm/psw.h> #include <asm/psw.h>
#include <asm/thread_info.h> #include <asm/thread_info.h>
#include <asm/assembly.h> #include <asm/assembly.h>
...@@ -38,7 +39,7 @@ ...@@ -38,7 +39,7 @@
* pointers. * pointers.
*/ */
.align ASM_PAGE_SIZE .align PAGE_SIZE
ENTRY(linux_gateway_page) ENTRY(linux_gateway_page)
/* ADDRESS 0x00 to 0xb0 = 176 bytes / 4 bytes per insn = 44 insns */ /* ADDRESS 0x00 to 0xb0 = 176 bytes / 4 bytes per insn = 44 insns */
...@@ -597,7 +598,7 @@ cas_action: ...@@ -597,7 +598,7 @@ cas_action:
/* Make sure nothing else is placed on this page */ /* Make sure nothing else is placed on this page */
.align ASM_PAGE_SIZE .align PAGE_SIZE
END(linux_gateway_page) END(linux_gateway_page)
ENTRY(end_linux_gateway_page) ENTRY(end_linux_gateway_page)
...@@ -608,7 +609,7 @@ ENTRY(end_linux_gateway_page) ...@@ -608,7 +609,7 @@ ENTRY(end_linux_gateway_page)
.section .rodata,"a" .section .rodata,"a"
.align ASM_PAGE_SIZE .align PAGE_SIZE
/* Light-weight-syscall table */ /* Light-weight-syscall table */
/* Start of lws table. */ /* Start of lws table. */
ENTRY(lws_table) ENTRY(lws_table)
...@@ -617,13 +618,13 @@ ENTRY(lws_table) ...@@ -617,13 +618,13 @@ ENTRY(lws_table)
END(lws_table) END(lws_table)
/* End of lws table */ /* End of lws table */
.align ASM_PAGE_SIZE .align PAGE_SIZE
ENTRY(sys_call_table) ENTRY(sys_call_table)
#include "syscall_table.S" #include "syscall_table.S"
END(sys_call_table) END(sys_call_table)
#ifdef CONFIG_64BIT #ifdef CONFIG_64BIT
.align ASM_PAGE_SIZE .align PAGE_SIZE
ENTRY(sys_call_table64) ENTRY(sys_call_table64)
#define SYSCALL_TABLE_64BIT #define SYSCALL_TABLE_64BIT
#include "syscall_table.S" #include "syscall_table.S"
...@@ -636,7 +637,7 @@ END(sys_call_table64) ...@@ -636,7 +637,7 @@ END(sys_call_table64)
will use this set of locks will use this set of locks
*/ */
.section .data .section .data
.align 4096 .align PAGE_SIZE
ENTRY(lws_lock_start) ENTRY(lws_lock_start)
/* lws locks */ /* lws locks */
.align 16 .align 16
......
...@@ -403,6 +403,7 @@ ...@@ -403,6 +403,7 @@
ENTRY_COMP(signalfd) ENTRY_COMP(signalfd)
ENTRY_COMP(timerfd) ENTRY_COMP(timerfd)
ENTRY_SAME(eventfd) ENTRY_SAME(eventfd)
ENTRY_COMP(fallocate) /* 305 */
/* Nothing yet */ /* Nothing yet */
......
...@@ -189,16 +189,14 @@ static struct clocksource clocksource_cr16 = { ...@@ -189,16 +189,14 @@ static struct clocksource clocksource_cr16 = {
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
int update_cr16_clocksource(void) int update_cr16_clocksource(void)
{ {
int change = 0;
/* since the cr16 cycle counters are not synchronized across CPUs, /* since the cr16 cycle counters are not synchronized across CPUs,
we'll check if we should switch to a safe clocksource: */ we'll check if we should switch to a safe clocksource: */
if (clocksource_cr16.rating != 0 && num_online_cpus() > 1) { if (clocksource_cr16.rating != 0 && num_online_cpus() > 1) {
clocksource_change_rating(&clocksource_cr16, 0); clocksource_change_rating(&clocksource_cr16, 0);
change = 1; return 1;
} }
return change; return 0;
} }
#else #else
int update_cr16_clocksource(void) int update_cr16_clocksource(void)
......
...@@ -209,8 +209,8 @@ static int unwind_init(void) ...@@ -209,8 +209,8 @@ static int unwind_init(void)
static int unwind_special(struct unwind_frame_info *info, unsigned long pc, int frame_size) static int unwind_special(struct unwind_frame_info *info, unsigned long pc, int frame_size)
{ {
void handle_interruption(int, struct pt_regs *); extern void handle_interruption(int, struct pt_regs *);
static unsigned long *hi = (unsigned long)&handle_interruption; static unsigned long *hi = (unsigned long *)&handle_interruption;
if (pc == get_func_addr(hi)) { if (pc == get_func_addr(hi)) {
struct pt_regs *regs = (struct pt_regs *)(info->sp - frame_size - PT_SZ_ALGN); struct pt_regs *regs = (struct pt_regs *)(info->sp - frame_size - PT_SZ_ALGN);
......
此差异已折叠。
...@@ -4,4 +4,4 @@ ...@@ -4,4 +4,4 @@
lib-y := lusercopy.o bitops.o checksum.o io.o memset.o fixup.o memcpy.o lib-y := lusercopy.o bitops.o checksum.o io.o memset.o fixup.o memcpy.o
obj-y := iomap.o obj-y := libgcc/ milli/ iomap.o
obj-y := __ashldi3.o __ashrdi3.o __clzsi2.o __divdi3.o __divsi3.o \
__lshrdi3.o __moddi3.o __modsi3.o __udivdi3.o \
__udivmoddi4.o __udivmodsi4.o __udivsi3.o \
__umoddi3.o __umodsi3.o __muldi3.o __umulsidi3.o
#include "libgcc.h"
u64 __ashldi3(u64 v, int cnt)
{
int c = cnt & 31;
u32 vl = (u32) v;
u32 vh = (u32) (v >> 32);
if (cnt & 32) {
vh = (vl << c);
vl = 0;
} else {
vh = (vh << c) + (vl >> (32 - c));
vl = (vl << c);
}
return ((u64) vh << 32) + vl;
}
EXPORT_SYMBOL(__ashldi3);
#include "libgcc.h"
u64 __ashrdi3(u64 v, int cnt)
{
int c = cnt & 31;
u32 vl = (u32) v;
u32 vh = (u32) (v >> 32);
if (cnt & 32) {
vl = ((s32) vh >> c);
vh = (s32) vh >> 31;
} else {
vl = (vl >> c) + (vh << (32 - c));
vh = ((s32) vh >> c);
}
return ((u64) vh << 32) + vl;
}
EXPORT_SYMBOL(__ashrdi3);
#include "libgcc.h"
u32 __clzsi2(u32 v)
{
int p = 31;
if (v & 0xffff0000) {
p -= 16;
v >>= 16;
}
if (v & 0xff00) {
p -= 8;
v >>= 8;
}
if (v & 0xf0) {
p -= 4;
v >>= 4;
}
if (v & 0xc) {
p -= 2;
v >>= 2;
}
if (v & 0x2) {
p -= 1;
v >>= 1;
}
return p;
}
EXPORT_SYMBOL(__clzsi2);
#include "libgcc.h"
s64 __divdi3(s64 num, s64 den)
{
int minus = 0;
s64 v;
if (num < 0) {
num = -num;
minus = 1;
}
if (den < 0) {
den = -den;
minus ^= 1;
}
v = __udivmoddi4(num, den, NULL);
if (minus)
v = -v;
return v;
}
EXPORT_SYMBOL(__divdi3);
#include "libgcc.h"
s32 __divsi3(s32 num, s32 den)
{
int minus = 0;
s32 v;
if (num < 0) {
num = -num;
minus = 1;
}
if (den < 0) {
den = -den;
minus ^= 1;
}
v = __udivmodsi4(num, den, NULL);
if (minus)
v = -v;
return v;
}
EXPORT_SYMBOL(__divsi3);
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
obj-y := dyncall.o divI.o divU.o remI.o remU.o div_const.o mulI.o
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
include include/asm-generic/Kbuild.asm include include/asm-generic/Kbuild.asm
unifdef-y += pdc.h
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册