Commit cfa76f02 authored by Linus Torvalds's avatar 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
parents 093faa1d 7210c678
...@@ -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
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -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);
......
This diff is collapsed.
...@@ -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);
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
obj-y := dyncall.o divI.o divU.o remI.o remU.o div_const.o mulI.o
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
include include/asm-generic/Kbuild.asm include include/asm-generic/Kbuild.asm
unifdef-y += pdc.h
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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