Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mattst88/alpha
Pull alpha updates from Matt Turner: "It contains a few fixes and some work from Richard to make alpha emulation under QEMU much more usable" * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mattst88/alpha: alpha: Prevent a NULL ptr dereference in csum_partial_copy. alpha: perf: fix out-of-bounds array access triggered from raw event alpha: Use qemu+cserve provided high-res clock and alarm. alpha: Switch to GENERIC_CLOCKEVENTS alpha: Enable the rpcc clocksource for single processor alpha: Reorganize rtc handling alpha: Primitive support for CPU power down. alpha: Allow HZ to be configured alpha: Notice if we're being run under QEMU alpha: Eliminate compiler warning from memset macro
This commit is contained in:
@@ -33,6 +33,7 @@ struct alpha_machine_vector
|
||||
|
||||
int nr_irqs;
|
||||
int rtc_port;
|
||||
int rtc_boot_cpu_only;
|
||||
unsigned int max_asn;
|
||||
unsigned long max_isa_dma_address;
|
||||
unsigned long irq_probe_mask;
|
||||
@@ -95,9 +96,6 @@ struct alpha_machine_vector
|
||||
|
||||
struct _alpha_agp_info *(*agp_info)(void);
|
||||
|
||||
unsigned int (*rtc_get_time)(struct rtc_time *);
|
||||
int (*rtc_set_time)(struct rtc_time *);
|
||||
|
||||
const char *vector_name;
|
||||
|
||||
/* NUMA information */
|
||||
@@ -126,13 +124,19 @@ extern struct alpha_machine_vector alpha_mv;
|
||||
|
||||
#ifdef CONFIG_ALPHA_GENERIC
|
||||
extern int alpha_using_srm;
|
||||
extern int alpha_using_qemu;
|
||||
#else
|
||||
#ifdef CONFIG_ALPHA_SRM
|
||||
#define alpha_using_srm 1
|
||||
#else
|
||||
#define alpha_using_srm 0
|
||||
#endif
|
||||
# ifdef CONFIG_ALPHA_SRM
|
||||
# define alpha_using_srm 1
|
||||
# else
|
||||
# define alpha_using_srm 0
|
||||
# endif
|
||||
# ifdef CONFIG_ALPHA_QEMU
|
||||
# define alpha_using_qemu 1
|
||||
# else
|
||||
# define alpha_using_qemu 0
|
||||
# endif
|
||||
#endif /* GENERIC */
|
||||
|
||||
#endif
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* __ALPHA_MACHVEC_H */
|
||||
|
||||
@@ -89,6 +89,7 @@ __CALL_PAL_W1(wrmces, unsigned long);
|
||||
__CALL_PAL_RW2(wrperfmon, unsigned long, unsigned long, unsigned long);
|
||||
__CALL_PAL_W1(wrusp, unsigned long);
|
||||
__CALL_PAL_W1(wrvptptr, unsigned long);
|
||||
__CALL_PAL_RW1(wtint, unsigned long, unsigned long);
|
||||
|
||||
/*
|
||||
* TB routines..
|
||||
@@ -111,5 +112,75 @@ __CALL_PAL_W1(wrvptptr, unsigned long);
|
||||
#define tbiap() __tbi(-1, /* no second argument */)
|
||||
#define tbia() __tbi(-2, /* no second argument */)
|
||||
|
||||
/*
|
||||
* QEMU Cserv routines..
|
||||
*/
|
||||
|
||||
static inline unsigned long
|
||||
qemu_get_walltime(void)
|
||||
{
|
||||
register unsigned long v0 __asm__("$0");
|
||||
register unsigned long a0 __asm__("$16") = 3;
|
||||
|
||||
asm("call_pal %2 # cserve get_time"
|
||||
: "=r"(v0), "+r"(a0)
|
||||
: "i"(PAL_cserve)
|
||||
: "$17", "$18", "$19", "$20", "$21");
|
||||
|
||||
return v0;
|
||||
}
|
||||
|
||||
static inline unsigned long
|
||||
qemu_get_alarm(void)
|
||||
{
|
||||
register unsigned long v0 __asm__("$0");
|
||||
register unsigned long a0 __asm__("$16") = 4;
|
||||
|
||||
asm("call_pal %2 # cserve get_alarm"
|
||||
: "=r"(v0), "+r"(a0)
|
||||
: "i"(PAL_cserve)
|
||||
: "$17", "$18", "$19", "$20", "$21");
|
||||
|
||||
return v0;
|
||||
}
|
||||
|
||||
static inline void
|
||||
qemu_set_alarm_rel(unsigned long expire)
|
||||
{
|
||||
register unsigned long a0 __asm__("$16") = 5;
|
||||
register unsigned long a1 __asm__("$17") = expire;
|
||||
|
||||
asm volatile("call_pal %2 # cserve set_alarm_rel"
|
||||
: "+r"(a0), "+r"(a1)
|
||||
: "i"(PAL_cserve)
|
||||
: "$0", "$18", "$19", "$20", "$21");
|
||||
}
|
||||
|
||||
static inline void
|
||||
qemu_set_alarm_abs(unsigned long expire)
|
||||
{
|
||||
register unsigned long a0 __asm__("$16") = 6;
|
||||
register unsigned long a1 __asm__("$17") = expire;
|
||||
|
||||
asm volatile("call_pal %2 # cserve set_alarm_abs"
|
||||
: "+r"(a0), "+r"(a1)
|
||||
: "i"(PAL_cserve)
|
||||
: "$0", "$18", "$19", "$20", "$21");
|
||||
}
|
||||
|
||||
static inline unsigned long
|
||||
qemu_get_vmtime(void)
|
||||
{
|
||||
register unsigned long v0 __asm__("$0");
|
||||
register unsigned long a0 __asm__("$16") = 7;
|
||||
|
||||
asm("call_pal %2 # cserve get_time"
|
||||
: "=r"(v0), "+r"(a0)
|
||||
: "i"(PAL_cserve)
|
||||
: "$17", "$18", "$19", "$20", "$21");
|
||||
|
||||
return v0;
|
||||
}
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
#endif /* __ALPHA_PAL_H */
|
||||
|
||||
@@ -1,12 +1 @@
|
||||
#ifndef _ALPHA_RTC_H
|
||||
#define _ALPHA_RTC_H
|
||||
|
||||
#if defined(CONFIG_ALPHA_MARVEL) && defined(CONFIG_SMP) \
|
||||
|| defined(CONFIG_ALPHA_GENERIC)
|
||||
# define get_rtc_time alpha_mv.rtc_get_time
|
||||
# define set_rtc_time alpha_mv.rtc_set_time
|
||||
#endif
|
||||
|
||||
#include <asm-generic/rtc.h>
|
||||
|
||||
#endif
|
||||
|
||||
@@ -22,15 +22,27 @@ extern void * __memcpy(void *, const void *, size_t);
|
||||
|
||||
#define __HAVE_ARCH_MEMSET
|
||||
extern void * __constant_c_memset(void *, unsigned long, size_t);
|
||||
extern void * ___memset(void *, int, size_t);
|
||||
extern void * __memset(void *, int, size_t);
|
||||
extern void * memset(void *, int, size_t);
|
||||
|
||||
#define memset(s, c, n) \
|
||||
(__builtin_constant_p(c) \
|
||||
? (__builtin_constant_p(n) && (c) == 0 \
|
||||
? __builtin_memset((s),0,(n)) \
|
||||
: __constant_c_memset((s),0x0101010101010101UL*(unsigned char)(c),(n))) \
|
||||
: __memset((s),(c),(n)))
|
||||
/* For gcc 3.x, we cannot have the inline function named "memset" because
|
||||
the __builtin_memset will attempt to resolve to the inline as well,
|
||||
leading to a "sorry" about unimplemented recursive inlining. */
|
||||
extern inline void *__memset(void *s, int c, size_t n)
|
||||
{
|
||||
if (__builtin_constant_p(c)) {
|
||||
if (__builtin_constant_p(n)) {
|
||||
return __builtin_memset(s, c, n);
|
||||
} else {
|
||||
unsigned long c8 = (c & 0xff) * 0x0101010101010101UL;
|
||||
return __constant_c_memset(s, c8, n);
|
||||
}
|
||||
}
|
||||
return ___memset(s, c, n);
|
||||
}
|
||||
|
||||
#define memset __memset
|
||||
|
||||
#define __HAVE_ARCH_STRCPY
|
||||
extern char * strcpy(char *,const char *);
|
||||
|
||||
@@ -46,6 +46,7 @@
|
||||
#define PAL_rdusp 58
|
||||
#define PAL_whami 60
|
||||
#define PAL_retsys 61
|
||||
#define PAL_wtint 62
|
||||
#define PAL_rti 63
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user