aboutsummaryrefslogtreecommitdiffstats
path: root/xenolinux-2.4.21-pre4-sparse
diff options
context:
space:
mode:
authorkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>2003-04-16 12:44:16 +0000
committerkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>2003-04-16 12:44:16 +0000
commitdcc63e79155b1df7793b3fecccf1e395298c8ee7 (patch)
treece727b6d106f393a41f58253575ac4799a6aa4bb /xenolinux-2.4.21-pre4-sparse
parent73f339d4f3aa7023b29e3c4d335b796fd20e2b26 (diff)
downloadxen-dcc63e79155b1df7793b3fecccf1e395298c8ee7.tar.gz
xen-dcc63e79155b1df7793b3fecccf1e395298c8ee7.tar.bz2
xen-dcc63e79155b1df7793b3fecccf1e395298c8ee7.zip
bitkeeper revision 1.172 (3e9d5020hc5RUkx3ArM71EjZ_UUbgw)
Many files: Fixed event masking so that events can be individually masked. Fixed Xenolinux config/build system.
Diffstat (limited to 'xenolinux-2.4.21-pre4-sparse')
-rw-r--r--xenolinux-2.4.21-pre4-sparse/arch/xeno/config.in2
-rw-r--r--xenolinux-2.4.21-pre4-sparse/arch/xeno/defconfig49
-rw-r--r--xenolinux-2.4.21-pre4-sparse/arch/xeno/kernel/entry.S15
-rw-r--r--xenolinux-2.4.21-pre4-sparse/arch/xeno/kernel/hypervisor.c25
-rw-r--r--xenolinux-2.4.21-pre4-sparse/include/asm-xeno/system.h52
5 files changed, 104 insertions, 39 deletions
diff --git a/xenolinux-2.4.21-pre4-sparse/arch/xeno/config.in b/xenolinux-2.4.21-pre4-sparse/arch/xeno/config.in
index a12a1ec5c0..7dd6b1c985 100644
--- a/xenolinux-2.4.21-pre4-sparse/arch/xeno/config.in
+++ b/xenolinux-2.4.21-pre4-sparse/arch/xeno/config.in
@@ -125,3 +125,5 @@ if [ "$CONFIG_DEBUG_KERNEL" != "n" ]; then
fi
endmenu
+
+source lib/Config.in \ No newline at end of file
diff --git a/xenolinux-2.4.21-pre4-sparse/arch/xeno/defconfig b/xenolinux-2.4.21-pre4-sparse/arch/xeno/defconfig
index 96ede4cd2e..c9e4e1a4f7 100644
--- a/xenolinux-2.4.21-pre4-sparse/arch/xeno/defconfig
+++ b/xenolinux-2.4.21-pre4-sparse/arch/xeno/defconfig
@@ -113,7 +113,7 @@ CONFIG_BLK_DEV_LOOP=y
CONFIG_BLK_DEV_NBD=y
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_SIZE=4096
-# CONFIG_BLK_DEV_INITRD is not set
+CONFIG_BLK_DEV_INITRD=y
CONFIG_XENOLINUX_BLOCK=y
#
@@ -286,10 +286,11 @@ CONFIG_JBD=y
# CONFIG_FAT_FS is not set
# CONFIG_CRAMFS is not set
# CONFIG_TMPFS is not set
-# CONFIG_RAMFS is not set
+CONFIG_RAMFS=y
CONFIG_ISO9660_FS=y
CONFIG_JOLIET=y
CONFIG_ZISOFS=y
+CONFIG_ZISOFS_FS=y
# CONFIG_MINIX_FS is not set
# CONFIG_VXFS_FS is not set
# CONFIG_NTFS_FS is not set
@@ -301,6 +302,47 @@ CONFIG_EXT2_FS=y
# CONFIG_UDF_FS is not set
# CONFIG_UFS_FS is not set
+# Skanky NLS stuff
+CONFIG_NLS_DEFAULT="iso8559-1"
+CONFIG_NLS_CODEPAGE_437=n
+CONFIG_NLS_CODEPAGE_737=n
+CONFIG_NLS_CODEPAGE_775=n
+CONFIG_NLS_CODEPAGE_850=n
+CONFIG_NLS_CODEPAGE_852=n
+CONFIG_NLS_CODEPAGE_855=n
+CONFIG_NLS_CODEPAGE_857=n
+CONFIG_NLS_CODEPAGE_860=n
+CONFIG_NLS_CODEPAGE_861=n
+CONFIG_NLS_CODEPAGE_862=n
+CONFIG_NLS_CODEPAGE_863=n
+CONFIG_NLS_CODEPAGE_864=n
+CONFIG_NLS_CODEPAGE_865=n
+CONFIG_NLS_CODEPAGE_866=n
+CONFIG_NLS_CODEPAGE_869=n
+CONFIG_NLS_CODEPAGE_936=n
+CONFIG_NLS_CODEPAGE_950=n
+CONFIG_NLS_CODEPAGE_932=n
+CONFIG_NLS_CODEPAGE_949=n
+CONFIG_NLS_CODEPAGE_874=n
+CONFIG_NLS_ISO8859_8=n
+CONFIG_NLS_CODEPAGE_1250=n
+CONFIG_NLS_CODEPAGE_1251=n
+CONFIG_NLS_ISO8859_1=n
+CONFIG_NLS_ISO8859_2=n
+CONFIG_NLS_ISO8859_3=n
+CONFIG_NLS_ISO8859_4=n
+CONFIG_NLS_ISO8859_5=n
+CONFIG_NLS_ISO8859_6=n
+CONFIG_NLS_ISO8859_7=n
+CONFIG_NLS_ISO8859_9=n
+CONFIG_NLS_ISO8859_13=n
+CONFIG_NLS_ISO8859_14=n
+CONFIG_NLS_ISO8859_15=n
+CONFIG_NLS_KOI8_R=n
+CONFIG_NLS_KOI8_U=n
+CONFIG_NLS_UTF8=n
+
+
#
# Network File Systems
#
@@ -406,5 +448,4 @@ CONFIG_KALLSYMS=y
# Library routines
#
CONFIG_ZLIB_INFLATE=y
-
-
+CONFIG_ZLIB_DEFLATE=n
diff --git a/xenolinux-2.4.21-pre4-sparse/arch/xeno/kernel/entry.S b/xenolinux-2.4.21-pre4-sparse/arch/xeno/kernel/entry.S
index 20ae79e50e..0250f5e11b 100644
--- a/xenolinux-2.4.21-pre4-sparse/arch/xeno/kernel/entry.S
+++ b/xenolinux-2.4.21-pre4-sparse/arch/xeno/kernel/entry.S
@@ -210,15 +210,14 @@ ENTRY(system_call)
movl %eax,EAX(%esp) # save the return value
ENTRY(ret_from_sys_call)
movl SYMBOL_NAME(HYPERVISOR_shared_info),%esi
- xorl %eax,%eax
- movl %eax,4(%esi) # need_resched and signals atomic test
+ btrl $EVENTS_MASTER_ENABLE_BIT,4(%esi) # make tests atomic
ret_syscall_tests:
cmpl $0,need_resched(%ebx)
jne reschedule
cmpl $0,sigpending(%ebx)
je safesti # ensure need_resched updates are seen
signal_return:
- btsl %eax,4(%esi) # reenable event callbacks
+ btsl $EVENTS_MASTER_ENABLE_BIT,4(%esi) # reenable event callbacks
movl %esp,%eax
xorl %edx,%edx
call SYMBOL_NAME(do_signal)
@@ -255,8 +254,8 @@ ret_from_exception:
ALIGN
reschedule:
- btsl %eax,4(%esi) # reenable event callbacks
- call SYMBOL_NAME(schedule) # test
+ btsl $EVENTS_MASTER_ENABLE_BIT,4(%esi) # reenable event callbacks
+ call SYMBOL_NAME(schedule) # test
jmp ret_from_sys_call
ENTRY(divide_error)
@@ -319,12 +318,12 @@ ENTRY(hypervisor_callback)
movb CS(%esp),%cl
test $2,%cl # slow return to ring 2 or 3
jne ret_syscall_tests
-safesti:btsl %eax,4(%esi) # reenable event callbacks
+safesti:btsl $EVENTS_MASTER_ENABLE_BIT,4(%esi) # reenable event callbacks
scrit: /**** START OF CRITICAL REGION ****/
cmpl %eax,(%esi)
jne 14f # process more events if necessary...
RESTORE_ALL
-14: btrl %eax,4(%esi)
+14: btrl $EVENTS_MASTER_ENABLE_BIT,4(%esi)
jmp 11b
ecrit: /**** END OF CRITICAL REGION ****/
# [How we do the fixup]. We want to merge the current stack frame with the
@@ -366,7 +365,7 @@ critical_fixup_table:
.byte 0x20 # pop %es
.byte 0x24,0x24,0x24 # add $4,%esp
.byte 0x28 # iret
- .byte 0x00,0x00,0x00,0x00 # btrl %eax,4(%esi)
+ .byte 0x00,0x00,0x00,0x00,0x00 # btrl $31,4(%esi)
.byte 0x00,0x00 # jmp 11b
# Hypervisor uses this for application faults while it executes.
diff --git a/xenolinux-2.4.21-pre4-sparse/arch/xeno/kernel/hypervisor.c b/xenolinux-2.4.21-pre4-sparse/arch/xeno/kernel/hypervisor.c
index 68670daa8c..3f414e9876 100644
--- a/xenolinux-2.4.21-pre4-sparse/arch/xeno/kernel/hypervisor.c
+++ b/xenolinux-2.4.21-pre4-sparse/arch/xeno/kernel/hypervisor.c
@@ -27,8 +27,8 @@ void do_hypervisor_callback(struct pt_regs *regs)
do {
/* Specialised local_irq_save(). */
- flags = shared->events_enable;
- shared->events_enable = 0;
+ flags = test_and_clear_bit(EVENTS_MASTER_ENABLE_BIT,
+ &shared->events_mask);
barrier();
events = xchg(&shared->events, 0);
@@ -50,7 +50,7 @@ void do_hypervisor_callback(struct pt_regs *regs)
: "eax", "ecx", "edx", "memory" );
/* Specialised local_irq_restore(). */
- shared->events_enable = flags;
+ if ( flags ) set_bit(EVENTS_MASTER_ENABLE_BIT, &shared->events_mask);
barrier();
}
while ( shared->events );
@@ -62,25 +62,25 @@ void do_hypervisor_callback(struct pt_regs *regs)
* Define interface to generic handling in irq.c
*/
-static unsigned int startup_hypervisor_event(unsigned int irq)
-{
- set_bit(irq, &event_mask);
- return 0;
-}
-
static void shutdown_hypervisor_event(unsigned int irq)
{
clear_bit(irq, &event_mask);
+ clear_bit(irq, &HYPERVISOR_shared_info->events_mask);
}
static void enable_hypervisor_event(unsigned int irq)
{
set_bit(irq, &event_mask);
+ set_bit(irq, &HYPERVISOR_shared_info->events_mask);
+ if ( test_bit(EVENTS_MASTER_ENABLE_BIT,
+ &HYPERVISOR_shared_info->events_mask) )
+ do_hypervisor_callback(NULL);
}
static void disable_hypervisor_event(unsigned int irq)
{
clear_bit(irq, &event_mask);
+ clear_bit(irq, &HYPERVISOR_shared_info->events_mask);
}
static void ack_hypervisor_event(unsigned int irq)
@@ -90,6 +90,13 @@ static void ack_hypervisor_event(unsigned int irq)
printk("Unexpected hypervisor event %d\n", irq);
atomic_inc(&irq_err_count);
}
+ set_bit(irq, &HYPERVISOR_shared_info->events_mask);
+}
+
+static unsigned int startup_hypervisor_event(unsigned int irq)
+{
+ enable_hypervisor_event(irq);
+ return 0;
}
static void end_hypervisor_event(unsigned int irq)
diff --git a/xenolinux-2.4.21-pre4-sparse/include/asm-xeno/system.h b/xenolinux-2.4.21-pre4-sparse/include/asm-xeno/system.h
index e318716a66..387ac0fdad 100644
--- a/xenolinux-2.4.21-pre4-sparse/include/asm-xeno/system.h
+++ b/xenolinux-2.4.21-pre4-sparse/include/asm-xeno/system.h
@@ -312,31 +312,47 @@ static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old,
#define set_mb(var, value) do { xchg(&var, value); } while (0)
#define set_wmb(var, value) do { var = value; wmb(); } while (0)
-/* interrupt control.. */
-#define __save_flags(x) ((x) = HYPERVISOR_shared_info->events_enable); barrier()
-#define __restore_flags(x) \
-do { \
- shared_info_t *_shared = HYPERVISOR_shared_info; \
- _shared->events_enable = (x); \
- barrier(); \
- if ( unlikely(_shared->events) && (x) ) do_hypervisor_callback(NULL); \
+
+#define __save_flags(x) \
+do { \
+ (x) = test_bit(EVENTS_MASTER_ENABLE_BIT, \
+ &HYPERVISOR_shared_info->events_mask); \
+ barrier(); \
+} while (0)
+
+#define __restore_flags(x) \
+do { \
+ shared_info_t *_shared = HYPERVISOR_shared_info; \
+ if (x) set_bit(EVENTS_MASTER_ENABLE_BIT, &_shared->events_mask); \
+ barrier(); \
+ if ( unlikely(_shared->events) && (x) ) do_hypervisor_callback(NULL); \
+} while (0)
+
+#define __cli() \
+do { \
+ clear_bit(EVENTS_MASTER_ENABLE_BIT, &HYPERVISOR_shared_info->events_mask);\
+ barrier(); \
} while (0)
-#define __cli() (HYPERVISOR_shared_info->events_enable = 0); barrier()
-#define __sti() \
-do { \
- shared_info_t *_shared = HYPERVISOR_shared_info; \
- _shared->events_enable = 1; \
- barrier(); \
- if ( unlikely(_shared->events) ) do_hypervisor_callback(NULL); \
+
+#define __sti() \
+do { \
+ shared_info_t *_shared = HYPERVISOR_shared_info; \
+ set_bit(EVENTS_MASTER_ENABLE_BIT, &_shared->events_mask); \
+ barrier(); \
+ if ( unlikely(_shared->events) ) do_hypervisor_callback(NULL); \
} while (0)
+
#define safe_halt() ((void)0)
#define __save_and_cli(x) do { __save_flags(x); __cli(); } while(0);
#define __save_and_sti(x) do { __save_flags(x); __sti(); } while(0);
-/* For spinlocks etc */
-//XXX#define local_irq_set(x) __save_and_sti(x)
-#define local_irq_save(x) ((x) = HYPERVISOR_shared_info->events_enable); (HYPERVISOR_shared_info->events_enable = 0); barrier()
+#define local_irq_save(x) \
+do { \
+ (x) = test_and_clear_bit(EVENTS_MASTER_ENABLE_BIT, \
+ &HYPERVISOR_shared_info->events_mask); \
+ barrier(); \
+} while (0)
#define local_irq_restore(x) __restore_flags(x)
#define local_irq_disable() __cli()
#define local_irq_enable() __sti()