Commit f990f434 authored by David S. Miller's avatar David S. Miller

Merge nuts.ninka.net:/home/davem/src/BK/sparcwork-2.5

into nuts.ninka.net:/home/davem/src/BK/sparc-2.5
parents e856ba4a e1af51c9
...@@ -34,6 +34,8 @@ ...@@ -34,6 +34,8 @@
#include <asm/timer.h> #include <asm/timer.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
extern rwlock_t xtime_lock;
#ifndef CONFIG_PCI #ifndef CONFIG_PCI
asmlinkage int sys_pciconfig_read(unsigned long bus, asmlinkage int sys_pciconfig_read(unsigned long bus,
...@@ -737,8 +739,10 @@ static void pcic_clear_clock_irq(void) ...@@ -737,8 +739,10 @@ static void pcic_clear_clock_irq(void)
static void pcic_timer_handler (int irq, void *h, struct pt_regs *regs) static void pcic_timer_handler (int irq, void *h, struct pt_regs *regs)
{ {
write_lock(&xtime_lock); /* Dummy, to show that we remember */
pcic_clear_clock_irq(); pcic_clear_clock_irq();
do_timer(regs); do_timer(regs);
write_unlock(&xtime_lock);
} }
#define USECS_PER_JIFFY 10000 /* We have 100HZ "standard" timer for sparc */ #define USECS_PER_JIFFY 10000 /* We have 100HZ "standard" timer for sparc */
...@@ -776,9 +780,6 @@ void __init pci_time_init(void) ...@@ -776,9 +780,6 @@ void __init pci_time_init(void)
static __inline__ unsigned long do_gettimeoffset(void) static __inline__ unsigned long do_gettimeoffset(void)
{ {
struct tasklet_struct *t;
unsigned long offset = 0;
/* /*
* We devide all to 100 * We devide all to 100
* to have microsecond resolution and to avoid overflow * to have microsecond resolution and to avoid overflow
...@@ -786,15 +787,10 @@ static __inline__ unsigned long do_gettimeoffset(void) ...@@ -786,15 +787,10 @@ static __inline__ unsigned long do_gettimeoffset(void)
unsigned long count = unsigned long count =
readl(pcic0.pcic_regs+PCI_SYS_COUNTER) & ~PCI_SYS_COUNTER_OVERFLOW; readl(pcic0.pcic_regs+PCI_SYS_COUNTER) & ~PCI_SYS_COUNTER_OVERFLOW;
count = ((count/100)*USECS_PER_JIFFY) / (TICK_TIMER_LIMIT/100); count = ((count/100)*USECS_PER_JIFFY) / (TICK_TIMER_LIMIT/100);
return count;
t = &bh_task_vec[TIMER_BH];
if (test_bit(TASKLET_STATE_SCHED, &t->state))
offset = 1000000;
return offset + count;
} }
extern unsigned long wall_jiffies; extern unsigned long wall_jiffies;
extern rwlock_t xtime_lock;
static void pci_do_gettimeofday(struct timeval *tv) static void pci_do_gettimeofday(struct timeval *tv)
{ {
......
...@@ -129,6 +129,8 @@ void timer_interrupt(int irq, void *dev_id, struct pt_regs * regs) ...@@ -129,6 +129,8 @@ void timer_interrupt(int irq, void *dev_id, struct pt_regs * regs)
sparc_do_profile(regs->pc, regs->u_regs[UREG_RETPC]); sparc_do_profile(regs->pc, regs->u_regs[UREG_RETPC]);
#endif #endif
/* Protect counter clear so that do_gettimeoffset works */
write_lock(&xtime_lock);
#ifdef CONFIG_SUN4 #ifdef CONFIG_SUN4
if((idprom->id_machtype == (SM_SUN4 | SM_4_260)) || if((idprom->id_machtype == (SM_SUN4 | SM_4_260)) ||
(idprom->id_machtype == (SM_SUN4 | SM_4_110))) { (idprom->id_machtype == (SM_SUN4 | SM_4_110))) {
...@@ -140,8 +142,6 @@ void timer_interrupt(int irq, void *dev_id, struct pt_regs * regs) ...@@ -140,8 +142,6 @@ void timer_interrupt(int irq, void *dev_id, struct pt_regs * regs)
#endif #endif
clear_clock_irq(); clear_clock_irq();
write_lock(&xtime_lock);
do_timer(regs); do_timer(regs);
/* Determine when to update the Mostek clock. */ /* Determine when to update the Mostek clock. */
...@@ -459,17 +459,7 @@ void __init time_init(void) ...@@ -459,17 +459,7 @@ void __init time_init(void)
extern __inline__ unsigned long do_gettimeoffset(void) extern __inline__ unsigned long do_gettimeoffset(void)
{ {
struct tasklet_struct *t; return (*master_l10_counter >> 10) & 0x1fffff;
unsigned long offset = 0;
unsigned int count;
count = (*master_l10_counter >> 10) & 0x1fffff;
t = &bh_task_vec[TIMER_BH];
if (test_bit(TASKLET_STATE_SCHED, &t->state))
offset = 1000000;
return offset + count;
} }
/* Ok, my cute asm atomicity trick doesn't work anymore. /* Ok, my cute asm atomicity trick doesn't work anymore.
......
...@@ -32,6 +32,7 @@ CONFIG_HW_CONSOLE=y ...@@ -32,6 +32,7 @@ CONFIG_HW_CONSOLE=y
# CONFIG_HUGETLB_PAGE is not set # CONFIG_HUGETLB_PAGE is not set
CONFIG_SMP=y CONFIG_SMP=y
# CONFIG_PREEMPT is not set # CONFIG_PREEMPT is not set
CONFIG_NR_CPUS=4
CONFIG_SPARC64=y CONFIG_SPARC64=y
CONFIG_HOTPLUG=y CONFIG_HOTPLUG=y
CONFIG_HAVE_DEC_LOCK=y CONFIG_HAVE_DEC_LOCK=y
...@@ -59,7 +60,6 @@ CONFIG_BINFMT_ELF=y ...@@ -59,7 +60,6 @@ CONFIG_BINFMT_ELF=y
CONFIG_BINFMT_MISC=m CONFIG_BINFMT_MISC=m
# CONFIG_SUNOS_EMUL is not set # CONFIG_SUNOS_EMUL is not set
CONFIG_SOLARIS_EMUL=m CONFIG_SOLARIS_EMUL=m
CONFIG_NR_CPUS=64
# #
# Parallel port support # Parallel port support
...@@ -220,6 +220,8 @@ CONFIG_BLK_DEV_IDEPCI=y ...@@ -220,6 +220,8 @@ CONFIG_BLK_DEV_IDEPCI=y
# CONFIG_BLK_DEV_GENERIC is not set # CONFIG_BLK_DEV_GENERIC is not set
# CONFIG_IDEPCI_SHARE_IRQ is not set # CONFIG_IDEPCI_SHARE_IRQ is not set
CONFIG_BLK_DEV_IDEDMA_PCI=y CONFIG_BLK_DEV_IDEDMA_PCI=y
# CONFIG_BLK_DEV_IDE_TCQ is not set
# CONFIG_BLK_DEV_IDE_TCQ_DEFAULT is not set
# CONFIG_BLK_DEV_OFFBOARD is not set # CONFIG_BLK_DEV_OFFBOARD is not set
# CONFIG_BLK_DEV_IDEDMA_FORCED is not set # CONFIG_BLK_DEV_IDEDMA_FORCED is not set
CONFIG_IDEDMA_PCI_AUTO=y CONFIG_IDEDMA_PCI_AUTO=y
...@@ -1025,15 +1027,20 @@ CONFIG_USB_TEST=m ...@@ -1025,15 +1027,20 @@ CONFIG_USB_TEST=m
CONFIG_BLUEZ=m CONFIG_BLUEZ=m
CONFIG_BLUEZ_L2CAP=m CONFIG_BLUEZ_L2CAP=m
CONFIG_BLUEZ_SCO=m CONFIG_BLUEZ_SCO=m
CONFIG_BLUEZ_RFCOMM=m
CONFIG_BLUEZ_RFCOMM_TTY=y
CONFIG_BLUEZ_BNEP=m
CONFIG_BLUEZ_BNEP_MC_FILTER=y
CONFIG_BLUEZ_BNEP_PROTO_FILTER=y
# #
# Bluetooth device drivers # Bluetooth device drivers
# #
CONFIG_BLUEZ_HCIUSB=m CONFIG_BLUEZ_HCIUSB=m
CONFIG_BLUEZ_USB_FW_LOAD=y
CONFIG_BLUEZ_USB_ZERO_PACKET=y CONFIG_BLUEZ_USB_ZERO_PACKET=y
CONFIG_BLUEZ_HCIUART=m CONFIG_BLUEZ_HCIUART=m
CONFIG_BLUEZ_HCIUART_H4=y CONFIG_BLUEZ_HCIUART_H4=y
CONFIG_BLUEZ_HCIUART_BCSP=y
# CONFIG_BLUEZ_HCIDTL1 is not set # CONFIG_BLUEZ_HCIDTL1 is not set
# CONFIG_BLUEZ_HCIBT3C is not set # CONFIG_BLUEZ_HCIBT3C is not set
# CONFIG_BLUEZ_HCIBLUECARD is not set # CONFIG_BLUEZ_HCIBLUECARD is not set
......
...@@ -247,7 +247,7 @@ static inline void *ebus_alloc(size_t size) ...@@ -247,7 +247,7 @@ static inline void *ebus_alloc(size_t size)
mem = kmalloc(size, GFP_ATOMIC); mem = kmalloc(size, GFP_ATOMIC);
if (!mem) if (!mem)
panic(__FUNCTION__ ": out of memory"); panic("ebus_alloc: out of memory");
memset((char *)mem, 0, size); memset((char *)mem, 0, size);
return mem; return mem;
} }
......
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