Commit 8b24ea63 authored by Anton Blanchard's avatar Anton Blanchard

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

into samba.org:/scratch/anton/sfr
parents baf1aaad 96ee7da2
...@@ -12,12 +12,11 @@ ...@@ -12,12 +12,11 @@
#include "ppc32-types.h" #include "ppc32-types.h"
#include "zlib.h" #include "zlib.h"
#include <linux/elf.h> #include <linux/elf.h>
#include <linux/string.h>
#include <asm/processor.h> #include <asm/processor.h>
#include <asm/page.h> #include <asm/page.h>
#include <asm/bootinfo.h> #include <asm/bootinfo.h>
void memmove(void *dst, void *im, int len);
extern void *finddevice(const char *); extern void *finddevice(const char *);
extern int getprop(void *, const char *, void *, int); extern int getprop(void *, const char *, void *, int);
extern void printk(char *fmt, ...); extern void printk(char *fmt, ...);
......
...@@ -72,6 +72,7 @@ extern void init_ras_IRQ(void); ...@@ -72,6 +72,7 @@ extern void init_ras_IRQ(void);
extern void find_and_init_phbs(void); extern void find_and_init_phbs(void);
extern void pSeries_pcibios_fixup(void); extern void pSeries_pcibios_fixup(void);
extern void pSeries_pcibios_fixup_bus(struct pci_bus *bus);
extern void iSeries_pcibios_fixup(void); extern void iSeries_pcibios_fixup(void);
extern void pSeries_get_rtc_time(struct rtc_time *rtc_time); extern void pSeries_get_rtc_time(struct rtc_time *rtc_time);
...@@ -245,6 +246,7 @@ chrp_init(unsigned long r3, unsigned long r4, unsigned long r5, ...@@ -245,6 +246,7 @@ chrp_init(unsigned long r3, unsigned long r4, unsigned long r5,
#ifndef CONFIG_PPC_ISERIES #ifndef CONFIG_PPC_ISERIES
ppc_md.pcibios_fixup = pSeries_pcibios_fixup; ppc_md.pcibios_fixup = pSeries_pcibios_fixup;
ppc_md.pcibios_fixup_bus = pSeries_pcibios_fixup_bus;
#else #else
ppc_md.pcibios_fixup = NULL; ppc_md.pcibios_fixup = NULL;
// ppc_md.pcibios_fixup = iSeries_pcibios_fixup; // ppc_md.pcibios_fixup = iSeries_pcibios_fixup;
......
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/proc_fs.h> #include <linux/proc_fs.h>
#include <linux/bootmem.h> #include <linux/bootmem.h>
#include <linux/mm.h>
#include <asm/paca.h> #include <asm/paca.h>
#include <asm/processor.h> #include <asm/processor.h>
#include <asm/naca.h> #include <asm/naca.h>
......
...@@ -344,8 +344,8 @@ irq_recheck: ...@@ -344,8 +344,8 @@ irq_recheck:
recheck: recheck:
mfmsr r10 /* Get current interrupt state */ mfmsr r10 /* Get current interrupt state */
li r4,0 li r4,0
ori r4,r4,MSR_EE|MSR_RI ori r4,r4,MSR_EE
andc r10,r10,r4 /* clear MSR_EE and MSR_RI */ andc r10,r10,r4 /* clear MSR_EE */
mtmsrd r10,1 /* Update machine state */ mtmsrd r10,1 /* Update machine state */
#ifdef CONFIG_PPC_ISERIES #ifdef CONFIG_PPC_ISERIES
...@@ -396,7 +396,7 @@ restore: ...@@ -396,7 +396,7 @@ restore:
mfmsr r0 mfmsr r0
li r2, MSR_RI li r2, MSR_RI
andc r0,r0,r2 andc r0,r0,r2
mtmsrd r0 mtmsrd r0,1
ld r0,_MSR(r1) ld r0,_MSR(r1)
mtspr SRR1,r0 mtspr SRR1,r0
...@@ -422,7 +422,7 @@ restore: ...@@ -422,7 +422,7 @@ restore:
/* Note: this must change if we start using the TIF_NOTIFY_RESUME bit */ /* Note: this must change if we start using the TIF_NOTIFY_RESUME bit */
do_work: do_work:
/* Enable interrupts */ /* Enable interrupts */
ori r10,r10,MSR_EE|MSR_RI ori r10,r10,MSR_EE
mtmsrd r10,1 mtmsrd r10,1
andi. r0,r3,_TIF_NEED_RESCHED andi. r0,r3,_TIF_NEED_RESCHED
......
...@@ -562,7 +562,7 @@ fast_exception_return: ...@@ -562,7 +562,7 @@ fast_exception_return:
mfmsr r20 mfmsr r20
li r21, MSR_RI li r21, MSR_RI
andc r20,r20,r21 andc r20,r20,r21
mtmsrd r20 mtmsrd r20,1
mtspr SRR1,r23 mtspr SRR1,r23
mtspr SRR0,r22 mtspr SRR0,r22
...@@ -989,7 +989,7 @@ _GLOBAL(do_stab_bolted) ...@@ -989,7 +989,7 @@ _GLOBAL(do_stab_bolted)
mfmsr r22 mfmsr r22
li r23, MSR_RI li r23, MSR_RI
andc r22,r22,r23 andc r22,r22,r23
mtmsrd r22 mtmsrd r22,1
ld r22,EX_SRR0(r21) /* Get SRR0 from exc. frame */ ld r22,EX_SRR0(r21) /* Get SRR0 from exc. frame */
ld r23,EX_SRR1(r21) /* Get SRR1 from exc. frame */ ld r23,EX_SRR1(r21) /* Get SRR1 from exc. frame */
...@@ -1094,7 +1094,7 @@ SLB_NUM_ENTRIES = 64 ...@@ -1094,7 +1094,7 @@ SLB_NUM_ENTRIES = 64
mfmsr r22 mfmsr r22
li r23, MSR_RI li r23, MSR_RI
andc r22,r22,r23 andc r22,r22,r23
mtmsrd r22 mtmsrd r22,1
ld r22,EX_SRR0(r21) /* Get SRR0 from exc. frame */ ld r22,EX_SRR0(r21) /* Get SRR0 from exc. frame */
ld r23,EX_SRR1(r21) /* Get SRR1 from exc. frame */ ld r23,EX_SRR1(r21) /* Get SRR1 from exc. frame */
......
...@@ -398,81 +398,6 @@ handle_irq_event(int irq, struct pt_regs *regs, struct irqaction *action) ...@@ -398,81 +398,6 @@ handle_irq_event(int irq, struct pt_regs *regs, struct irqaction *action)
local_irq_disable(); local_irq_disable();
} }
#ifdef CONFIG_SMP
extern unsigned long irq_affinity [NR_IRQS];
typedef struct {
unsigned long cpu;
unsigned long timestamp;
} ____cacheline_aligned irq_balance_t;
static irq_balance_t irq_balance[NR_IRQS] __cacheline_aligned
= { [ 0 ... NR_IRQS-1 ] = { 0, 0 } };
#define IDLE_ENOUGH(cpu,now) \
(idle_cpu(cpu) && ((now) - irq_stat[(cpu)].idle_timestamp > 1))
#define IRQ_ALLOWED(cpu,allowed_mask) \
((1UL << cpu) & (allowed_mask))
#define IRQ_BALANCE_INTERVAL (HZ/50)
static unsigned long move(unsigned long curr_cpu, unsigned long allowed_mask,
unsigned long now, int direction)
{
int search_idle = 1;
int cpu = curr_cpu;
goto inside;
do {
if (unlikely(cpu == curr_cpu))
search_idle = 0;
inside:
if (direction == 1) {
cpu++;
if (cpu >= NR_CPUS)
cpu = 0;
} else {
cpu--;
if (cpu == -1)
cpu = NR_CPUS-1;
}
} while (!cpu_online(cpu) || !IRQ_ALLOWED(cpu,allowed_mask) ||
(search_idle && !IDLE_ENOUGH(cpu,now)));
return cpu;
}
static inline void balance_irq(int irq)
{
irq_balance_t *entry = irq_balance + irq;
unsigned long now = jiffies;
if (unlikely(time_after(now, entry->timestamp + IRQ_BALANCE_INTERVAL))) {
unsigned long allowed_mask;
unsigned int new_cpu;
unsigned long random_number;
if (!irq_desc[irq].handler->set_affinity)
return;
random_number = mftb();
random_number &= 1;
allowed_mask = cpu_online_map & irq_affinity[irq];
entry->timestamp = now;
new_cpu = move(entry->cpu, allowed_mask, now, random_number);
if (entry->cpu != new_cpu) {
entry->cpu = new_cpu;
irq_desc[irq].handler->set_affinity(irq, 1UL << new_cpu);
}
}
}
#else
#define balance_irq(irq) do { } while (0)
#endif
/* /*
* Eventually, this should take an array of interrupts and an array size * Eventually, this should take an array of interrupts and an array size
* so it can dispatch multiple interrupts. * so it can dispatch multiple interrupts.
...@@ -484,10 +409,6 @@ void ppc_irq_dispatch_handler(struct pt_regs *regs, int irq) ...@@ -484,10 +409,6 @@ void ppc_irq_dispatch_handler(struct pt_regs *regs, int irq)
int cpu = smp_processor_id(); int cpu = smp_processor_id();
irq_desc_t *desc = irq_desc + irq; irq_desc_t *desc = irq_desc + irq;
/* XXX This causes bad performance and lockups on XICS - Anton */
if (naca->interrupt_controller == IC_OPEN_PIC)
balance_irq(irq);
kstat_cpu(cpu).irqs[irq]++; kstat_cpu(cpu).irqs[irq]++;
spin_lock(&desc->lock); spin_lock(&desc->lock);
ack_irq(irq); ack_irq(irq);
......
...@@ -557,7 +557,7 @@ _GLOBAL(sys_call_table32) ...@@ -557,7 +557,7 @@ _GLOBAL(sys_call_table32)
.llong .sys32_umount .llong .sys32_umount
.llong .sys_ni_syscall /* old lock syscall */ .llong .sys_ni_syscall /* old lock syscall */
.llong .sys32_ioctl .llong .sys32_ioctl
.llong .sys32_fcntl /* 55 */ .llong .compat_sys_fcntl /* 55 */
.llong .sys_ni_syscall /* old mpx syscall */ .llong .sys_ni_syscall /* old mpx syscall */
.llong .sys32_setpgid .llong .sys32_setpgid
.llong .sys_ni_syscall /* old ulimit syscall */ .llong .sys_ni_syscall /* old ulimit syscall */
...@@ -706,7 +706,7 @@ _GLOBAL(sys_call_table32) ...@@ -706,7 +706,7 @@ _GLOBAL(sys_call_table32)
.llong .sys_ni_syscall /* reserved for MacOnLinux */ .llong .sys_ni_syscall /* reserved for MacOnLinux */
.llong .sys_getdents64 .llong .sys_getdents64
.llong .sys_pivot_root .llong .sys_pivot_root
.llong .sys32_fcntl64 .llong .compat_sys_fcntl64
.llong .sys_madvise /* 205 */ .llong .sys_madvise /* 205 */
.llong .sys_mincore .llong .sys_mincore
.llong .sys_gettid .llong .sys_gettid
......
This diff is collapsed.
...@@ -49,7 +49,6 @@ static void fixup_windbond_82c105(struct pci_dev* dev); ...@@ -49,7 +49,6 @@ static void fixup_windbond_82c105(struct pci_dev* dev);
void fixup_resources(struct pci_dev* dev); void fixup_resources(struct pci_dev* dev);
void iSeries_pcibios_init(void); void iSeries_pcibios_init(void);
void pSeries_pcibios_init(void);
struct pci_controller* hose_head; struct pci_controller* hose_head;
struct pci_controller** hose_tail = &hose_head; struct pci_controller** hose_tail = &hose_head;
...@@ -363,16 +362,33 @@ pcibios_assign_resources(void) ...@@ -363,16 +362,33 @@ pcibios_assign_resources(void)
* Allocate pci_controller(phb) initialized common variables. * Allocate pci_controller(phb) initialized common variables.
*/ */
struct pci_controller * __init struct pci_controller * __init
pci_alloc_pci_controller(char *model, enum phb_types controller_type) pci_alloc_pci_controller(enum phb_types controller_type)
{ {
struct pci_controller *hose; struct pci_controller *hose;
PPCDBG(PPCDBG_PHBINIT, "PCI: Allocate pci_controller for %s\n",model); char *model;
hose = (struct pci_controller *)alloc_bootmem(sizeof(struct pci_controller)); hose = (struct pci_controller *)alloc_bootmem(sizeof(struct pci_controller));
if(hose == NULL) { if(hose == NULL) {
printk(KERN_ERR "PCI: Allocate pci_controller failed.\n"); printk(KERN_ERR "PCI: Allocate pci_controller failed.\n");
return NULL; return NULL;
} }
memset(hose, 0, sizeof(struct pci_controller)); memset(hose, 0, sizeof(struct pci_controller));
switch(controller_type) {
case phb_type_python:
model = "PHB PY";
break;
case phb_type_speedwagon:
model = "PHB SW";
break;
case phb_type_winnipeg:
model = "PHB WP";
break;
default:
model = "PHB UK";
break;
}
if(strlen(model) < 8) if(strlen(model) < 8)
strcpy(hose->what,model); strcpy(hose->what,model);
else else
...@@ -393,9 +409,7 @@ pcibios_init(void) ...@@ -393,9 +409,7 @@ pcibios_init(void)
struct pci_bus *bus; struct pci_bus *bus;
int next_busno; int next_busno;
#ifndef CONFIG_PPC_ISERIES #ifdef CONFIG_PPC_ISERIES
pSeries_pcibios_init();
#else
iSeries_pcibios_init(); iSeries_pcibios_init();
#endif #endif
...@@ -450,54 +464,7 @@ subsys_initcall(pcibios_init); ...@@ -450,54 +464,7 @@ subsys_initcall(pcibios_init);
void __init pcibios_fixup_bus(struct pci_bus *bus) void __init pcibios_fixup_bus(struct pci_bus *bus)
{ {
#ifndef CONFIG_PPC_ISERIES if (ppc_md.pcibios_fixup_bus)
struct pci_controller *phb = PCI_GET_PHB_PTR(bus);
struct resource *res;
int i;
if (bus->parent == NULL) {
/* This is a host bridge - fill in its resources */
phb->bus = bus;
bus->resource[0] = res = &phb->io_resource;
if (!res->flags)
BUG(); /* No I/O resource for this PHB? */
for (i = 0; i < 3; ++i) {
res = &phb->mem_resources[i];
if (!res->flags) {
if (i == 0)
BUG(); /* No memory resource for this PHB? */
}
bus->resource[i+1] = res;
}
} else {
/* This is a subordinate bridge */
pci_read_bridge_bases(bus);
for (i = 0; i < 4; ++i) {
if ((res = bus->resource[i]) == NULL)
continue;
if (!res->flags)
continue;
if (res == pci_find_parent_resource(bus->self, res)) {
/* Transparent resource -- don't try to "fix" it. */
continue;
}
if (res->flags & IORESOURCE_IO) {
unsigned long offset = (unsigned long)phb->io_base_virt - pci_io_base;
res->start += offset;
res->end += offset;
} else if (phb->pci_mem_offset
&& (res->flags & IORESOURCE_MEM)) {
if (res->start < phb->pci_mem_offset) {
res->start += phb->pci_mem_offset;
res->end += phb->pci_mem_offset;
}
}
}
}
#endif
if ( ppc_md.pcibios_fixup_bus )
ppc_md.pcibios_fixup_bus(bus); ppc_md.pcibios_fixup_bus(bus);
} }
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
extern unsigned long isa_io_base; extern unsigned long isa_io_base;
extern struct pci_controller* pci_alloc_pci_controller(char *model, enum phb_types controller_type); extern struct pci_controller* pci_alloc_pci_controller(enum phb_types controller_type);
extern struct pci_controller* pci_find_hose_for_OF_device(struct device_node* node); extern struct pci_controller* pci_find_hose_for_OF_device(struct device_node* node);
extern struct pci_controller* hose_head; extern struct pci_controller* hose_head;
......
...@@ -2040,11 +2040,11 @@ prom_bi_rec_verify(struct bi_record *bi_recs) ...@@ -2040,11 +2040,11 @@ prom_bi_rec_verify(struct bi_record *bi_recs)
if ( bi_recs == NULL || bi_recs->tag != BI_FIRST ) if ( bi_recs == NULL || bi_recs->tag != BI_FIRST )
return NULL; return NULL;
last = (struct bi_record *)bi_recs->data[0]; last = (struct bi_record *)(long)bi_recs->data[0];
if ( last == NULL || last->tag != BI_LAST ) if ( last == NULL || last->tag != BI_LAST )
return NULL; return NULL;
first = (struct bi_record *)last->data[0]; first = (struct bi_record *)(long)last->data[0];
if ( first == NULL || first != bi_recs ) if ( first == NULL || first != bi_recs )
return NULL; return NULL;
......
...@@ -25,287 +25,3 @@ _GLOBAL(ppc32_lseek) ...@@ -25,287 +25,3 @@ _GLOBAL(ppc32_lseek)
extsw r4,r4 /* sign extend off_t offset parm */ extsw r4,r4 /* sign extend off_t offset parm */
b .sys_lseek b .sys_lseek
_GLOBAL(compat_sys_socketcall) /* r3=call, r4=args */
cmpwi r3, 1
blt- .do_einval
cmpwi r3, 17
bgt- .do_einval
subi r3, r3, 1 /* index into socketcall_table vectors and jmp */
sldi r3, r3, 3 /* each entry is 8 bytes */
LOADADDR(r10,.socketcall_table_begin)
ldx r10, r10, r3
mtctr r10
bctr
/* Socket function vectored fix ups for 32 bit */
_STATIC(do_sys_socket) /* sys_socket(int, int, int) */
mr r10,r4
1: lwa r3,0(r10)
2: lwa r4,4(r10)
3: lwa r5,8(r10)
b .sys_socket
.section __ex_table,"a"
.align 3
.llong 1b,.do_efault
.llong 2b,.do_efault
.llong 3b,.do_efault
.previous
_STATIC(do_sys_bind) /* sys_bind(int fd, struct sockaddr *, int) */
mr r10,r4
1: lwa r3,0(r10)
2: lwz r4,4(r10)
3: lwa r5,8(r10)
b .sys_bind
.section __ex_table,"a"
.align 3
.llong 1b,.do_efault
.llong 2b,.do_efault
.llong 3b,.do_efault
.previous
_STATIC(do_sys_connect) /* sys_connect(int, struct sockaddr *, int) */
mr r10,r4
1: lwa r3,0(r10)
2: lwz r4,4(r10)
3: lwa r5,8(r10)
b .sys_connect
.section __ex_table,"a"
.align 3
.llong 1b,.do_efault
.llong 2b,.do_efault
.llong 3b,.do_efault
.previous
_STATIC(do_sys_listen) /* sys_listen(int, int) */
mr r10,r4
1: lwa r3,0(r10)
2: lwa r4,4(r10)
b .sys_listen
.section __ex_table,"a"
.align 3
.llong 1b,.do_efault
.llong 2b,.do_efault
.previous
_STATIC(do_sys_accept) /* sys_accept(int, struct sockaddr *, int *) */
mr r10,r4
1: lwa r3,0(r10)
2: lwz r4,4(r10)
3: lwz r5,8(r10)
b .sys_accept
.section __ex_table,"a"
.align 3
.llong 1b,.do_efault
.llong 2b,.do_efault
.llong 3b,.do_efault
.previous
_STATIC(do_sys_getsockname) /* sys_getsockname(int, struct sockaddr *, int *) */
mr r10,r4
1: lwa r3,0(r10)
2: lwz r4,4(r10)
3: lwz r5,8(r10)
b .sys_getsockname
.section __ex_table,"a"
.align 3
.llong 1b,.do_efault
.llong 2b,.do_efault
.llong 3b,.do_efault
.previous
_STATIC(do_sys_getpeername) /* sys_getpeername(int, struct sockaddr *, int *) */
mr r10,r4
1: lwa r3,0(r10)
2: lwz r4,4(r10)
3: lwz r5,8(r10)
b .sys_getpeername
.section __ex_table,"a"
.align 3
.llong 1b,.do_efault
.llong 2b,.do_efault
.llong 3b,.do_efault
.previous
_STATIC(do_sys_socketpair) /* sys_socketpair(int, int, int, int *) */
mr r10,r4
1: lwa r3,0(r10)
2: lwa r4,4(r10)
3: lwa r5,8(r10)
4: lwz r6,12(r10)
b .sys_socketpair
.section __ex_table,"a"
.align 3
.llong 1b,.do_efault
.llong 2b,.do_efault
.llong 3b,.do_efault
.llong 4b,.do_efault
.previous
_STATIC(do_sys_send) /* sys_send(int, void *, size_t, unsigned int) */
mr r10,r4
1: lwa r3,0(r10)
2: lwz r4,4(r10)
3: lwz r5,8(r10)
4: lwz r6,12(r10)
b .sys_send
.section __ex_table,"a"
.align 3
.llong 1b,.do_efault
.llong 2b,.do_efault
.llong 3b,.do_efault
.llong 4b,.do_efault
.previous
_STATIC(do_sys_recv) /* sys_recv(int, void *, size_t, unsigned int) */
mr r10,r4
1: lwa r3,0(r10)
2: lwz r4,4(r10)
3: lwz r5,8(r10)
4: lwz r6,12(r10)
b .sys_recv
.section __ex_table,"a"
.align 3
.llong 1b,.do_efault
.llong 2b,.do_efault
.llong 3b,.do_efault
.llong 4b,.do_efault
.previous
_STATIC(do_sys_sendto) /* sys32_sendto(int, u32, compat_size_t, unsigned int, u32, int) */
mr r10,r4
1: lwa r3,0(r10)
2: lwz r4,4(r10)
3: lwz r5,8(r10)
4: lwz r6,12(r10)
5: lwz r7,16(r10)
6: lwz r8,20(r10)
b .sys_sendto
.section __ex_table,"a"
.align 3
.llong 1b,.do_efault
.llong 2b,.do_efault
.llong 3b,.do_efault
.llong 4b,.do_efault
.llong 5b,.do_efault
.llong 6b,.do_efault
.previous
_STATIC(do_sys_recvfrom) /* sys32_recvfrom(int, u32, compat_size_t, unsigned int, u32, u32) */
mr r10,r4
1: lwa r3,0(r10)
2: lwz r4,4(r10)
3: lwz r5,8(r10)
4: lwz r6,12(r10)
5: lwz r7,16(r10)
6: lwz r8,20(r10)
b .sys_recvfrom
.section __ex_table,"a"
.align 3
.llong 1b,.do_efault
.llong 2b,.do_efault
.llong 3b,.do_efault
.llong 4b,.do_efault
.llong 5b,.do_efault
.llong 6b,.do_efault
.previous
_STATIC(do_sys_shutdown) /* sys_shutdown(int, int) */
mr r10,r4
1: lwa r3,0(r10)
2: lwa r4,4(r10)
b .sys_shutdown
.section __ex_table,"a"
.align 3
.llong 1b,.do_efault
.llong 2b,.do_efault
.previous
_STATIC(do_sys_setsockopt) /* compat_sys_setsockopt(int, int, int, char *, int) */
mr r10,r4
1: lwa r3,0(r10)
2: lwa r4,4(r10)
3: lwa r5,8(r10)
4: lwz r6,12(r10)
5: lwa r7,16(r10)
b .compat_sys_setsockopt
.section __ex_table,"a"
.align 3
.llong 1b,.do_efault
.llong 2b,.do_efault
.llong 3b,.do_efault
.llong 4b,.do_efault
.llong 5b,.do_efault
.previous
_STATIC(do_sys_getsockopt) /* compat_sys_getsockopt(int, int, int, u32, u32) */
mr r10,r4
1: lwa r3,0(r10)
2: lwa r4,4(r10)
3: lwa r5,8(r10)
4: lwz r6,12(r10)
5: lwz r7,16(r10)
b .compat_sys_getsockopt
.section __ex_table,"a"
.align 3
.llong 1b,.do_efault
.llong 2b,.do_efault
.llong 3b,.do_efault
.llong 4b,.do_efault
.llong 5b,.do_efault
.previous
_STATIC(do_sys_sendmsg) /* compat_sys_sendmsg(int, struct compat_msghdr *, unsigned int) */
mr r10,r4
1: lwa r3,0(r10)
2: lwz r4,4(r10)
3: lwa r5,8(r10)
b .compat_sys_sendmsg
.section __ex_table,"a"
.align 3
.llong 1b,.do_efault
.llong 2b,.do_efault
.llong 3b,.do_efault
.previous
_STATIC(do_sys_recvmsg) /* compat_sys_recvmsg(int, struct compat_msghdr *, unsigned int) */
mr r10,r4
1: lwa r3,0(r10)
2: lwz r4,4(r10)
3: lwa r5,8(r10)
b .compat_sys_recvmsg
.section __ex_table,"a"
.align 3
.llong 1b,.do_efault
.llong 2b,.do_efault
.llong 3b,.do_efault
.previous
_STATIC(do_einval)
li r3,-EINVAL
blr
_STATIC(do_efault)
li r3,-EFAULT
blr
.balign 8
_GLOBAL(socketcall_table_begin)
.llong .do_sys_socket
.llong .do_sys_bind
.llong .do_sys_connect
.llong .do_sys_listen
.llong .do_sys_accept
.llong .do_sys_getsockname
.llong .do_sys_getpeername
.llong .do_sys_socketpair
.llong .do_sys_send
.llong .do_sys_recv
.llong .do_sys_sendto
.llong .do_sys_recvfrom
.llong .do_sys_shutdown
.llong .do_sys_setsockopt
.llong .do_sys_getsockopt
.llong .do_sys_sendmsg
.llong .do_sys_recvmsg
_GLOBAL(socketcall_table_end)
...@@ -246,32 +246,6 @@ asmlinkage long sys32_writev(int fd, struct compat_iovec *vector, u32 count) ...@@ -246,32 +246,6 @@ asmlinkage long sys32_writev(int fd, struct compat_iovec *vector, u32 count)
return ret; return ret;
} }
extern asmlinkage long sys_fcntl(unsigned int fd, unsigned int cmd, unsigned long arg);
asmlinkage long sys32_fcntl(unsigned int fd, unsigned int cmd, unsigned long arg)
{
switch (cmd) {
case F_GETLK:
case F_SETLK:
case F_SETLKW:
{
struct flock f;
mm_segment_t old_fs;
long ret;
if(get_compat_flock(&f, (struct compat_flock *)arg))
return -EFAULT;
old_fs = get_fs(); set_fs (KERNEL_DS);
ret = sys_fcntl(fd, cmd, (unsigned long)&f);
set_fs (old_fs);
if(put_compat_flock(&f, (struct compat_flock *)arg))
return -EFAULT;
return ret;
}
default:
return sys_fcntl(fd, cmd, (unsigned long)arg);
}
}
struct ncp_mount_data32_v3 { struct ncp_mount_data32_v3 {
int version; int version;
unsigned int ncp_fd; unsigned int ncp_fd;
...@@ -2848,13 +2822,6 @@ asmlinkage long sys32_umount(char * name, u32 flags) ...@@ -2848,13 +2822,6 @@ asmlinkage long sys32_umount(char * name, u32 flags)
return sys_umount(name, (int)flags); return sys_umount(name, (int)flags);
} }
asmlinkage long sys32_fcntl64(unsigned int fd, unsigned int cmd, unsigned long arg)
{
if (cmd >= F_GETLK64 && cmd <= F_SETLKW64)
return sys_fcntl(fd, cmd + F_GETLK - F_GETLK64, arg);
return sys32_fcntl(fd, cmd, arg);
}
struct __sysctl_args32 { struct __sysctl_args32 {
u32 name; u32 name;
int nlen; int nlen;
......
...@@ -1381,16 +1381,23 @@ mread(unsigned long adrs, void *buf, int size) ...@@ -1381,16 +1381,23 @@ mread(unsigned long adrs, void *buf, int size)
char *p, *q; char *p, *q;
n = 0; n = 0;
if( setjmp(bus_error_jmp) == 0 ){ if (setjmp(bus_error_jmp) == 0) {
debugger_fault_handler = handle_fault; debugger_fault_handler = handle_fault;
sync(); sync();
p = (char *) adrs; p = (char *)adrs;
q = (char *) buf; q = (char *)buf;
switch (size) { switch (size) {
case 2: *(short *)q = *(short *)p; break; case 2:
case 4: *(int *)q = *(int *)p; break; *(short *)q = *(short *)p;
break;
case 4:
*(int *)q = *(int *)p;
break;
case 8:
*(long *)q = *(long *)p;
break;
default: default:
for( ; n < size; ++n ) { for( ; n < size; ++n) {
*q++ = *p++; *q++ = *p++;
sync(); sync();
} }
...@@ -1411,16 +1418,23 @@ mwrite(unsigned long adrs, void *buf, int size) ...@@ -1411,16 +1418,23 @@ mwrite(unsigned long adrs, void *buf, int size)
char *p, *q; char *p, *q;
n = 0; n = 0;
if( setjmp(bus_error_jmp) == 0 ){ if (setjmp(bus_error_jmp) == 0) {
debugger_fault_handler = handle_fault; debugger_fault_handler = handle_fault;
sync(); sync();
p = (char *) adrs; p = (char *) adrs;
q = (char *) buf; q = (char *) buf;
switch (size) { switch (size) {
case 2: *(short *)p = *(short *)q; break; case 2:
case 4: *(int *)p = *(int *)q; break; *(short *)p = *(short *)q;
break;
case 4:
*(int *)p = *(int *)q;
break;
case 8:
*(long *)p = *(long *)q;
break;
default: default:
for( ; n < size; ++n ) { for ( ; n < size; ++n) {
*p++ = *q++; *p++ = *q++;
sync(); sync();
} }
......
...@@ -61,7 +61,18 @@ struct compat_flock { ...@@ -61,7 +61,18 @@ struct compat_flock {
compat_off_t l_start; compat_off_t l_start;
compat_off_t l_len; compat_off_t l_len;
compat_pid_t l_pid; compat_pid_t l_pid;
short __unused; };
#define F_GETLK64 12 /* using 'struct flock64' */
#define F_SETLK64 13
#define F_SETLKW64 14
struct compat_flock64 {
short l_type;
short l_whence;
compat_loff_t l_start;
compat_loff_t l_len;
compat_pid_t l_pid;
}; };
struct compat_statfs { struct compat_statfs {
...@@ -84,4 +95,7 @@ typedef u32 compat_old_sigset_t; ...@@ -84,4 +95,7 @@ typedef u32 compat_old_sigset_t;
typedef u32 compat_sigset_word; typedef u32 compat_sigset_word;
#define COMPAT_OFF_T_MAX 0x7fffffff
#define COMPAT_LOFF_T_MAX 0x7fffffffffffffffL
#endif /* _ASM_PPC64_COMPAT_H */ #endif /* _ASM_PPC64_COMPAT_H */
...@@ -42,10 +42,6 @@ ...@@ -42,10 +42,6 @@
#define F_SETSIG 10 /* for sockets. */ #define F_SETSIG 10 /* for sockets. */
#define F_GETSIG 11 /* for sockets. */ #define F_GETSIG 11 /* for sockets. */
#define F_GETLK64 12 /* using 'struct flock64' */
#define F_SETLK64 13
#define F_SETLKW64 14
/* for F_[GET|SET]FL */ /* for F_[GET|SET]FL */
#define FD_CLOEXEC 1 /* actually anything with low bit set goes */ #define FD_CLOEXEC 1 /* actually anything with low bit set goes */
...@@ -87,13 +83,6 @@ struct flock { ...@@ -87,13 +83,6 @@ struct flock {
pid_t l_pid; pid_t l_pid;
}; };
struct flock64 {
short l_type;
short l_whence;
loff_t l_start;
loff_t l_len;
pid_t l_pid;
};
#define F_LINUX_SPECIFIC_BASE 1024 #define F_LINUX_SPECIFIC_BASE 1024
#endif /* _PPC64_FCNTL_H */ #endif /* _PPC64_FCNTL_H */
...@@ -20,7 +20,8 @@ enum phb_types { ...@@ -20,7 +20,8 @@ enum phb_types {
phb_type_unknown = 0x0, phb_type_unknown = 0x0,
phb_type_hypervisor = 0x1, phb_type_hypervisor = 0x1,
phb_type_python = 0x10, phb_type_python = 0x10,
phb_type_speedwagon = 0x11 phb_type_speedwagon = 0x11,
phb_type_winnipeg = 0x12
}; };
/* /*
......
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