* Re: [2.5.51] Failure to mount ext3 root when ext2 compiled in
From: Rusty Russell @ 2002-12-16 21:42 UTC (permalink / raw)
To: Andrew Morton; +Cc: viro, linux-kernel, Kai Germaschewski
In-Reply-To: <3DF95D90.DEE68C66@digeo.com>
In message <3DF95D90.DEE68C66@digeo.com> you write:
> Rebuilding the kernel, even if you "didn't change anything" makes
> it go away.
>
> I assume that in your case a `make clean' will not fix it. You
> lucky duck. Can you stick a printk right at the end of
> ext3_fill_super()?
You have cursed me. Now it works. Looks like a build problem?
Rusty.
--
Anyone who quotes me in their sig is an idiot. -- Rusty Russell.
^ permalink raw reply
* RE: [ACPI] Metolious hardware-sensors-using-ACPI specs
From: Grover, Andrew @ 2002-12-16 23:02 UTC (permalink / raw)
To: 'Pavel Machek'; +Cc: ACPI mailing list, kernel list
> From: Pavel Machek [mailto:pavel@suse.cz]
> Ouch, I started implementing that hour ago... [Never mind, very little
> damage done so far].
Wow you work fast. ;-)
> But... Metolious sounds *needed*; how do you access voltage sensors
> without metolious, in a way that can coexist with ACPI thermal
> support?
(I think you mean thermal sensors)
A solution in search of a problem. I can say this because I helped define
it. :)
The machines that care about manageability (servers) appear to be entirely
disjoint from the ones that have thermal zones (and, servers use IPMI),
therefore thermal chip contention doesn't happen. And, Metolious required a
fair amount of AML code.
-- Andy
^ permalink raw reply
* Re: possible problems with rc6 aplay
From: patrick reardon @ 2002-12-16 22:53 UTC (permalink / raw)
To: Paul Davis; +Cc: alsa-devel
In-Reply-To: <200212151910.18nLEb5ck3NZFjX0@robin>
paul davis wrote:
>
> does any of this make it any clearer? its really a bit of problem that
> the rate setting code doesn't do a full 100% check on all this
> stuff. an app can set the rate to 44100, and appear to have succeeded,
> but it will have no difference on the actual rate if the sync source
> is not the clock's internal clock. this is true, btw, for most digital
> cards. if you tried to record at 44100, but your external converters
> were running at 48kHz (as you suggest they have been), then the
> recordings will be at 48kHz with the sync source set as shown above.
yes, thnx, it's much clearer now. my converter is external with no rate switches and from
the manual i just discovered it always operates at 48000 (Alesis AI-3). i'm still
uncertain how to change the card's configuration though. "alsactl" doesn't seem to
provide an obvious way to do this (looking at the man page). but my asound.state file has
--------------------snip--------------------
control.8 {
comment.access 'read write'
comment.type ENUMERATED
comment.item.0 'IEC958 In'
comment.item.1 'ADAT1 In'
comment.item.2 'ADAT2 In'
iface PCM
name 'Preferred Sync Source'
value 'ADAT1 In'
}
--------------------snip--------------------
do i just edit this by hand, changing value 'ADAT1 In' to value 'master', or ........ ??
patrick
Paul Davis wrote:
>
> >Latency: 4096 samples (2 periods of 16384 bytes)
> >Hardware pointer (frames): 0
> >Passthru: no
> >Clock mode: autosync
> >Pref. sync source: ADAT1
> >
> >IEC958 input: Coaxial
> >IEC958 output: Coaxial only
> >IEC958 quality: Consumer
> >IEC958 emphasis: off
> >IEC958 Dolby: off
> >IEC958 sample rate: error flag set
> >
> >ADAT Sample rate: 44100Hz
>
> if you're hammerfall is configured as shown above (and no, the name
> change makes no difference), then the SR that it uses will be
> determined by your external converter connected to the first ADAT
> port. nothing that ALSA does (or any program using ALSA does) will
> alter the SR. thats because you are synced to ADAT1, not the card's
> internal clock, thus the SR is determined by the clock signal arriving
> at ADAT1, which presumably comes from a converter somewhere back up
> the ADAT chain.
>
> its been on my to-do list for some time to make "master" the default
> clock mode on the hammerfall, which avoids any ambiguity about the
> sample rate used by the card. i've held back because its really not
> the right option for most studio-ish users, who have external
> converters that probably have rate switches on them and they expect
> the hammerfall to follow the switch setting.
>
> --p
-------------------------------------------------------
This sf.net email is sponsored by:
With Great Power, Comes Great Responsibility
Learn to use your power at OSDN's High Performance Computing Channel
http://hpc.devchannel.org/
^ permalink raw reply
* Re: Intel sez: Synchronous Flash and XIP is the future -- thoughts?
From: Charles Manning @ 2002-12-16 23:18 UTC (permalink / raw)
To: Russ Dill, linux-mtd
In-Reply-To: <1040073679.27220.9.camel@timmy>
On Tue, 17 Dec 2002 10:21, you wrote:
> On Mon, 2002-12-16 at 14:02, Charles Manning wrote:
> > Intel's flash is expensive. Figure somwhere over $1 per MB. NAND costs
> > approx 30c/MB + SDRAM approx 20c/MB. Intel's flash thus costs approx
> > twice what a NAND/RAM image does.
> >
> > One NAND flash footprint can give you up to 256MB of storage.
> >
> > NOR fully sucks for any sort of writeable file system performance. NAND
> > runs a very usable fs with YAFFS or JFFS2.
> >
> > The only benefit I can see in NOR is a faster boot. This is becoming less
> > of an issue as more designs switch to sleep/resume models.
>
> It really depends on how much data you store, and how you use that data.
> Sure, for you, with a dynamic file system, and 256M of storage, NAND is an
> easy choice. But many designs out there have static file systems, use 2M or
> 4M of flash, and for such designs, NOR offers a lot more simplicity for
> around the same cost as a NAND + boot logic. With NOR flash, I can put a
> couple cramfs filesystems on there, and use the boot block for storing a
> simple journalled config, reliably. I don't have to worry about setting
> aside blocks in case one goes bad.
>
> I think this is the market intel is targeting, just change 2M or 4M to 4M
> or 8M (no more compressed fs).
True, flexibility is the key. If 2-4MB with a static fs is all you need, then
no need to take on all the extra drama.
However, to get back to the start of this thread, Intels big push is for the
larger sizes (8MB+) where NOR is less palatable.
-- CHarles
^ permalink raw reply
* [PATCH][RESEND] linux-2.5.52_subarch-cleanup_A3
From: john stultz @ 2002-12-16 22:50 UTC (permalink / raw)
To: Linus Torvalds, James.Bottomley; +Cc: lkml, Martin J. Bligh, Alan Cox
Linus, James, all
Just a resend of my subarch cleanup patch (rediffed against bk
current), which splits up the subarch .h and .c files. Also I've made it
so the .h files not found in the platform subarch dir fall back to the
default subarch dir. This makes it easier to add new subarches with
minimal file duplication.
The patch is largeish due to the number of file moves, however bk should
pick these up as renames on import.
Please apply.
Thanks
-john
diff -Nru a/arch/i386/Makefile b/arch/i386/Makefile
--- a/arch/i386/Makefile Mon Dec 16 14:34:13 2002
+++ b/arch/i386/Makefile Mon Dec 16 14:34:13 2002
@@ -46,25 +46,31 @@
CFLAGS += $(cflags-y)
-ifdef CONFIG_VISWS
-MACHINE := mach-visws
-else
-MACHINE := mach-generic
-endif
+#default subarch .c files
+mcore-y := mach-default
+
+#VISWS subarch support
+mflags-$(CONFIG_VISWS) := -Iinclude/asm-i386/mach-visws
+mcore-$(CONFIG_VISWS) := mach-visws
+
+#add other subarch support here
+
+#default subarch .h files
+mflags-y += -Iinclude/asm-i386/mach-default
HEAD := arch/i386/kernel/head.o arch/i386/kernel/init_task.o
libs-y += arch/i386/lib/
core-y += arch/i386/kernel/ \
arch/i386/mm/ \
- arch/i386/$(MACHINE)/
+ arch/i386/$(mcore-y)/
drivers-$(CONFIG_MATH_EMULATION) += arch/i386/math-emu/
drivers-$(CONFIG_PCI) += arch/i386/pci/
# FIXME: is drivers- right ?
drivers-$(CONFIG_OPROFILE) += arch/i386/oprofile/
-CFLAGS += -Iarch/i386/$(MACHINE)
-AFLAGS += -Iarch/i386/$(MACHINE)
+CFLAGS += $(mflags-y)
+AFLAGS += $(mflags-y)
makeboot =$(Q)$(MAKE) -f scripts/Makefile.build obj=arch/i386/boot $(1)
diff -Nru a/arch/i386/kernel/apic.c b/arch/i386/kernel/apic.c
--- a/arch/i386/kernel/apic.c Mon Dec 16 14:34:13 2002
+++ b/arch/i386/kernel/apic.c Mon Dec 16 14:34:13 2002
@@ -31,7 +31,8 @@
#include <asm/pgalloc.h>
#include <asm/desc.h>
#include <asm/arch_hooks.h>
-#include "mach_apic.h"
+
+#include <mach_apic.h>
void __init apic_intr_init(void)
{
diff -Nru a/arch/i386/kernel/io_apic.c b/arch/i386/kernel/io_apic.c
--- a/arch/i386/kernel/io_apic.c Mon Dec 16 14:34:13 2002
+++ b/arch/i386/kernel/io_apic.c Mon Dec 16 14:34:13 2002
@@ -35,7 +35,8 @@
#include <asm/io.h>
#include <asm/smp.h>
#include <asm/desc.h>
-#include "mach_apic.h"
+
+#include <mach_apic.h>
#undef APIC_LOCKUP_DEBUG
diff -Nru a/arch/i386/kernel/mpparse.c b/arch/i386/kernel/mpparse.c
--- a/arch/i386/kernel/mpparse.c Mon Dec 16 14:34:13 2002
+++ b/arch/i386/kernel/mpparse.c Mon Dec 16 14:34:13 2002
@@ -30,7 +30,8 @@
#include <asm/mpspec.h>
#include <asm/pgalloc.h>
#include <asm/io_apic.h>
-#include "mach_apic.h"
+
+#include <mach_apic.h>
/* Have we found an MP table */
int smp_found_config;
diff -Nru a/arch/i386/kernel/smpboot.c b/arch/i386/kernel/smpboot.c
--- a/arch/i386/kernel/smpboot.c Mon Dec 16 14:34:13 2002
+++ b/arch/i386/kernel/smpboot.c Mon Dec 16 14:34:13 2002
@@ -51,7 +51,8 @@
#include <asm/desc.h>
#include <asm/arch_hooks.h>
#include "smpboot_hooks.h"
-#include "mach_apic.h"
+
+#include <mach_apic.h>
/* Set if we find a B stepping CPU */
static int __initdata smp_b_stepping;
diff -Nru a/arch/i386/mach-default/Makefile b/arch/i386/mach-default/Makefile
--- /dev/null Wed Dec 31 16:00:00 1969
+++ b/arch/i386/mach-default/Makefile Mon Dec 16 14:34:13 2002
@@ -0,0 +1,7 @@
+#
+# Makefile for the linux kernel.
+#
+
+EXTRA_CFLAGS += -I../kernel
+
+obj-y := setup.o topology.o
diff -Nru a/arch/i386/mach-default/setup.c b/arch/i386/mach-default/setup.c
--- /dev/null Wed Dec 31 16:00:00 1969
+++ b/arch/i386/mach-default/setup.c Mon Dec 16 14:34:13 2002
@@ -0,0 +1,104 @@
+/*
+ * Machine specific setup for generic
+ */
+
+#include <linux/config.h>
+#include <linux/smp.h>
+#include <linux/init.h>
+#include <linux/irq.h>
+#include <linux/interrupt.h>
+#include <asm/arch_hooks.h>
+
+/**
+ * pre_intr_init_hook - initialisation prior to setting up interrupt vectors
+ *
+ * Description:
+ * Perform any necessary interrupt initialisation prior to setting up
+ * the "ordinary" interrupt call gates. For legacy reasons, the ISA
+ * interrupts should be initialised here if the machine emulates a PC
+ * in any way.
+ **/
+void __init pre_intr_init_hook(void)
+{
+ init_ISA_irqs();
+}
+
+/*
+ * IRQ2 is cascade interrupt to second interrupt controller
+ */
+static struct irqaction irq2 = { no_action, 0, 0, "cascade", NULL, NULL};
+
+/**
+ * intr_init_hook - post gate setup interrupt initialisation
+ *
+ * Description:
+ * Fill in any interrupts that may have been left out by the general
+ * init_IRQ() routine. interrupts having to do with the machine rather
+ * than the devices on the I/O bus (like APIC interrupts in intel MP
+ * systems) are started here.
+ **/
+void __init intr_init_hook(void)
+{
+#ifdef CONFIG_X86_LOCAL_APIC
+ apic_intr_init();
+#endif
+
+ setup_irq(2, &irq2);
+}
+
+/**
+ * pre_setup_arch_hook - hook called prior to any setup_arch() execution
+ *
+ * Description:
+ * generally used to activate any machine specific identification
+ * routines that may be needed before setup_arch() runs. On VISWS
+ * this is used to get the board revision and type.
+ **/
+void __init pre_setup_arch_hook(void)
+{
+}
+
+/**
+ * trap_init_hook - initialise system specific traps
+ *
+ * Description:
+ * Called as the final act of trap_init(). Used in VISWS to initialise
+ * the various board specific APIC traps.
+ **/
+void __init trap_init_hook(void)
+{
+}
+
+static struct irqaction irq0 = { timer_interrupt, SA_INTERRUPT, 0, "timer", NULL, NULL};
+
+/**
+ * time_init_hook - do any specific initialisations for the system timer.
+ *
+ * Description:
+ * Must plug the system timer interrupt source at HZ into the IRQ listed
+ * in irq_vectors.h:TIMER_IRQ
+ **/
+void __init time_init_hook(void)
+{
+ setup_irq(0, &irq0);
+}
+
+#ifdef CONFIG_MCA
+/**
+ * mca_nmi_hook - hook into MCA specific NMI chain
+ *
+ * Description:
+ * The MCA (Microchannel Arcitecture) has an NMI chain for NMI sources
+ * along the MCA bus. Use this to hook into that chain if you will need
+ * it.
+ **/
+void __init mca_nmi_hook(void)
+{
+ /* If I recall correctly, there's a whole bunch of other things that
+ * we can do to check for NMI problems, but that's all I know about
+ * at the moment.
+ */
+
+ printk("NMI generated from unknown source!\n");
+}
+#endif
diff -Nru a/arch/i386/mach-default/topology.c b/arch/i386/mach-default/topology.c
--- /dev/null Wed Dec 31 16:00:00 1969
+++ b/arch/i386/mach-default/topology.c Mon Dec 16 14:34:13 2002
@@ -0,0 +1,68 @@
+/*
+ * arch/i386/mach-generic/topology.c - Populate driverfs with topology information
+ *
+ * Written by: Matthew Dobson, IBM Corporation
+ * Original Code: Paul Dorwin, IBM Corporation, Patrick Mochel, OSDL
+ *
+ * Copyright (C) 2002, IBM Corp.
+ *
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
+ * NON INFRINGEMENT. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * Send feedback to <colpatch@us.ibm.com>
+ */
+#include <linux/init.h>
+#include <linux/smp.h>
+#include <asm/cpu.h>
+
+struct i386_cpu cpu_devices[NR_CPUS];
+
+#ifdef CONFIG_NUMA
+#include <linux/mmzone.h>
+#include <asm/node.h>
+#include <asm/memblk.h>
+
+struct i386_node node_devices[MAX_NUMNODES];
+struct i386_memblk memblk_devices[MAX_NR_MEMBLKS];
+
+static int __init topology_init(void)
+{
+ int i;
+
+ for (i = 0; i < num_online_nodes(); i++)
+ arch_register_node(i);
+ for (i = 0; i < NR_CPUS; i++)
+ if (cpu_possible(i)) arch_register_cpu(i);
+ for (i = 0; i < num_online_memblks(); i++)
+ arch_register_memblk(i);
+ return 0;
+}
+
+#else /* !CONFIG_NUMA */
+
+static int __init topology_init(void)
+{
+ int i;
+
+ for (i = 0; i < NR_CPUS; i++)
+ if (cpu_possible(i)) arch_register_cpu(i);
+ return 0;
+}
+
+#endif /* CONFIG_NUMA */
+
+subsys_initcall(topology_init);
diff -Nru a/arch/i386/mach-generic/Makefile b/arch/i386/mach-generic/Makefile
--- a/arch/i386/mach-generic/Makefile Mon Dec 16 14:34:13 2002
+++ /dev/null Wed Dec 31 16:00:00 1969
@@ -1,7 +0,0 @@
-#
-# Makefile for the linux kernel.
-#
-
-EXTRA_CFLAGS += -I../kernel
-
-obj-y := setup.o topology.o
diff -Nru a/arch/i386/mach-generic/do_timer.h b/arch/i386/mach-generic/do_timer.h
--- a/arch/i386/mach-generic/do_timer.h Mon Dec 16 14:34:13 2002
+++ /dev/null Wed Dec 31 16:00:00 1969
@@ -1,82 +0,0 @@
-/* defines for inline arch setup functions */
-
-#include <asm/apic.h>
-
-/**
- * do_timer_interrupt_hook - hook into timer tick
- * @regs: standard registers from interrupt
- *
- * Description:
- * This hook is called immediately after the timer interrupt is ack'd.
- * It's primary purpose is to allow architectures that don't possess
- * individual per CPU clocks (like the CPU APICs supply) to broadcast the
- * timer interrupt as a means of triggering reschedules etc.
- **/
-
-static inline void do_timer_interrupt_hook(struct pt_regs *regs)
-{
- do_timer(regs);
-/*
- * In the SMP case we use the local APIC timer interrupt to do the
- * profiling, except when we simulate SMP mode on a uniprocessor
- * system, in that case we have to call the local interrupt handler.
- */
-#ifndef CONFIG_X86_LOCAL_APIC
- x86_do_profile(regs);
-#else
- if (!using_apic_timer)
- smp_local_timer_interrupt(regs);
-#endif
-}
-
-
-/* you can safely undefine this if you don't have the Neptune chipset */
-
-#define BUGGY_NEPTUN_TIMER
-
-/**
- * do_timer_overflow - process a detected timer overflow condition
- * @count: hardware timer interrupt count on overflow
- *
- * Description:
- * This call is invoked when the jiffies count has not incremented but
- * the hardware timer interrupt has. It means that a timer tick interrupt
- * came along while the previous one was pending, thus a tick was missed
- **/
-static inline int do_timer_overflow(int count)
-{
- int i;
-
- spin_lock(&i8259A_lock);
- /*
- * This is tricky when I/O APICs are used;
- * see do_timer_interrupt().
- */
- i = inb(0x20);
- spin_unlock(&i8259A_lock);
-
- /* assumption about timer being IRQ0 */
- if (i & 0x01) {
- /*
- * We cannot detect lost timer interrupts ...
- * well, that's why we call them lost, don't we? :)
- * [hmm, on the Pentium and Alpha we can ... sort of]
- */
- count -= LATCH;
- } else {
-#ifdef BUGGY_NEPTUN_TIMER
- /*
- * for the Neptun bug we know that the 'latch'
- * command doesnt latch the high and low value
- * of the counter atomically. Thus we have to
- * substract 256 from the counter
- * ... funny, isnt it? :)
- */
-
- count -= 256;
-#else
- printk("do_slow_gettimeoffset(): hardware timer problem?\n");
-#endif
- }
- return count;
-}
diff -Nru a/arch/i386/mach-generic/entry_arch.h b/arch/i386/mach-generic/entry_arch.h
--- a/arch/i386/mach-generic/entry_arch.h Mon Dec 16 14:34:13 2002
+++ /dev/null Wed Dec 31 16:00:00 1969
@@ -1,34 +0,0 @@
-/*
- * This file is designed to contain the BUILD_INTERRUPT specifications for
- * all of the extra named interrupt vectors used by the architecture.
- * Usually this is the Inter Process Interrupts (IPIs)
- */
-
-/*
- * The following vectors are part of the Linux architecture, there
- * is no hardware IRQ pin equivalent for them, they are triggered
- * through the ICC by us (IPIs)
- */
-#ifdef CONFIG_X86_SMP
-BUILD_INTERRUPT(reschedule_interrupt,RESCHEDULE_VECTOR)
-BUILD_INTERRUPT(invalidate_interrupt,INVALIDATE_TLB_VECTOR)
-BUILD_INTERRUPT(call_function_interrupt,CALL_FUNCTION_VECTOR)
-#endif
-
-/*
- * every pentium local APIC has two 'local interrupts', with a
- * soft-definable vector attached to both interrupts, one of
- * which is a timer interrupt, the other one is error counter
- * overflow. Linux uses the local APIC timer interrupt to get
- * a much simpler SMP time architecture:
- */
-#ifdef CONFIG_X86_LOCAL_APIC
-BUILD_INTERRUPT(apic_timer_interrupt,LOCAL_TIMER_VECTOR)
-BUILD_INTERRUPT(error_interrupt,ERROR_APIC_VECTOR)
-BUILD_INTERRUPT(spurious_interrupt,SPURIOUS_APIC_VECTOR)
-
-#ifdef CONFIG_X86_MCE_P4THERMAL
-BUILD_INTERRUPT(thermal_interrupt,THERMAL_APIC_VECTOR)
-#endif
-
-#endif
diff -Nru a/arch/i386/mach-generic/irq_vectors.h b/arch/i386/mach-generic/irq_vectors.h
--- a/arch/i386/mach-generic/irq_vectors.h Mon Dec 16 14:34:13 2002
+++ /dev/null Wed Dec 31 16:00:00 1969
@@ -1,85 +0,0 @@
-/*
- * This file should contain #defines for all of the interrupt vector
- * numbers used by this architecture.
- *
- * In addition, there are some standard defines:
- *
- * FIRST_EXTERNAL_VECTOR:
- * The first free place for external interrupts
- *
- * SYSCALL_VECTOR:
- * The IRQ vector a syscall makes the user to kernel transition
- * under.
- *
- * TIMER_IRQ:
- * The IRQ number the timer interrupt comes in at.
- *
- * NR_IRQS:
- * The total number of interrupt vectors (including all the
- * architecture specific interrupts) needed.
- *
- */
-#ifndef _ASM_IRQ_VECTORS_H
-#define _ASM_IRQ_VECTORS_H
-
-/*
- * IDT vectors usable for external interrupt sources start
- * at 0x20:
- */
-#define FIRST_EXTERNAL_VECTOR 0x20
-
-#define SYSCALL_VECTOR 0x80
-
-/*
- * Vectors 0x20-0x2f are used for ISA interrupts.
- */
-
-/*
- * Special IRQ vectors used by the SMP architecture, 0xf0-0xff
- *
- * some of the following vectors are 'rare', they are merged
- * into a single vector (CALL_FUNCTION_VECTOR) to save vector space.
- * TLB, reschedule and local APIC vectors are performance-critical.
- *
- * Vectors 0xf0-0xfa are free (reserved for future Linux use).
- */
-#define SPURIOUS_APIC_VECTOR 0xff
-#define ERROR_APIC_VECTOR 0xfe
-#define INVALIDATE_TLB_VECTOR 0xfd
-#define RESCHEDULE_VECTOR 0xfc
-#define CALL_FUNCTION_VECTOR 0xfb
-
-#define THERMAL_APIC_VECTOR 0xf0
-/*
- * Local APIC timer IRQ vector is on a different priority level,
- * to work around the 'lost local interrupt if more than 2 IRQ
- * sources per level' errata.
- */
-#define LOCAL_TIMER_VECTOR 0xef
-
-/*
- * First APIC vector available to drivers: (vectors 0x30-0xee)
- * we start at 0x31 to spread out vectors evenly between priority
- * levels. (0x80 is the syscall vector)
- */
-#define FIRST_DEVICE_VECTOR 0x31
-#define FIRST_SYSTEM_VECTOR 0xef
-
-#define TIMER_IRQ 0
-
-/*
- * 16 8259A IRQ's, 208 potential APIC interrupt sources.
- * Right now the APIC is mostly only used for SMP.
- * 256 vectors is an architectural limit. (we can have
- * more than 256 devices theoretically, but they will
- * have to use shared interrupts)
- * Since vectors 0x00-0x1f are used/reserved for the CPU,
- * the usable vector space is 0x20-0xff (224 vectors)
- */
-#ifdef CONFIG_X86_IO_APIC
-#define NR_IRQS 224
-#else
-#define NR_IRQS 16
-#endif
-
-#endif /* _ASM_IRQ_VECTORS_H */
diff -Nru a/arch/i386/mach-generic/mach_apic.h b/arch/i386/mach-generic/mach_apic.h
--- a/arch/i386/mach-generic/mach_apic.h Mon Dec 16 14:34:13 2002
+++ /dev/null Wed Dec 31 16:00:00 1969
@@ -1,46 +0,0 @@
-#ifndef __ASM_MACH_APIC_H
-#define __ASM_MACH_APIC_H
-
-static inline unsigned long calculate_ldr(unsigned long old)
-{
- unsigned long id;
-
- id = 1UL << smp_processor_id();
- return ((old & ~APIC_LDR_MASK) | SET_APIC_LOGICAL_ID(id));
-}
-
-#define APIC_DFR_VALUE (APIC_DFR_FLAT)
-
-#ifdef CONFIG_SMP
- #define TARGET_CPUS (clustered_apic_mode ? 0xf : cpu_online_map)
-#else
- #define TARGET_CPUS 0x01
-#endif
-
-#define APIC_BROADCAST_ID 0x0F
-#define check_apicid_used(bitmap, apicid) (bitmap & (1 << apicid))
-
-static inline void summit_check(char *oem, char *productid)
-{
-}
-
-static inline void clustered_apic_check(void)
-{
- printk("Enabling APIC mode: %s. Using %d I/O APICs\n",
- (clustered_apic_mode ? "NUMA-Q" : "Flat"), nr_ioapics);
-}
-
-static inline int cpu_present_to_apicid(int mps_cpu)
-{
- if (clustered_apic_mode)
- return ( ((mps_cpu/4)*16) + (1<<(mps_cpu%4)) );
- else
- return mps_cpu;
-}
-
-static inline unsigned long apicid_to_cpu_present(int apicid)
-{
- return (1ul << apicid);
-}
-
-#endif /* __ASM_MACH_APIC_H */
diff -Nru a/arch/i386/mach-generic/setup.c b/arch/i386/mach-generic/setup.c
--- a/arch/i386/mach-generic/setup.c Mon Dec 16 14:34:13 2002
+++ /dev/null Wed Dec 31 16:00:00 1969
@@ -1,104 +0,0 @@
-/*
- * Machine specific setup for generic
- */
-
-#include <linux/config.h>
-#include <linux/smp.h>
-#include <linux/init.h>
-#include <linux/irq.h>
-#include <linux/interrupt.h>
-#include <asm/arch_hooks.h>
-
-/**
- * pre_intr_init_hook - initialisation prior to setting up interrupt vectors
- *
- * Description:
- * Perform any necessary interrupt initialisation prior to setting up
- * the "ordinary" interrupt call gates. For legacy reasons, the ISA
- * interrupts should be initialised here if the machine emulates a PC
- * in any way.
- **/
-void __init pre_intr_init_hook(void)
-{
- init_ISA_irqs();
-}
-
-/*
- * IRQ2 is cascade interrupt to second interrupt controller
- */
-static struct irqaction irq2 = { no_action, 0, 0, "cascade", NULL, NULL};
-
-/**
- * intr_init_hook - post gate setup interrupt initialisation
- *
- * Description:
- * Fill in any interrupts that may have been left out by the general
- * init_IRQ() routine. interrupts having to do with the machine rather
- * than the devices on the I/O bus (like APIC interrupts in intel MP
- * systems) are started here.
- **/
-void __init intr_init_hook(void)
-{
-#ifdef CONFIG_X86_LOCAL_APIC
- apic_intr_init();
-#endif
-
- setup_irq(2, &irq2);
-}
-
-/**
- * pre_setup_arch_hook - hook called prior to any setup_arch() execution
- *
- * Description:
- * generally used to activate any machine specific identification
- * routines that may be needed before setup_arch() runs. On VISWS
- * this is used to get the board revision and type.
- **/
-void __init pre_setup_arch_hook(void)
-{
-}
-
-/**
- * trap_init_hook - initialise system specific traps
- *
- * Description:
- * Called as the final act of trap_init(). Used in VISWS to initialise
- * the various board specific APIC traps.
- **/
-void __init trap_init_hook(void)
-{
-}
-
-static struct irqaction irq0 = { timer_interrupt, SA_INTERRUPT, 0, "timer", NULL, NULL};
-
-/**
- * time_init_hook - do any specific initialisations for the system timer.
- *
- * Description:
- * Must plug the system timer interrupt source at HZ into the IRQ listed
- * in irq_vectors.h:TIMER_IRQ
- **/
-void __init time_init_hook(void)
-{
- setup_irq(0, &irq0);
-}
-
-#ifdef CONFIG_MCA
-/**
- * mca_nmi_hook - hook into MCA specific NMI chain
- *
- * Description:
- * The MCA (Microchannel Arcitecture) has an NMI chain for NMI sources
- * along the MCA bus. Use this to hook into that chain if you will need
- * it.
- **/
-void __init mca_nmi_hook(void)
-{
- /* If I recall correctly, there's a whole bunch of other things that
- * we can do to check for NMI problems, but that's all I know about
- * at the moment.
- */
-
- printk("NMI generated from unknown source!\n");
-}
-#endif
diff -Nru a/arch/i386/mach-generic/setup_arch_post.h b/arch/i386/mach-generic/setup_arch_post.h
--- a/arch/i386/mach-generic/setup_arch_post.h Mon Dec 16 14:34:13 2002
+++ /dev/null Wed Dec 31 16:00:00 1969
@@ -1,40 +0,0 @@
-/**
- * machine_specific_memory_setup - Hook for machine specific memory setup.
- *
- * Description:
- * This is included late in kernel/setup.c so that it can make
- * use of all of the static functions.
- **/
-
-static inline char * __init machine_specific_memory_setup(void)
-{
- char *who;
-
-
- who = "BIOS-e820";
-
- /*
- * Try to copy the BIOS-supplied E820-map.
- *
- * Otherwise fake a memory map; one section from 0k->640k,
- * the next section from 1mb->appropriate_mem_k
- */
- sanitize_e820_map(E820_MAP, &E820_MAP_NR);
- if (copy_e820_map(E820_MAP, E820_MAP_NR) < 0) {
- unsigned long mem_size;
-
- /* compare results from other methods and take the greater */
- if (ALT_MEM_K < EXT_MEM_K) {
- mem_size = EXT_MEM_K;
- who = "BIOS-88";
- } else {
- mem_size = ALT_MEM_K;
- who = "BIOS-e801";
- }
-
- e820.nr_map = 0;
- add_memory_region(0, LOWMEMSIZE(), E820_RAM);
- add_memory_region(HIGH_MEMORY, mem_size << 10, E820_RAM);
- }
- return who;
-}
diff -Nru a/arch/i386/mach-generic/setup_arch_pre.h b/arch/i386/mach-generic/setup_arch_pre.h
--- a/arch/i386/mach-generic/setup_arch_pre.h Mon Dec 16 14:34:13 2002
+++ /dev/null Wed Dec 31 16:00:00 1969
@@ -1,5 +0,0 @@
-/* Hook to call BIOS initialisation function */
-
-/* no action for generic */
-
-#define ARCH_SETUP
diff -Nru a/arch/i386/mach-generic/smpboot_hooks.h b/arch/i386/mach-generic/smpboot_hooks.h
--- a/arch/i386/mach-generic/smpboot_hooks.h Mon Dec 16 14:34:13 2002
+++ /dev/null Wed Dec 31 16:00:00 1969
@@ -1,33 +0,0 @@
-/* two abstractions specific to kernel/smpboot.c, mainly to cater to visws
- * which needs to alter them. */
-
-static inline void smpboot_clear_io_apic_irqs(void)
-{
- io_apic_irqs = 0;
-}
-
-static inline void smpboot_setup_warm_reset_vector(void)
-{
- /*
- * Install writable page 0 entry to set BIOS data area.
- */
- local_flush_tlb();
-
- /*
- * Paranoid: Set warm reset code and vector here back
- * to default values.
- */
- CMOS_WRITE(0, 0xf);
-
- *((volatile long *) phys_to_virt(0x467)) = 0;
-}
-
-static inline void smpboot_setup_io_apic(void)
-{
- /*
- * Here we can be sure that there is an IO-APIC in the system. Let's
- * go and set it up:
- */
- if (!skip_ioapic_setup && nr_ioapics)
- setup_IO_APIC();
-}
diff -Nru a/arch/i386/mach-generic/topology.c b/arch/i386/mach-generic/topology.c
--- a/arch/i386/mach-generic/topology.c Mon Dec 16 14:34:13 2002
+++ /dev/null Wed Dec 31 16:00:00 1969
@@ -1,68 +0,0 @@
-/*
- * arch/i386/mach-generic/topology.c - Populate driverfs with topology information
- *
- * Written by: Matthew Dobson, IBM Corporation
- * Original Code: Paul Dorwin, IBM Corporation, Patrick Mochel, OSDL
- *
- * Copyright (C) 2002, IBM Corp.
- *
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- * NON INFRINGEMENT. See the GNU General Public License for more
- * details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * Send feedback to <colpatch@us.ibm.com>
- */
-#include <linux/init.h>
-#include <linux/smp.h>
-#include <asm/cpu.h>
-
-struct i386_cpu cpu_devices[NR_CPUS];
-
-#ifdef CONFIG_NUMA
-#include <linux/mmzone.h>
-#include <asm/node.h>
-#include <asm/memblk.h>
-
-struct i386_node node_devices[MAX_NUMNODES];
-struct i386_memblk memblk_devices[MAX_NR_MEMBLKS];
-
-static int __init topology_init(void)
-{
- int i;
-
- for (i = 0; i < num_online_nodes(); i++)
- arch_register_node(i);
- for (i = 0; i < NR_CPUS; i++)
- if (cpu_possible(i)) arch_register_cpu(i);
- for (i = 0; i < num_online_memblks(); i++)
- arch_register_memblk(i);
- return 0;
-}
-
-#else /* !CONFIG_NUMA */
-
-static int __init topology_init(void)
-{
- int i;
-
- for (i = 0; i < NR_CPUS; i++)
- if (cpu_possible(i)) arch_register_cpu(i);
- return 0;
-}
-
-#endif /* CONFIG_NUMA */
-
-subsys_initcall(topology_init);
diff -Nru a/arch/i386/mach-summit/mach_apic.h b/arch/i386/mach-summit/mach_apic.h
--- a/arch/i386/mach-summit/mach_apic.h Mon Dec 16 14:34:13 2002
+++ /dev/null Wed Dec 31 16:00:00 1969
@@ -1,57 +0,0 @@
-#ifndef __ASM_MACH_APIC_H
-#define __ASM_MACH_APIC_H
-
-extern int x86_summit;
-
-#define XAPIC_DEST_CPUS_MASK 0x0Fu
-#define XAPIC_DEST_CLUSTER_MASK 0xF0u
-
-#define xapic_phys_to_log_apicid(phys_apic) ( (1ul << ((phys_apic) & 0x3)) |\
- ((phys_apic) & XAPIC_DEST_CLUSTER_MASK) )
-
-static inline unsigned long calculate_ldr(unsigned long old)
-{
- unsigned long id;
-
- if (x86_summit)
- id = xapic_phys_to_log_apicid(hard_smp_processor_id());
- else
- id = 1UL << smp_processor_id();
- return ((old & ~APIC_LDR_MASK) | SET_APIC_LOGICAL_ID(id));
-}
-
-#define APIC_DFR_VALUE (x86_summit ? APIC_DFR_CLUSTER : APIC_DFR_FLAT)
-#define TARGET_CPUS (x86_summit ? XAPIC_DEST_CPUS_MASK : cpu_online_map)
-
-#define APIC_BROADCAST_ID (x86_summit ? 0xFF : 0x0F)
-#define check_apicid_used(bitmap, apicid) (0)
-
-static inline void summit_check(char *oem, char *productid)
-{
- if (!strncmp(oem, "IBM ENSW", 8) && !strncmp(str, "VIGIL SMP", 9))
- x86_summit = 1;
-}
-
-static inline void clustered_apic_check(void)
-{
- printk("Enabling APIC mode: %s. Using %d I/O APICs\n",
- (x86_summit ? "Summit" : "Flat"), nr_ioapics);
-}
-
-static inline int cpu_present_to_apicid(int mps_cpu)
-{
- if (x86_summit)
- return (int) raw_phys_apicid[mps_cpu];
- else
- return mps_cpu;
-}
-
-static inline unsigned long apicid_to_phys_cpu_present(int apicid)
-{
- if (x86_summit)
- return (1ul << (((apicid >> 4) << 2) | (apicid & 0x3)));
- else
- return (1ul << apicid);
-}
-
-#endif /* __ASM_MACH_APIC_H */
diff -Nru a/arch/i386/mach-visws/do_timer.h b/arch/i386/mach-visws/do_timer.h
--- a/arch/i386/mach-visws/do_timer.h Mon Dec 16 14:34:13 2002
+++ /dev/null Wed Dec 31 16:00:00 1969
@@ -1,49 +0,0 @@
-/* defines for inline arch setup functions */
-
-#include <asm/fixmap.h>
-#include <asm/cobalt.h>
-
-static inline void do_timer_interrupt_hook(struct pt_regs *regs)
-{
- /* Clear the interrupt */
- co_cpu_write(CO_CPU_STAT,co_cpu_read(CO_CPU_STAT) & ~CO_STAT_TIMEINTR);
-
- do_timer(regs);
-/*
- * In the SMP case we use the local APIC timer interrupt to do the
- * profiling, except when we simulate SMP mode on a uniprocessor
- * system, in that case we have to call the local interrupt handler.
- */
-#ifndef CONFIG_X86_LOCAL_APIC
- x86_do_profile(regs);
-#else
- if (!using_apic_timer)
- smp_local_timer_interrupt(regs);
-#endif
-}
-
-static inline int do_timer_overflow(int count)
-{
- int i;
-
- spin_lock(&i8259A_lock);
- /*
- * This is tricky when I/O APICs are used;
- * see do_timer_interrupt().
- */
- i = inb(0x20);
- spin_unlock(&i8259A_lock);
-
- /* assumption about timer being IRQ0 */
- if (i & 0x01) {
- /*
- * We cannot detect lost timer interrupts ...
- * well, that's why we call them lost, don't we? :)
- * [hmm, on the Pentium and Alpha we can ... sort of]
- */
- count -= LATCH;
- } else {
- printk("do_slow_gettimeoffset(): hardware timer problem?\n");
- }
- return count;
-}
diff -Nru a/arch/i386/mach-visws/entry_arch.h b/arch/i386/mach-visws/entry_arch.h
--- a/arch/i386/mach-visws/entry_arch.h Mon Dec 16 14:34:13 2002
+++ /dev/null Wed Dec 31 16:00:00 1969
@@ -1,23 +0,0 @@
-/*
- * The following vectors are part of the Linux architecture, there
- * is no hardware IRQ pin equivalent for them, they are triggered
- * through the ICC by us (IPIs)
- */
-#ifdef CONFIG_X86_SMP
-BUILD_INTERRUPT(reschedule_interrupt,RESCHEDULE_VECTOR)
-BUILD_INTERRUPT(invalidate_interrupt,INVALIDATE_TLB_VECTOR)
-BUILD_INTERRUPT(call_function_interrupt,CALL_FUNCTION_VECTOR)
-#endif
-
-/*
- * every pentium local APIC has two 'local interrupts', with a
- * soft-definable vector attached to both interrupts, one of
- * which is a timer interrupt, the other one is error counter
- * overflow. Linux uses the local APIC timer interrupt to get
- * a much simpler SMP time architecture:
- */
-#ifdef CONFIG_X86_LOCAL_APIC
-BUILD_INTERRUPT(apic_timer_interrupt,LOCAL_TIMER_VECTOR)
-BUILD_INTERRUPT(error_interrupt,ERROR_APIC_VECTOR)
-BUILD_INTERRUPT(spurious_interrupt,SPURIOUS_APIC_VECTOR)
-#endif
diff -Nru a/arch/i386/mach-visws/irq_vectors.h b/arch/i386/mach-visws/irq_vectors.h
--- a/arch/i386/mach-visws/irq_vectors.h Mon Dec 16 14:34:13 2002
+++ /dev/null Wed Dec 31 16:00:00 1969
@@ -1,64 +0,0 @@
-#ifndef _ASM_IRQ_VECTORS_H
-#define _ASM_IRQ_VECTORS_H
-
-/*
- * IDT vectors usable for external interrupt sources start
- * at 0x20:
- */
-#define FIRST_EXTERNAL_VECTOR 0x20
-
-#define SYSCALL_VECTOR 0x80
-
-/*
- * Vectors 0x20-0x2f are used for ISA interrupts.
- */
-
-/*
- * Special IRQ vectors used by the SMP architecture, 0xf0-0xff
- *
- * some of the following vectors are 'rare', they are merged
- * into a single vector (CALL_FUNCTION_VECTOR) to save vector space.
- * TLB, reschedule and local APIC vectors are performance-critical.
- *
- * Vectors 0xf0-0xfa are free (reserved for future Linux use).
- */
-#define SPURIOUS_APIC_VECTOR 0xff
-#define ERROR_APIC_VECTOR 0xfe
-#define INVALIDATE_TLB_VECTOR 0xfd
-#define RESCHEDULE_VECTOR 0xfc
-#define CALL_FUNCTION_VECTOR 0xfb
-
-#define THERMAL_APIC_VECTOR 0xf0
-/*
- * Local APIC timer IRQ vector is on a different priority level,
- * to work around the 'lost local interrupt if more than 2 IRQ
- * sources per level' errata.
- */
-#define LOCAL_TIMER_VECTOR 0xef
-
-/*
- * First APIC vector available to drivers: (vectors 0x30-0xee)
- * we start at 0x31 to spread out vectors evenly between priority
- * levels. (0x80 is the syscall vector)
- */
-#define FIRST_DEVICE_VECTOR 0x31
-#define FIRST_SYSTEM_VECTOR 0xef
-
-#define TIMER_IRQ 0
-
-/*
- * 16 8259A IRQ's, 208 potential APIC interrupt sources.
- * Right now the APIC is mostly only used for SMP.
- * 256 vectors is an architectural limit. (we can have
- * more than 256 devices theoretically, but they will
- * have to use shared interrupts)
- * Since vectors 0x00-0x1f are used/reserved for the CPU,
- * the usable vector space is 0x20-0xff (224 vectors)
- */
-#ifdef CONFIG_X86_IO_APIC
-#define NR_IRQS 224
-#else
-#define NR_IRQS 16
-#endif
-
-#endif /* _ASM_IRQ_VECTORS_H */
diff -Nru a/arch/i386/mach-visws/setup_arch_post.h b/arch/i386/mach-visws/setup_arch_post.h
--- a/arch/i386/mach-visws/setup_arch_post.h Mon Dec 16 14:34:13 2002
+++ /dev/null Wed Dec 31 16:00:00 1969
@@ -1,37 +0,0 @@
-/* Hook for machine specific memory setup.
- *
- * This is included late in kernel/setup.c so that it can make use of all of
- * the static functions. */
-
-static inline char * __init machine_specific_memory_setup(void)
-{
- char *who;
-
-
- who = "BIOS-e820";
-
- /*
- * Try to copy the BIOS-supplied E820-map.
- *
- * Otherwise fake a memory map; one section from 0k->640k,
- * the next section from 1mb->appropriate_mem_k
- */
- sanitize_e820_map(E820_MAP, &E820_MAP_NR);
- if (copy_e820_map(E820_MAP, E820_MAP_NR) < 0) {
- unsigned long mem_size;
-
- /* compare results from other methods and take the greater */
- if (ALT_MEM_K < EXT_MEM_K) {
- mem_size = EXT_MEM_K;
- who = "BIOS-88";
- } else {
- mem_size = ALT_MEM_K;
- who = "BIOS-e801";
- }
-
- e820.nr_map = 0;
- add_memory_region(0, LOWMEMSIZE(), E820_RAM);
- add_memory_region(HIGH_MEMORY, mem_size << 10, E820_RAM);
- }
- return who;
-}
diff -Nru a/arch/i386/mach-visws/setup_arch_pre.h b/arch/i386/mach-visws/setup_arch_pre.h
--- a/arch/i386/mach-visws/setup_arch_pre.h Mon Dec 16 14:34:13 2002
+++ /dev/null Wed Dec 31 16:00:00 1969
@@ -1,5 +0,0 @@
-/* Hook to call BIOS initialisation function */
-
-/* no action for visws */
-
-#define ARCH_SETUP
diff -Nru a/arch/i386/mach-visws/smpboot_hooks.h b/arch/i386/mach-visws/smpboot_hooks.h
--- a/arch/i386/mach-visws/smpboot_hooks.h Mon Dec 16 14:34:13 2002
+++ /dev/null Wed Dec 31 16:00:00 1969
@@ -1,13 +0,0 @@
-/* for visws do nothing for any of these */
-
-static inline void smpboot_clear_io_apic_irqs(void)
-{
-}
-
-static inline void smpboot_setup_warm_reset_vector(void)
-{
-}
-
-static inline void smpboot_setup_io_apic(void)
-{
-}
diff -Nru a/arch/i386/mach-voyager/do_timer.h b/arch/i386/mach-voyager/do_timer.h
--- a/arch/i386/mach-voyager/do_timer.h Mon Dec 16 14:34:13 2002
+++ /dev/null Wed Dec 31 16:00:00 1969
@@ -1,22 +0,0 @@
-/* defines for inline arch setup functions */
-#include <asm/voyager.h>
-
-static inline void do_timer_interrupt_hook(struct pt_regs *regs)
-{
- do_timer(regs);
-
- voyager_timer_interrupt(regs);
-}
-
-static inline int do_timer_overflow(int count)
-{
- /* can't read the ISR, just assume 1 tick
- overflow */
- if(count > LATCH || count < 0) {
- printk(KERN_ERR "VOYAGER PROBLEM: count is %d, latch is %d\n", count, LATCH);
- count = LATCH;
- }
- count -= LATCH;
-
- return count;
-}
diff -Nru a/arch/i386/mach-voyager/entry_arch.h b/arch/i386/mach-voyager/entry_arch.h
--- a/arch/i386/mach-voyager/entry_arch.h Mon Dec 16 14:34:13 2002
+++ /dev/null Wed Dec 31 16:00:00 1969
@@ -1,26 +0,0 @@
-/* -*- mode: c; c-basic-offset: 8 -*- */
-
-/* Copyright (C) 2002
- *
- * Author: James.Bottomley@HansenPartnership.com
- *
- * linux/arch/i386/voyager/entry_arch.h
- *
- * This file builds the VIC and QIC CPI gates
- */
-
-/* initialise the voyager interrupt gates
- *
- * This uses the macros in irq.h to set up assembly jump gates. The
- * calls are then redirected to the same routine with smp_ prefixed */
-BUILD_INTERRUPT(vic_sys_interrupt, VIC_SYS_INT)
-BUILD_INTERRUPT(vic_cmn_interrupt, VIC_CMN_INT)
-BUILD_INTERRUPT(vic_cpi_interrupt, VIC_CPI_LEVEL0);
-
-/* do all the QIC interrupts */
-BUILD_INTERRUPT(qic_timer_interrupt, QIC_TIMER_CPI);
-BUILD_INTERRUPT(qic_invalidate_interrupt, QIC_INVALIDATE_CPI);
-BUILD_INTERRUPT(qic_reschedule_interrupt, QIC_RESCHEDULE_CPI);
-BUILD_INTERRUPT(qic_enable_irq_interrupt, QIC_ENABLE_IRQ_CPI);
-BUILD_INTERRUPT(qic_call_function_interrupt, QIC_CALL_FUNCTION_CPI);
-
diff -Nru a/arch/i386/mach-voyager/irq_vectors.h b/arch/i386/mach-voyager/irq_vectors.h
--- a/arch/i386/mach-voyager/irq_vectors.h Mon Dec 16 14:34:13 2002
+++ /dev/null Wed Dec 31 16:00:00 1969
@@ -1,71 +0,0 @@
-/* -*- mode: c; c-basic-offset: 8 -*- */
-
-/* Copyright (C) 2002
- *
- * Author: James.Bottomley@HansenPartnership.com
- *
- * linux/arch/i386/voyager/irq_vectors.h
- *
- * This file provides definitions for the VIC and QIC CPIs
- */
-
-#ifndef _ASM_IRQ_VECTORS_H
-#define _ASM_IRQ_VECTORS_H
-
-/*
- * IDT vectors usable for external interrupt sources start
- * at 0x20:
- */
-#define FIRST_EXTERNAL_VECTOR 0x20
-
-#define SYSCALL_VECTOR 0x80
-
-/*
- * Vectors 0x20-0x2f are used for ISA interrupts.
- */
-
-/* These define the CPIs we use in linux */
-#define VIC_CPI_LEVEL0 0
-#define VIC_CPI_LEVEL1 1
-/* now the fake CPIs */
-#define VIC_TIMER_CPI 2
-#define VIC_INVALIDATE_CPI 3
-#define VIC_RESCHEDULE_CPI 4
-#define VIC_ENABLE_IRQ_CPI 5
-#define VIC_CALL_FUNCTION_CPI 6
-
-/* Now the QIC CPIs: Since we don't need the two initial levels,
- * these are 2 less than the VIC CPIs */
-#define QIC_CPI_OFFSET 1
-#define QIC_TIMER_CPI (VIC_TIMER_CPI - QIC_CPI_OFFSET)
-#define QIC_INVALIDATE_CPI (VIC_INVALIDATE_CPI - QIC_CPI_OFFSET)
-#define QIC_RESCHEDULE_CPI (VIC_RESCHEDULE_CPI - QIC_CPI_OFFSET)
-#define QIC_ENABLE_IRQ_CPI (VIC_ENABLE_IRQ_CPI - QIC_CPI_OFFSET)
-#define QIC_CALL_FUNCTION_CPI (VIC_CALL_FUNCTION_CPI - QIC_CPI_OFFSET)
-
-#define VIC_START_FAKE_CPI VIC_TIMER_CPI
-#define VIC_END_FAKE_CPI VIC_CALL_FUNCTION_CPI
-
-/* this is the SYS_INT CPI. */
-#define VIC_SYS_INT 8
-#define VIC_CMN_INT 15
-
-/* This is the boot CPI for alternate processors. It gets overwritten
- * by the above once the system has activated all available processors */
-#define VIC_CPU_BOOT_CPI VIC_CPI_LEVEL0
-#define VIC_CPU_BOOT_ERRATA_CPI (VIC_CPI_LEVEL0 + 8)
-
-#define NR_IRQS 224
-
-#ifndef __ASSEMBLY__
-extern asmlinkage void vic_cpi_interrupt(void);
-extern asmlinkage void vic_sys_interrupt(void);
-extern asmlinkage void vic_cmn_interrupt(void);
-extern asmlinkage void qic_timer_interrupt(void);
-extern asmlinkage void qic_invalidate_interrupt(void);
-extern asmlinkage void qic_reschedule_interrupt(void);
-extern asmlinkage void qic_enable_irq_interrupt(void);
-extern asmlinkage void qic_call_function_interrupt(void);
-#endif /* !__ASSEMBLY__ */
-
-#endif /* _ASM_IRQ_VECTORS_H */
diff -Nru a/arch/i386/mach-voyager/setup_arch_post.h b/arch/i386/mach-voyager/setup_arch_post.h
--- a/arch/i386/mach-voyager/setup_arch_post.h Mon Dec 16 14:34:13 2002
+++ /dev/null Wed Dec 31 16:00:00 1969
@@ -1,73 +0,0 @@
-/* Hook for machine specific memory setup.
- *
- * This is included late in kernel/setup.c so that it can make use of all of
- * the static functions. */
-
-static inline char * __init machine_specific_memory_setup(void)
-{
- char *who;
-
- who = "NOT VOYAGER";
-
- if(voyager_level == 5) {
- __u32 addr, length;
- int i;
-
- who = "Voyager-SUS";
-
- e820.nr_map = 0;
- for(i=0; voyager_memory_detect(i, &addr, &length); i++) {
- add_memory_region(addr, length, E820_RAM);
- }
- return who;
- } else if(voyager_level == 4) {
- __u32 tom;
- __u16 catbase = inb(VOYAGER_SSPB_RELOCATION_PORT)<<8;
- /* select the DINO config space */
- outb(VOYAGER_DINO, VOYAGER_CAT_CONFIG_PORT);
- /* Read DINO top of memory register */
- tom = ((inb(catbase + 0x4) & 0xf0) << 16)
- + ((inb(catbase + 0x5) & 0x7f) << 24);
-
- if(inb(catbase) != VOYAGER_DINO) {
- printk(KERN_ERR "Voyager: Failed to get DINO for L4, setting tom to EXT_MEM_K\n");
- tom = (EXT_MEM_K)<<10;
- }
- who = "Voyager-TOM";
- add_memory_region(0, 0x9f000, E820_RAM);
- /* map from 1M to top of memory */
- add_memory_region(1*1024*1024, tom - 1*1024*1024, E820_RAM);
- /* FIXME: Should check the ASICs to see if I need to
- * take out the 8M window. Just do it at the moment
- * */
- add_memory_region(8*1024*1024, 8*1024*1024, E820_RESERVED);
- return who;
- }
-
- who = "BIOS-e820";
-
- /*
- * Try to copy the BIOS-supplied E820-map.
- *
- * Otherwise fake a memory map; one section from 0k->640k,
- * the next section from 1mb->appropriate_mem_k
- */
- sanitize_e820_map(E820_MAP, &E820_MAP_NR);
- if (copy_e820_map(E820_MAP, E820_MAP_NR) < 0) {
- unsigned long mem_size;
-
- /* compare results from other methods and take the greater */
- if (ALT_MEM_K < EXT_MEM_K) {
- mem_size = EXT_MEM_K;
- who = "BIOS-88";
- } else {
- mem_size = ALT_MEM_K;
- who = "BIOS-e801";
- }
-
- e820.nr_map = 0;
- add_memory_region(0, LOWMEMSIZE(), E820_RAM);
- add_memory_region(HIGH_MEMORY, mem_size << 10, E820_RAM);
- }
- return who;
-}
diff -Nru a/arch/i386/mach-voyager/setup_arch_pre.h b/arch/i386/mach-voyager/setup_arch_pre.h
--- a/arch/i386/mach-voyager/setup_arch_pre.h Mon Dec 16 14:34:13 2002
+++ /dev/null Wed Dec 31 16:00:00 1969
@@ -1,10 +0,0 @@
-#include <asm/voyager.h>
-#define VOYAGER_BIOS_INFO ((struct voyager_bios_info *)(PARAM+0x40))
-
-/* Hook to call BIOS initialisation function */
-
-/* for voyager, pass the voyager BIOS/SUS info area to the detection
- * routines */
-
-#define ARCH_SETUP voyager_detect(VOYAGER_BIOS_INFO);
-
diff -Nru a/include/asm-i386/mach-default/do_timer.h b/include/asm-i386/mach-default/do_timer.h
--- /dev/null Wed Dec 31 16:00:00 1969
+++ b/include/asm-i386/mach-default/do_timer.h Mon Dec 16 14:34:13 2002
@@ -0,0 +1,82 @@
+/* defines for inline arch setup functions */
+
+#include <asm/apic.h>
+
+/**
+ * do_timer_interrupt_hook - hook into timer tick
+ * @regs: standard registers from interrupt
+ *
+ * Description:
+ * This hook is called immediately after the timer interrupt is ack'd.
+ * It's primary purpose is to allow architectures that don't possess
+ * individual per CPU clocks (like the CPU APICs supply) to broadcast the
+ * timer interrupt as a means of triggering reschedules etc.
+ **/
+
+static inline void do_timer_interrupt_hook(struct pt_regs *regs)
+{
+ do_timer(regs);
+/*
+ * In the SMP case we use the local APIC timer interrupt to do the
+ * profiling, except when we simulate SMP mode on a uniprocessor
+ * system, in that case we have to call the local interrupt handler.
+ */
+#ifndef CONFIG_X86_LOCAL_APIC
+ x86_do_profile(regs);
+#else
+ if (!using_apic_timer)
+ smp_local_timer_interrupt(regs);
+#endif
+}
+
+
+/* you can safely undefine this if you don't have the Neptune chipset */
+
+#define BUGGY_NEPTUN_TIMER
+
+/**
+ * do_timer_overflow - process a detected timer overflow condition
+ * @count: hardware timer interrupt count on overflow
+ *
+ * Description:
+ * This call is invoked when the jiffies count has not incremented but
+ * the hardware timer interrupt has. It means that a timer tick interrupt
+ * came along while the previous one was pending, thus a tick was missed
+ **/
+static inline int do_timer_overflow(int count)
+{
+ int i;
+
+ spin_lock(&i8259A_lock);
+ /*
+ * This is tricky when I/O APICs are used;
+ * see do_timer_interrupt().
+ */
+ i = inb(0x20);
+ spin_unlock(&i8259A_lock);
+
+ /* assumption about timer being IRQ0 */
+ if (i & 0x01) {
+ /*
+ * We cannot detect lost timer interrupts ...
+ * well, that's why we call them lost, don't we? :)
+ * [hmm, on the Pentium and Alpha we can ... sort of]
+ */
+ count -= LATCH;
+ } else {
+#ifdef BUGGY_NEPTUN_TIMER
+ /*
+ * for the Neptun bug we know that the 'latch'
+ * command doesnt latch the high and low value
+ * of the counter atomically. Thus we have to
+ * substract 256 from the counter
+ * ... funny, isnt it? :)
+ */
+
+ count -= 256;
+#else
+ printk("do_slow_gettimeoffset(): hardware timer problem?\n");
+#endif
+ }
+ return count;
+}
diff -Nru a/include/asm-i386/mach-default/entry_arch.h b/include/asm-i386/mach-default/entry_arch.h
--- /dev/null Wed Dec 31 16:00:00 1969
+++ b/include/asm-i386/mach-default/entry_arch.h Mon Dec 16 14:34:13 2002
@@ -0,0 +1,34 @@
+/*
+ * This file is designed to contain the BUILD_INTERRUPT specifications for
+ * all of the extra named interrupt vectors used by the architecture.
+ * Usually this is the Inter Process Interrupts (IPIs)
+ */
+
+/*
+ * The following vectors are part of the Linux architecture, there
+ * is no hardware IRQ pin equivalent for them, they are triggered
+ * through the ICC by us (IPIs)
+ */
+#ifdef CONFIG_X86_SMP
+BUILD_INTERRUPT(reschedule_interrupt,RESCHEDULE_VECTOR)
+BUILD_INTERRUPT(invalidate_interrupt,INVALIDATE_TLB_VECTOR)
+BUILD_INTERRUPT(call_function_interrupt,CALL_FUNCTION_VECTOR)
+#endif
+
+/*
+ * every pentium local APIC has two 'local interrupts', with a
+ * soft-definable vector attached to both interrupts, one of
+ * which is a timer interrupt, the other one is error counter
+ * overflow. Linux uses the local APIC timer interrupt to get
+ * a much simpler SMP time architecture:
+ */
+#ifdef CONFIG_X86_LOCAL_APIC
+BUILD_INTERRUPT(apic_timer_interrupt,LOCAL_TIMER_VECTOR)
+BUILD_INTERRUPT(error_interrupt,ERROR_APIC_VECTOR)
+BUILD_INTERRUPT(spurious_interrupt,SPURIOUS_APIC_VECTOR)
+
+#ifdef CONFIG_X86_MCE_P4THERMAL
+BUILD_INTERRUPT(thermal_interrupt,THERMAL_APIC_VECTOR)
+#endif
+
+#endif
diff -Nru a/include/asm-i386/mach-default/irq_vectors.h b/include/asm-i386/mach-default/irq_vectors.h
--- /dev/null Wed Dec 31 16:00:00 1969
+++ b/include/asm-i386/mach-default/irq_vectors.h Mon Dec 16 14:34:13 2002
@@ -0,0 +1,85 @@
+/*
+ * This file should contain #defines for all of the interrupt vector
+ * numbers used by this architecture.
+ *
+ * In addition, there are some standard defines:
+ *
+ * FIRST_EXTERNAL_VECTOR:
+ * The first free place for external interrupts
+ *
+ * SYSCALL_VECTOR:
+ * The IRQ vector a syscall makes the user to kernel transition
+ * under.
+ *
+ * TIMER_IRQ:
+ * The IRQ number the timer interrupt comes in at.
+ *
+ * NR_IRQS:
+ * The total number of interrupt vectors (including all the
+ * architecture specific interrupts) needed.
+ *
+ */
+#ifndef _ASM_IRQ_VECTORS_H
+#define _ASM_IRQ_VECTORS_H
+
+/*
+ * IDT vectors usable for external interrupt sources start
+ * at 0x20:
+ */
+#define FIRST_EXTERNAL_VECTOR 0x20
+
+#define SYSCALL_VECTOR 0x80
+
+/*
+ * Vectors 0x20-0x2f are used for ISA interrupts.
+ */
+
+/*
+ * Special IRQ vectors used by the SMP architecture, 0xf0-0xff
+ *
+ * some of the following vectors are 'rare', they are merged
+ * into a single vector (CALL_FUNCTION_VECTOR) to save vector space.
+ * TLB, reschedule and local APIC vectors are performance-critical.
+ *
+ * Vectors 0xf0-0xfa are free (reserved for future Linux use).
+ */
+#define SPURIOUS_APIC_VECTOR 0xff
+#define ERROR_APIC_VECTOR 0xfe
+#define INVALIDATE_TLB_VECTOR 0xfd
+#define RESCHEDULE_VECTOR 0xfc
+#define CALL_FUNCTION_VECTOR 0xfb
+
+#define THERMAL_APIC_VECTOR 0xf0
+/*
+ * Local APIC timer IRQ vector is on a different priority level,
+ * to work around the 'lost local interrupt if more than 2 IRQ
+ * sources per level' errata.
+ */
+#define LOCAL_TIMER_VECTOR 0xef
+
+/*
+ * First APIC vector available to drivers: (vectors 0x30-0xee)
+ * we start at 0x31 to spread out vectors evenly between priority
+ * levels. (0x80 is the syscall vector)
+ */
+#define FIRST_DEVICE_VECTOR 0x31
+#define FIRST_SYSTEM_VECTOR 0xef
+
+#define TIMER_IRQ 0
+
+/*
+ * 16 8259A IRQ's, 208 potential APIC interrupt sources.
+ * Right now the APIC is mostly only used for SMP.
+ * 256 vectors is an architectural limit. (we can have
+ * more than 256 devices theoretically, but they will
+ * have to use shared interrupts)
+ * Since vectors 0x00-0x1f are used/reserved for the CPU,
+ * the usable vector space is 0x20-0xff (224 vectors)
+ */
+#ifdef CONFIG_X86_IO_APIC
+#define NR_IRQS 224
+#else
+#define NR_IRQS 16
+#endif
+
+#endif /* _ASM_IRQ_VECTORS_H */
diff -Nru a/include/asm-i386/mach-default/mach_apic.h b/include/asm-i386/mach-default/mach_apic.h
--- /dev/null Wed Dec 31 16:00:00 1969
+++ b/include/asm-i386/mach-default/mach_apic.h Mon Dec 16 14:34:13 2002
@@ -0,0 +1,46 @@
+#ifndef __ASM_MACH_APIC_H
+#define __ASM_MACH_APIC_H
+
+static inline unsigned long calculate_ldr(unsigned long old)
+{
+ unsigned long id;
+
+ id = 1UL << smp_processor_id();
+ return ((old & ~APIC_LDR_MASK) | SET_APIC_LOGICAL_ID(id));
+}
+
+#define APIC_DFR_VALUE (APIC_DFR_FLAT)
+
+#ifdef CONFIG_SMP
+ #define TARGET_CPUS (clustered_apic_mode ? 0xf : cpu_online_map)
+#else
+ #define TARGET_CPUS 0x01
+#endif
+
+#define APIC_BROADCAST_ID 0x0F
+#define check_apicid_used(bitmap, apicid) (bitmap & (1 << apicid))
+
+static inline void summit_check(char *oem, char *productid)
+{
+}
+
+static inline void clustered_apic_check(void)
+{
+ printk("Enabling APIC mode: %s. Using %d I/O APICs\n",
+ (clustered_apic_mode ? "NUMA-Q" : "Flat"), nr_ioapics);
+}
+
+static inline int cpu_present_to_apicid(int mps_cpu)
+{
+ if (clustered_apic_mode)
+ return ( ((mps_cpu/4)*16) + (1<<(mps_cpu%4)) );
+ else
+ return mps_cpu;
+}
+
+static inline unsigned long apicid_to_cpu_present(int apicid)
+{
+ return (1ul << apicid);
+}
+
+#endif /* __ASM_MACH_APIC_H */
diff -Nru a/include/asm-i386/mach-default/setup_arch_post.h b/include/asm-i386/mach-default/setup_arch_post.h
--- /dev/null Wed Dec 31 16:00:00 1969
+++ b/include/asm-i386/mach-default/setup_arch_post.h Mon Dec 16 14:34:13 2002
@@ -0,0 +1,40 @@
+/**
+ * machine_specific_memory_setup - Hook for machine specific memory setup.
+ *
+ * Description:
+ * This is included late in kernel/setup.c so that it can make
+ * use of all of the static functions.
+ **/
+
+static inline char * __init machine_specific_memory_setup(void)
+{
+ char *who;
+
+
+ who = "BIOS-e820";
+
+ /*
+ * Try to copy the BIOS-supplied E820-map.
+ *
+ * Otherwise fake a memory map; one section from 0k->640k,
+ * the next section from 1mb->appropriate_mem_k
+ */
+ sanitize_e820_map(E820_MAP, &E820_MAP_NR);
+ if (copy_e820_map(E820_MAP, E820_MAP_NR) < 0) {
+ unsigned long mem_size;
+
+ /* compare results from other methods and take the greater */
+ if (ALT_MEM_K < EXT_MEM_K) {
+ mem_size = EXT_MEM_K;
+ who = "BIOS-88";
+ } else {
+ mem_size = ALT_MEM_K;
+ who = "BIOS-e801";
+ }
+
+ e820.nr_map = 0;
+ add_memory_region(0, LOWMEMSIZE(), E820_RAM);
+ add_memory_region(HIGH_MEMORY, mem_size << 10, E820_RAM);
+ }
+ return who;
+}
diff -Nru a/include/asm-i386/mach-default/setup_arch_pre.h b/include/asm-i386/mach-default/setup_arch_pre.h
--- /dev/null Wed Dec 31 16:00:00 1969
+++ b/include/asm-i386/mach-default/setup_arch_pre.h Mon Dec 16 14:34:13 2002
@@ -0,0 +1,5 @@
+/* Hook to call BIOS initialisation function */
+
+/* no action for generic */
+
+#define ARCH_SETUP
diff -Nru a/include/asm-i386/mach-default/smpboot_hooks.h b/include/asm-i386/mach-default/smpboot_hooks.h
--- /dev/null Wed Dec 31 16:00:00 1969
+++ b/include/asm-i386/mach-default/smpboot_hooks.h Mon Dec 16 14:34:13 2002
@@ -0,0 +1,33 @@
+/* two abstractions specific to kernel/smpboot.c, mainly to cater to visws
+ * which needs to alter them. */
+
+static inline void smpboot_clear_io_apic_irqs(void)
+{
+ io_apic_irqs = 0;
+}
+
+static inline void smpboot_setup_warm_reset_vector(void)
+{
+ /*
+ * Install writable page 0 entry to set BIOS data area.
+ */
+ local_flush_tlb();
+
+ /*
+ * Paranoid: Set warm reset code and vector here back
+ * to default values.
+ */
+ CMOS_WRITE(0, 0xf);
+
+ *((volatile long *) phys_to_virt(0x467)) = 0;
+}
+
+static inline void smpboot_setup_io_apic(void)
+{
+ /*
+ * Here we can be sure that there is an IO-APIC in the system. Let's
+ * go and set it up:
+ */
+ if (!skip_ioapic_setup && nr_ioapics)
+ setup_IO_APIC();
+}
diff -Nru a/include/asm-i386/mach-summit/mach_apic.h b/include/asm-i386/mach-summit/mach_apic.h
--- /dev/null Wed Dec 31 16:00:00 1969
+++ b/include/asm-i386/mach-summit/mach_apic.h Mon Dec 16 14:34:13 2002
@@ -0,0 +1,57 @@
+#ifndef __ASM_MACH_APIC_H
+#define __ASM_MACH_APIC_H
+
+extern int x86_summit;
+
+#define XAPIC_DEST_CPUS_MASK 0x0Fu
+#define XAPIC_DEST_CLUSTER_MASK 0xF0u
+
+#define xapic_phys_to_log_apicid(phys_apic) ( (1ul << ((phys_apic) & 0x3)) |\
+ ((phys_apic) & XAPIC_DEST_CLUSTER_MASK) )
+
+static inline unsigned long calculate_ldr(unsigned long old)
+{
+ unsigned long id;
+
+ if (x86_summit)
+ id = xapic_phys_to_log_apicid(hard_smp_processor_id());
+ else
+ id = 1UL << smp_processor_id();
+ return ((old & ~APIC_LDR_MASK) | SET_APIC_LOGICAL_ID(id));
+}
+
+#define APIC_DFR_VALUE (x86_summit ? APIC_DFR_CLUSTER : APIC_DFR_FLAT)
+#define TARGET_CPUS (x86_summit ? XAPIC_DEST_CPUS_MASK : cpu_online_map)
+
+#define APIC_BROADCAST_ID (x86_summit ? 0xFF : 0x0F)
+#define check_apicid_used(bitmap, apicid) (0)
+
+static inline void summit_check(char *oem, char *productid)
+{
+ if (!strncmp(oem, "IBM ENSW", 8) && !strncmp(str, "VIGIL SMP", 9))
+ x86_summit = 1;
+}
+
+static inline void clustered_apic_check(void)
+{
+ printk("Enabling APIC mode: %s. Using %d I/O APICs\n",
+ (x86_summit ? "Summit" : "Flat"), nr_ioapics);
+}
+
+static inline int cpu_present_to_apicid(int mps_cpu)
+{
+ if (x86_summit)
+ return (int) raw_phys_apicid[mps_cpu];
+ else
+ return mps_cpu;
+}
+
+static inline unsigned long apicid_to_phys_cpu_present(int apicid)
+{
+ if (x86_summit)
+ return (1ul << (((apicid >> 4) << 2) | (apicid & 0x3)));
+ else
+ return (1ul << apicid);
+}
+
+#endif /* __ASM_MACH_APIC_H */
diff -Nru a/include/asm-i386/mach-visws/do_timer.h b/include/asm-i386/mach-visws/do_timer.h
--- /dev/null Wed Dec 31 16:00:00 1969
+++ b/include/asm-i386/mach-visws/do_timer.h Mon Dec 16 14:34:13 2002
@@ -0,0 +1,49 @@
+/* defines for inline arch setup functions */
+
+#include <asm/fixmap.h>
+#include <asm/cobalt.h>
+
+static inline void do_timer_interrupt_hook(struct pt_regs *regs)
+{
+ /* Clear the interrupt */
+ co_cpu_write(CO_CPU_STAT,co_cpu_read(CO_CPU_STAT) & ~CO_STAT_TIMEINTR);
+
+ do_timer(regs);
+/*
+ * In the SMP case we use the local APIC timer interrupt to do the
+ * profiling, except when we simulate SMP mode on a uniprocessor
+ * system, in that case we have to call the local interrupt handler.
+ */
+#ifndef CONFIG_X86_LOCAL_APIC
+ x86_do_profile(regs);
+#else
+ if (!using_apic_timer)
+ smp_local_timer_interrupt(regs);
+#endif
+}
+
+static inline int do_timer_overflow(int count)
+{
+ int i;
+
+ spin_lock(&i8259A_lock);
+ /*
+ * This is tricky when I/O APICs are used;
+ * see do_timer_interrupt().
+ */
+ i = inb(0x20);
+ spin_unlock(&i8259A_lock);
+
+ /* assumption about timer being IRQ0 */
+ if (i & 0x01) {
+ /*
+ * We cannot detect lost timer interrupts ...
+ * well, that's why we call them lost, don't we? :)
+ * [hmm, on the Pentium and Alpha we can ... sort of]
+ */
+ count -= LATCH;
+ } else {
+ printk("do_slow_gettimeoffset(): hardware timer problem?\n");
+ }
+ return count;
+}
diff -Nru a/include/asm-i386/mach-visws/entry_arch.h b/include/asm-i386/mach-visws/entry_arch.h
--- /dev/null Wed Dec 31 16:00:00 1969
+++ b/include/asm-i386/mach-visws/entry_arch.h Mon Dec 16 14:34:13 2002
@@ -0,0 +1,23 @@
+/*
+ * The following vectors are part of the Linux architecture, there
+ * is no hardware IRQ pin equivalent for them, they are triggered
+ * through the ICC by us (IPIs)
+ */
+#ifdef CONFIG_X86_SMP
+BUILD_INTERRUPT(reschedule_interrupt,RESCHEDULE_VECTOR)
+BUILD_INTERRUPT(invalidate_interrupt,INVALIDATE_TLB_VECTOR)
+BUILD_INTERRUPT(call_function_interrupt,CALL_FUNCTION_VECTOR)
+#endif
+
+/*
+ * every pentium local APIC has two 'local interrupts', with a
+ * soft-definable vector attached to both interrupts, one of
+ * which is a timer interrupt, the other one is error counter
+ * overflow. Linux uses the local APIC timer interrupt to get
+ * a much simpler SMP time architecture:
+ */
+#ifdef CONFIG_X86_LOCAL_APIC
+BUILD_INTERRUPT(apic_timer_interrupt,LOCAL_TIMER_VECTOR)
+BUILD_INTERRUPT(error_interrupt,ERROR_APIC_VECTOR)
+BUILD_INTERRUPT(spurious_interrupt,SPURIOUS_APIC_VECTOR)
+#endif
diff -Nru a/include/asm-i386/mach-visws/irq_vectors.h b/include/asm-i386/mach-visws/irq_vectors.h
--- /dev/null Wed Dec 31 16:00:00 1969
+++ b/include/asm-i386/mach-visws/irq_vectors.h Mon Dec 16 14:34:13 2002
@@ -0,0 +1,64 @@
+#ifndef _ASM_IRQ_VECTORS_H
+#define _ASM_IRQ_VECTORS_H
+
+/*
+ * IDT vectors usable for external interrupt sources start
+ * at 0x20:
+ */
+#define FIRST_EXTERNAL_VECTOR 0x20
+
+#define SYSCALL_VECTOR 0x80
+
+/*
+ * Vectors 0x20-0x2f are used for ISA interrupts.
+ */
+
+/*
+ * Special IRQ vectors used by the SMP architecture, 0xf0-0xff
+ *
+ * some of the following vectors are 'rare', they are merged
+ * into a single vector (CALL_FUNCTION_VECTOR) to save vector space.
+ * TLB, reschedule and local APIC vectors are performance-critical.
+ *
+ * Vectors 0xf0-0xfa are free (reserved for future Linux use).
+ */
+#define SPURIOUS_APIC_VECTOR 0xff
+#define ERROR_APIC_VECTOR 0xfe
+#define INVALIDATE_TLB_VECTOR 0xfd
+#define RESCHEDULE_VECTOR 0xfc
+#define CALL_FUNCTION_VECTOR 0xfb
+
+#define THERMAL_APIC_VECTOR 0xf0
+/*
+ * Local APIC timer IRQ vector is on a different priority level,
+ * to work around the 'lost local interrupt if more than 2 IRQ
+ * sources per level' errata.
+ */
+#define LOCAL_TIMER_VECTOR 0xef
+
+/*
+ * First APIC vector available to drivers: (vectors 0x30-0xee)
+ * we start at 0x31 to spread out vectors evenly between priority
+ * levels. (0x80 is the syscall vector)
+ */
+#define FIRST_DEVICE_VECTOR 0x31
+#define FIRST_SYSTEM_VECTOR 0xef
+
+#define TIMER_IRQ 0
+
+/*
+ * 16 8259A IRQ's, 208 potential APIC interrupt sources.
+ * Right now the APIC is mostly only used for SMP.
+ * 256 vectors is an architectural limit. (we can have
+ * more than 256 devices theoretically, but they will
+ * have to use shared interrupts)
+ * Since vectors 0x00-0x1f are used/reserved for the CPU,
+ * the usable vector space is 0x20-0xff (224 vectors)
+ */
+#ifdef CONFIG_X86_IO_APIC
+#define NR_IRQS 224
+#else
+#define NR_IRQS 16
+#endif
+
+#endif /* _ASM_IRQ_VECTORS_H */
diff -Nru a/include/asm-i386/mach-visws/setup_arch_post.h b/include/asm-i386/mach-visws/setup_arch_post.h
--- /dev/null Wed Dec 31 16:00:00 1969
+++ b/include/asm-i386/mach-visws/setup_arch_post.h Mon Dec 16 14:34:13 2002
@@ -0,0 +1,37 @@
+/* Hook for machine specific memory setup.
+ *
+ * This is included late in kernel/setup.c so that it can make use of all of
+ * the static functions. */
+
+static inline char * __init machine_specific_memory_setup(void)
+{
+ char *who;
+
+
+ who = "BIOS-e820";
+
+ /*
+ * Try to copy the BIOS-supplied E820-map.
+ *
+ * Otherwise fake a memory map; one section from 0k->640k,
+ * the next section from 1mb->appropriate_mem_k
+ */
+ sanitize_e820_map(E820_MAP, &E820_MAP_NR);
+ if (copy_e820_map(E820_MAP, E820_MAP_NR) < 0) {
+ unsigned long mem_size;
+
+ /* compare results from other methods and take the greater */
+ if (ALT_MEM_K < EXT_MEM_K) {
+ mem_size = EXT_MEM_K;
+ who = "BIOS-88";
+ } else {
+ mem_size = ALT_MEM_K;
+ who = "BIOS-e801";
+ }
+
+ e820.nr_map = 0;
+ add_memory_region(0, LOWMEMSIZE(), E820_RAM);
+ add_memory_region(HIGH_MEMORY, mem_size << 10, E820_RAM);
+ }
+ return who;
+}
diff -Nru a/include/asm-i386/mach-visws/setup_arch_pre.h b/include/asm-i386/mach-visws/setup_arch_pre.h
--- /dev/null Wed Dec 31 16:00:00 1969
+++ b/include/asm-i386/mach-visws/setup_arch_pre.h Mon Dec 16 14:34:13 2002
@@ -0,0 +1,5 @@
+/* Hook to call BIOS initialisation function */
+
+/* no action for visws */
+
+#define ARCH_SETUP
diff -Nru a/include/asm-i386/mach-visws/smpboot_hooks.h b/include/asm-i386/mach-visws/smpboot_hooks.h
--- /dev/null Wed Dec 31 16:00:00 1969
+++ b/include/asm-i386/mach-visws/smpboot_hooks.h Mon Dec 16 14:34:13 2002
@@ -0,0 +1,13 @@
+/* for visws do nothing for any of these */
+
+static inline void smpboot_clear_io_apic_irqs(void)
+{
+}
+
+static inline void smpboot_setup_warm_reset_vector(void)
+{
+}
+
+static inline void smpboot_setup_io_apic(void)
+{
+}
diff -Nru a/include/asm-i386/mach-voyager/do_timer.h b/include/asm-i386/mach-voyager/do_timer.h
--- /dev/null Wed Dec 31 16:00:00 1969
+++ b/include/asm-i386/mach-voyager/do_timer.h Mon Dec 16 14:34:13 2002
@@ -0,0 +1,22 @@
+/* defines for inline arch setup functions */
+#include <asm/voyager.h>
+
+static inline void do_timer_interrupt_hook(struct pt_regs *regs)
+{
+ do_timer(regs);
+
+ voyager_timer_interrupt(regs);
+}
+
+static inline int do_timer_overflow(int count)
+{
+ /* can't read the ISR, just assume 1 tick
+ overflow */
+ if(count > LATCH || count < 0) {
+ printk(KERN_ERR "VOYAGER PROBLEM: count is %d, latch is %d\n", count, LATCH);
+ count = LATCH;
+ }
+ count -= LATCH;
+
+ return count;
+}
diff -Nru a/include/asm-i386/mach-voyager/entry_arch.h b/include/asm-i386/mach-voyager/entry_arch.h
--- /dev/null Wed Dec 31 16:00:00 1969
+++ b/include/asm-i386/mach-voyager/entry_arch.h Mon Dec 16 14:34:13 2002
@@ -0,0 +1,26 @@
+/* -*- mode: c; c-basic-offset: 8 -*- */
+
+/* Copyright (C) 2002
+ *
+ * Author: James.Bottomley@HansenPartnership.com
+ *
+ * linux/arch/i386/voyager/entry_arch.h
+ *
+ * This file builds the VIC and QIC CPI gates
+ */
+
+/* initialise the voyager interrupt gates
+ *
+ * This uses the macros in irq.h to set up assembly jump gates. The
+ * calls are then redirected to the same routine with smp_ prefixed */
+BUILD_INTERRUPT(vic_sys_interrupt, VIC_SYS_INT)
+BUILD_INTERRUPT(vic_cmn_interrupt, VIC_CMN_INT)
+BUILD_INTERRUPT(vic_cpi_interrupt, VIC_CPI_LEVEL0);
+
+/* do all the QIC interrupts */
+BUILD_INTERRUPT(qic_timer_interrupt, QIC_TIMER_CPI);
+BUILD_INTERRUPT(qic_invalidate_interrupt, QIC_INVALIDATE_CPI);
+BUILD_INTERRUPT(qic_reschedule_interrupt, QIC_RESCHEDULE_CPI);
+BUILD_INTERRUPT(qic_enable_irq_interrupt, QIC_ENABLE_IRQ_CPI);
+BUILD_INTERRUPT(qic_call_function_interrupt, QIC_CALL_FUNCTION_CPI);
+
diff -Nru a/include/asm-i386/mach-voyager/irq_vectors.h b/include/asm-i386/mach-voyager/irq_vectors.h
--- /dev/null Wed Dec 31 16:00:00 1969
+++ b/include/asm-i386/mach-voyager/irq_vectors.h Mon Dec 16 14:34:13 2002
@@ -0,0 +1,71 @@
+/* -*- mode: c; c-basic-offset: 8 -*- */
+
+/* Copyright (C) 2002
+ *
+ * Author: James.Bottomley@HansenPartnership.com
+ *
+ * linux/arch/i386/voyager/irq_vectors.h
+ *
+ * This file provides definitions for the VIC and QIC CPIs
+ */
+
+#ifndef _ASM_IRQ_VECTORS_H
+#define _ASM_IRQ_VECTORS_H
+
+/*
+ * IDT vectors usable for external interrupt sources start
+ * at 0x20:
+ */
+#define FIRST_EXTERNAL_VECTOR 0x20
+
+#define SYSCALL_VECTOR 0x80
+
+/*
+ * Vectors 0x20-0x2f are used for ISA interrupts.
+ */
+
+/* These define the CPIs we use in linux */
+#define VIC_CPI_LEVEL0 0
+#define VIC_CPI_LEVEL1 1
+/* now the fake CPIs */
+#define VIC_TIMER_CPI 2
+#define VIC_INVALIDATE_CPI 3
+#define VIC_RESCHEDULE_CPI 4
+#define VIC_ENABLE_IRQ_CPI 5
+#define VIC_CALL_FUNCTION_CPI 6
+
+/* Now the QIC CPIs: Since we don't need the two initial levels,
+ * these are 2 less than the VIC CPIs */
+#define QIC_CPI_OFFSET 1
+#define QIC_TIMER_CPI (VIC_TIMER_CPI - QIC_CPI_OFFSET)
+#define QIC_INVALIDATE_CPI (VIC_INVALIDATE_CPI - QIC_CPI_OFFSET)
+#define QIC_RESCHEDULE_CPI (VIC_RESCHEDULE_CPI - QIC_CPI_OFFSET)
+#define QIC_ENABLE_IRQ_CPI (VIC_ENABLE_IRQ_CPI - QIC_CPI_OFFSET)
+#define QIC_CALL_FUNCTION_CPI (VIC_CALL_FUNCTION_CPI - QIC_CPI_OFFSET)
+
+#define VIC_START_FAKE_CPI VIC_TIMER_CPI
+#define VIC_END_FAKE_CPI VIC_CALL_FUNCTION_CPI
+
+/* this is the SYS_INT CPI. */
+#define VIC_SYS_INT 8
+#define VIC_CMN_INT 15
+
+/* This is the boot CPI for alternate processors. It gets overwritten
+ * by the above once the system has activated all available processors */
+#define VIC_CPU_BOOT_CPI VIC_CPI_LEVEL0
+#define VIC_CPU_BOOT_ERRATA_CPI (VIC_CPI_LEVEL0 + 8)
+
+#define NR_IRQS 224
+
+#ifndef __ASSEMBLY__
+extern asmlinkage void vic_cpi_interrupt(void);
+extern asmlinkage void vic_sys_interrupt(void);
+extern asmlinkage void vic_cmn_interrupt(void);
+extern asmlinkage void qic_timer_interrupt(void);
+extern asmlinkage void qic_invalidate_interrupt(void);
+extern asmlinkage void qic_reschedule_interrupt(void);
+extern asmlinkage void qic_enable_irq_interrupt(void);
+extern asmlinkage void qic_call_function_interrupt(void);
+#endif /* !__ASSEMBLY__ */
+
+#endif /* _ASM_IRQ_VECTORS_H */
diff -Nru a/include/asm-i386/mach-voyager/setup_arch_post.h b/include/asm-i386/mach-voyager/setup_arch_post.h
--- /dev/null Wed Dec 31 16:00:00 1969
+++ b/include/asm-i386/mach-voyager/setup_arch_post.h Mon Dec 16 14:34:13 2002
@@ -0,0 +1,73 @@
+/* Hook for machine specific memory setup.
+ *
+ * This is included late in kernel/setup.c so that it can make use of all of
+ * the static functions. */
+
+static inline char * __init machine_specific_memory_setup(void)
+{
+ char *who;
+
+ who = "NOT VOYAGER";
+
+ if(voyager_level == 5) {
+ __u32 addr, length;
+ int i;
+
+ who = "Voyager-SUS";
+
+ e820.nr_map = 0;
+ for(i=0; voyager_memory_detect(i, &addr, &length); i++) {
+ add_memory_region(addr, length, E820_RAM);
+ }
+ return who;
+ } else if(voyager_level == 4) {
+ __u32 tom;
+ __u16 catbase = inb(VOYAGER_SSPB_RELOCATION_PORT)<<8;
+ /* select the DINO config space */
+ outb(VOYAGER_DINO, VOYAGER_CAT_CONFIG_PORT);
+ /* Read DINO top of memory register */
+ tom = ((inb(catbase + 0x4) & 0xf0) << 16)
+ + ((inb(catbase + 0x5) & 0x7f) << 24);
+
+ if(inb(catbase) != VOYAGER_DINO) {
+ printk(KERN_ERR "Voyager: Failed to get DINO for L4, setting tom to EXT_MEM_K\n");
+ tom = (EXT_MEM_K)<<10;
+ }
+ who = "Voyager-TOM";
+ add_memory_region(0, 0x9f000, E820_RAM);
+ /* map from 1M to top of memory */
+ add_memory_region(1*1024*1024, tom - 1*1024*1024, E820_RAM);
+ /* FIXME: Should check the ASICs to see if I need to
+ * take out the 8M window. Just do it at the moment
+ * */
+ add_memory_region(8*1024*1024, 8*1024*1024, E820_RESERVED);
+ return who;
+ }
+
+ who = "BIOS-e820";
+
+ /*
+ * Try to copy the BIOS-supplied E820-map.
+ *
+ * Otherwise fake a memory map; one section from 0k->640k,
+ * the next section from 1mb->appropriate_mem_k
+ */
+ sanitize_e820_map(E820_MAP, &E820_MAP_NR);
+ if (copy_e820_map(E820_MAP, E820_MAP_NR) < 0) {
+ unsigned long mem_size;
+
+ /* compare results from other methods and take the greater */
+ if (ALT_MEM_K < EXT_MEM_K) {
+ mem_size = EXT_MEM_K;
+ who = "BIOS-88";
+ } else {
+ mem_size = ALT_MEM_K;
+ who = "BIOS-e801";
+ }
+
+ e820.nr_map = 0;
+ add_memory_region(0, LOWMEMSIZE(), E820_RAM);
+ add_memory_region(HIGH_MEMORY, mem_size << 10, E820_RAM);
+ }
+ return who;
+}
diff -Nru a/include/asm-i386/mach-voyager/setup_arch_pre.h b/include/asm-i386/mach-voyager/setup_arch_pre.h
--- /dev/null Wed Dec 31 16:00:00 1969
+++ b/include/asm-i386/mach-voyager/setup_arch_pre.h Mon Dec 16 14:34:13 2002
@@ -0,0 +1,10 @@
+#include <asm/voyager.h>
+#define VOYAGER_BIOS_INFO ((struct voyager_bios_info *)(PARAM+0x40))
+
+/* Hook to call BIOS initialisation function */
+
+/* for voyager, pass the voyager BIOS/SUS info area to the detection
+ * routines */
+
+#define ARCH_SETUP voyager_detect(VOYAGER_BIOS_INFO);
+
^ permalink raw reply
* [Benchmark] AIM9 results
From: Paolo Ciarrocchi @ 2002-12-16 22:52 UTC (permalink / raw)
To: linux-kernel; +Cc: akpm
Hi all,
hw is an Omnibook 6000 (laptop)
fs is Reiserfs
format:
2.4.19
2.5.51
2.5.52
add_double 10030 23.9282 430707.88 Thousand Double Precision Additions/second
add_double 10030 23.7288 427118.64 Thousand Double Precision Additions/second
add_double 10030 23.7288 427118.64 Thousand Double Precision Additions/second
add_float 10000 35.9 430800.00 Thousand Single Precision Additions/second
add_float 10010 35.5644 426773.23 Thousand Single Precision Additions/second
add_float 10010 35.5644 426773.23 Thousand Single Precision Additions/second
add_long 10010 22.1778 1330669.33 Thousand Long Integer Additions/second
add_long 10020 21.9561 1317365.27 Thousand Long Integer Additions/second
add_long 10020 21.9561 1317365.27 Thousand Long Integer Additions/second
add_int 10020 22.0559 1323353.29 Thousand Integer Additions/second
add_int 10020 21.8563 1311377.25 Thousand Integer Additions/second
add_int 10020 21.8563 1311377.25 Thousand Integer Additions/second
add_short 10000 55.4 1329600.00 Thousand Short Integer Additions/second
add_short 10000 54.9 1317600.00 Thousand Short Integer Additions/second
add_short 10000 54.9 1317600.00 Thousand Short Integer Additions/second
creat-clo 10040 19.4223 19422.31 File Creations and Closes/second
creat-clo 10010 87.2128 87212.79 File Creations and Closes/second
creat-clo 10000 75.3 75300.00 File Creations and Closes/second
^^^Here 2.5.* is _a lot_ faster than 2.4.19 but 2.5.52 is slower then 2.5.51
page_test 10000 123.9 210630.00 System Allocations & Pages/second
page_test 10000 105.7 179690.00 System Allocations & Pages/second
page_test 10010 105.095 178661.34 System Allocations & Pages/second
^^^^ 2.5.5* is still slower then 2.4.19
brk_test 10010 48.951 832167.83 System Memory Allocations/second
brk_test 10020 44.6108 758383.23 System Memory Allocations/second
brk_test 10010 43.8561 745554.45 System Memory Allocations/second
^^^^ 2.5.5* is still slower then 2.4.19
jmp_test 10000 4313.7 4313700.00 Non-local gotos/second
jmp_test 10000 4273.2 4273200.00 Non-local gotos/second
jmp_test 10000 4273.1 4273100.00 Non-local gotos/second
signal_test 10000 166.1 166100.00 Signal Traps/second
signal_test 10000 157.4 157400.00 Signal Traps/second
signal_test 10000 159.6 159600.00 Signal Traps/second
^^^^ 2.5.5* is still slower then 2.4.19
exec_test 10000 13.8 69.00 Program Loads/second
exec_test 10020 12.9741 64.87 Program Loads/second
exec_test 10030 12.9611 64.81 Program Loads/second
^^^^ 2.5.5* is still slower then 2.4.19
fork_test 10000 44.8 4480.00 Task Creations/second
fork_test 10020 23.9521 2395.21 Task Creations/second
fork_test 10020 29.0419 2904.19 Task Creations/second
^^^^ 2.5.5* is still slower then 2.4.19
link_test 10000 155.3 9783.90 Link/Unlink Pairs/second
link_test 10000 147.7 9305.10 Link/Unlink Pairs/second
link_test 10010 140.959 8880.42 Link/Unlink Pairs/second
^^^^ 2.5.5* is still slower then 2.4.19
disk_rr 10050 6.96517 35661.69 Random Disk Reads (K)/second
disk_rr 10110 7.51731 38488.63 Random Disk Reads (K)/second
disk_rr 10050 7.46269 38208.96 Random Disk Reads (K)/second
^^^^ 2.5.5* is faster then 2.4.19
disk_rw 10060 5.666 29009.94 Random Disk Writes (K)/second
disk_rw 10000 6.8 34816.00 Random Disk Writes (K)/second
disk_rw 10090 6.73935 34505.45 Random Disk Writes (K)/second
^^^^ 2.5.5* is faster then 2.4.19
disk_rd 10010 38.1618 195388.61 Sequential Disk Reads (K)/second
disk_rd 10020 38.024 194682.63 Sequential Disk Reads (K)/second
disk_rd 10010 38.0619 194877.12 Sequential Disk Reads (K)/second
disk_wrt 10100 8.51485 43596.04 Sequential Disk Writes (K)/second
disk_wrt 10070 9.43396 48301.89 Sequential Disk Writes (K)/second
disk_wrt 10080 9.3254 47746.03 Sequential Disk Writes (K)/second
^^^^ 2.5.5* is faster then 2.4.19
disk_cp 10120 7.31225 37438.74 Disk Copies (K)/second
disk_cp 10010 7.69231 39384.62 Disk Copies (K)/second
disk_cp 10090 7.63132 39072.35 Disk Copies (K)/second
^^^^ 2.5.5* is faster then 2.4.19
sync_disk_rw 16020 0.062422 159.80 Sync Random Disk Writes (K)/second
sync_disk_rw 18790 0.0532198 136.24 Sync Random Disk Writes (K)/second
sync_disk_rw 14570 0.0686342 175.70 Sync Random Disk Writes (K)/second
^^^^ 2.5.5* is faster then 2.4.19
sync_disk_wrt 11220 0.0891266 228.16 Sync Sequential Disk Writes (K)/second
sync_disk_wrt 10150 0.0985222 252.22 Sync Sequential Disk Writes (K)/second
sync_disk_wrt 10130 0.0987167 252.71 Sync Sequential Disk Writes (K)/second
^^^^ 2.5.5* is faster then 2.4.19
sync_disk_cp 10870 0.0919963 235.51 Sync Disk Copies (K)/second
sync_disk_cp 19580 0.102145 261.49 Sync Disk Copies (K)/second
sync_disk_cp 10050 0.0995025 254.73 Sync Disk Copies (K)/second
^^^^ 2.5.5* is faster then 2.4.19
disk_src 10000 118.2 8865.00 Directory Searches/second
disk_src 10010 110.889 8316.68 Directory Searches/second
disk_src 10010 123.477 9260.74 Directory Searches/second
^^^^ 2.5.5* is faster then 2.4.19 and 2.5.52 is faster then 2.5.51
div_double 10000 24.4 73200.00 Thousand Double Precision Divides/second
div_double 10020 24.1517 72455.09 Thousand Double Precision Divides/second
div_double 10010 24.1758 72527.47 Thousand Double Precision Divides/second
div_float 10010 24.3756 73126.87 Thousand Single Precision Divides/second
div_float 10010 24.1758 72527.47 Thousand Single Precision Divides/second
div_float 10010 24.1758 72527.47 Thousand Single Precision Divides/second
div_long 10020 19.9601 17964.07 Thousand Long Integer Divides/second
div_long 10020 19.7605 17784.43 Thousand Long Integer Divides/second
div_long 10010 19.7802 17802.20 Thousand Long Integer Divides/second
div_int 10020 19.9601 17964.07 Thousand Integer Divides/second
div_int 10010 19.7802 17802.20 Thousand Integer Divides/second
div_int 10020 19.7605 17784.43 Thousand Integer Divides/second
div_short 10030 19.9402 17946.16 Thousand Short Integer Divides/second
div_short 10020 19.7605 17784.43 Thousand Short Integer Divides/second
div_short 10010 19.7802 17802.20 Thousand Short Integer Divides/second
fun_cal 10000 62.5 32000000.00 Function Calls (no arguments)/second
fun_cal 10000 61.9 31692800.00 Function Calls (no arguments)/second
fun_cal 10000 61.9 31692800.00 Function Calls (no arguments)/second
fun_cal1 10000 170.4 87244800.00 Function Calls (1 argument)/second
fun_cal1 10010 168.831 86441558.44 Function Calls (1 argument)/second
fun_cal1 10010 168.831 86441558.44 Function Calls (1 argument)/second
fun_cal2 10000 112.5 57600000.00 Function Calls (2 arguments)/second
fun_cal2 10000 111.5 57088000.00 Function Calls (2 arguments)/second
fun_cal2 10010 111.389 57030969.03 Function Calls (2 arguments)/second
fun_cal15 10010 34.0659 17441758.24 Function Calls (15 arguments)/second
fun_cal15 10010 33.7662 17288311.69 Function Calls (15 arguments)/second
fun_cal15 10010 33.7662 17288311.69 Function Calls (15 arguments)/second
sieve 10450 0.861244 4.31 Integer Sieves/second
sieve 10600 0.849057 4.25 Integer Sieves/second
sieve 10600 0.849057 4.25 Integer Sieves/second
mul_double 10020 21.5569 258682.63 Thousand Double Precision Multiplies/second
mul_double 10020 21.3573 256287.43 Thousand Double Precision Multiplies/second
mul_double 10030 21.336 256031.90 Thousand Double Precision Multiplies/second
mul_float 10030 21.5354 258424.73 Thousand Single Precision Multiplies/second
mul_float 10030 21.336 256031.90 Thousand Single Precision Multiplies/second
mul_float 10020 21.3573 256287.43 Thousand Single Precision Multiplies/second
mul_long 10000 947.7 227448.00 Thousand Long Integer Multiplies/second
mul_long 10000 939.6 225504.00 Thousand Long Integer Multiplies/second
mul_long 10000 939.8 225552.00 Thousand Long Integer Multiplies/second
mul_int 10000 951.9 228456.00 Thousand Integer Multiplies/second
mul_int 10000 943.2 226368.00 Thousand Integer Multiplies/second
mul_int 10000 943.3 226392.00 Thousand Integer Multiplies/second
mul_short 10000 759.1 227730.00 Thousand Short Integer Multiplies/second
mul_short 10000 753.4 226020.00 Thousand Short Integer Multiplies/second
mul_short 10000 753.4 226020.00 Thousand Short Integer Multiplies/second
num_rtns_1 10000 467.2 46720.00 Numeric Functions/second
num_rtns_1 10000 463.8 46380.00 Numeric Functions/second
num_rtns_1 10000 463.9 46390.00 Numeric Functions/second
trig_rtns 10010 28.6713 286713.29 Trigonometric Functions/second
trig_rtns 10020 28.3433 283433.13 Trigonometric Functions/second
trig_rtns 10000 28.4 284000.00 Trigonometric Functions/second
matrix_rtns 10000 5964.3 596430.00 Point Transformations/second
matrix_rtns 10000 5906.8 590680.00 Point Transformations/second
matrix_rtns 10000 5906.6 590660.00 Point Transformations/second
array_rtns 10010 13.6863 273.73 Linear Systems Solved/second
array_rtns 10010 13.2867 265.73 Linear Systems Solved/second
array_rtns 10050 13.5323 270.65 Linear Systems Solved/second
string_rtns 10060 9.04573 904.57 String Manipulations/second
string_rtns 10050 8.95522 895.52 String Manipulations/second
string_rtns 10060 8.94632 894.63 String Manipulations/second
mem_rtns_1 10000 27.7 831000.00 Dynamic Memory Operations/second
mem_rtns_1 10010 24.975 749250.75 Dynamic Memory Operations/second
mem_rtns_1 10030 24.327 729810.57 Dynamic Memory Operations/second
mem_rtns_2 10000 1632.5 163250.00 Block Memory Operations/second
mem_rtns_2 10000 1631.8 163180.00 Block Memory Operations/second
mem_rtns_2 10000 1618 161800.00 Block Memory Operations/second
sort_rtns_1 10020 33.6327 336.33 Sort Operations/second
sort_rtns_1 10010 33.0669 330.67 Sort Operations/second
sort_rtns_1 10000 33.1 331.00 Sort Operations/second
misc_rtns_1 10000 782.2 7822.00 Auxiliary Loops/second
misc_rtns_1 10000 738 7380.00 Auxiliary Loops/second
misc_rtns_1 10000 732.1 7321.00 Auxiliary Loops/second
dir_rtns_1 10000 85.8 858000.00 Directory Operations/second
dir_rtns_1 10000 96.9 969000.00 Directory Operations/second
dir_rtns_1 10000 96.9 969000.00 Directory Operations/second
shell_rtns_1 10020 25.9481 25.95 Shell Scripts/second
shell_rtns_1 10030 24.1276 24.13 Shell Scripts/second
shell_rtns_1 10030 23.9282 23.93 Shell Scripts/second
shell_rtns_2 10010 26.0739 26.07 Shell Scripts/second
shell_rtns_2 10000 24.1 24.10 Shell Scripts/second
shell_rtns_2 10030 24.0279 24.03 Shell Scripts/second
shell_rtns_3 10010 26.0739 26.07 Shell Scripts/second
shell_rtns_3 10000 24.1 24.10 Shell Scripts/second
shell_rtns_3 10030 24.0279 24.03 Shell Scripts/second
series_1 10000 31924.9 3192490.00 Series Evaluations/second
series_1 10000 31651.5 3165150.00 Series Evaluations/second
series_1 10000 31649.9 3164990.00 Series Evaluations/second
shared_memory 10000 2227.4 222740.00 Shared Memory Operations/second
shared_memory 10000 1987.5 198750.00 Shared Memory Operations/second
shared_memory 10000 1994.7 199470.00 Shared Memory Operations/second
^^^^ 2.5.5* is still slower then 2.4.19
tcp_test 10000 661.7 59553.00 TCP/IP Messages/second
tcp_test 10000 558.7 50283.00 TCP/IP Messages/second
tcp_test 10000 541.8 48762.00 TCP/IP Messages/second
^^^^ 2.5.5* is still slower then 2.4.19
udp_test 10000 1182.7 118270.00 UDP/IP DataGrams/second
udp_test 10000 972.3 97230.00 UDP/IP DataGrams/second
udp_test 10000 988.1 98810.00 UDP/IP DataGrams/second
^^^^ 2.5.5* is still slower then 2.4.19
fifo_test 10000 1207 120700.00 FIFO Messages/second
fifo_test 10000 1052.3 105230.00 FIFO Messages/second
fifo_test 10000 1083.1 108310.00 FIFO Messages/second
^^^^ 2.5.5* is still slower then 2.4.19
stream_pipe 10000 2418.6 241860.00 Stream Pipe Messages/second
stream_pipe 10000 2281.5 228150.00 Stream Pipe Messages/second
stream_pipe 10000 2258.8 225880.00 Stream Pipe Messages/second
^^^^ 2.5.5* is still slower then 2.4.19
dgram_pipe 10000 2357.8 235780.00 DataGram Pipe Messages/second
dgram_pipe 10000 2112.2 211220.00 DataGram Pipe Messages/second
dgram_pipe 10000 2039.6 203960.00 DataGram Pipe Messages/second
^^^^ 2.5.5* is still slower then 2.4.19
pipe_cpy 10000 3918 391800.00 Pipe Messages/second
pipe_cpy 10000 3139 313900.00 Pipe Messages/second
pipe_cpy 10000 3139.3 313930.00 Pipe Messages/second
^^^^ 2.5.5* is still slower then 2.4.19
ram_copy 10000 19338.7 483854274.00 Memory to Memory Copy/second
ram_copy 10000 19160.9 479405718.00 Memory to Memory Copy/second
ram_copy 10000 19155 479258100.00 Memory to Memory Copy/second
--
______________________________________________
http://www.linuxmail.org/
Now with POP3/IMAP access for only US$19.95/yr
Powered by Outblaze
^ permalink raw reply
* Re: [ACPI] Metolious hardware-sensors-using-ACPI specs
From: Pavel Machek @ 2002-12-16 22:40 UTC (permalink / raw)
To: Grover, Andrew; +Cc: ACPI mailing list, kernel list
In-Reply-To: <EDC461A30AC4D511ADE10002A5072CAD04C7A5A4-OU+JdkIUtvd9zuciVAfUoVDQ4js95KgL@public.gmane.org>
Hi!
> > Is it goign to be implemented in linux-acpi?
> >
> > I took a look at specs at intel, and it has rather funny legaleese:
>
> Wow, is that still on a website somewhere?
Yep, as someone already pointed out.
> So as you may know from looking at the spec, Metolious was a spec that
> defined a way for platforms to enumerate various motherboard sensors to the
> OS, for manageability purposes.
>
> It never took off, except for a couple companies that used the Windows
> driver for other things because they didn't want to write a driver that
> received ACPI device Notify()s.
> The licensing may be weird, but given that there really is no point in
> implementing it on Linux, does that really matter?
Ouch, I started implementing that hour ago... [Never mind, very little
damage done so far].
But... Metolious sounds *needed*; how do you access voltage sensors
without metolious, in a way that can coexist with ACPI thermal
support?
Pavel
--
Casualities in World Trade Center: ~3k dead inside the building,
cryptography in U.S.A. and free speech in Czech Republic.
^ permalink raw reply
* Re: [Oops 2.5.51] PnPBIOS: cat /proc/bus/pnp/escd
From: Paul @ 2002-12-16 22:46 UTC (permalink / raw)
To: Dave Jones; +Cc: Linux Kernel Mailing List
In-Reply-To: <20021216135813.GD11616@suse.de>
Dave Jones <davej@codemonkey.org.uk>, on Mon Dec 16, 2002 [01:58:13 PM] said:
> > 'cat /proc/bus/pnp/escd' consistantly produces this:
>
> > EIP: 0088:[<00007b74>] Not tainted
>
> You blew up in BIOS code. Your BIOS has a crap PNPBIOS implementation.
> Send the output of dmidecode[1] and it can get added to the blacklist.
>
> [1] http://people.redhat.com/arjanv/dmidecode.c
>
> Dave
>
Hi;
DMI 2.0 present.
29 structures occupying 946 bytes.
DMI table at 0x000F545A.
Handle 0x0000
DMI type 0, 18 bytes.
BIOS Information Block
Vendor: Award Software, Inc.
Version: ASUS P5A-B ACPI BIOS Revision 1004
Release: 10/14/98
BIOS base: 0xF0000
ROM size: 64K
Capabilities:
Flags: 0x000000007FDBDE90
Handle 0x0001
DMI type 1, 8 bytes.
System Information Block
Vendor: System Manufacturer
Product: System Name
Version: System Version
Serial Number: SYS-1234567890
Handle 0x0002
DMI type 2, 8 bytes.
Board Information Block
Vendor: ASUSTeK Computer INC.
Product: P5A-B
Version: REV 1.XX
Serial Number: MB-1234567890
Handle 0x0003
DMI type 3, 9 bytes.
Chassis Information Block
Vendor: Chassis Manufacture
Chassis Type: Unknown
Version: Chassis Version
Serial Number: Chassis Serial Number
Asset Tag: Asset-1234567890
Handle 0x0004
DMI type 4, 26 bytes.
Processor
Socket Designation: SOCKET 7
Processor Type: Central Processor
Processor Family: K5 Family
Processor Manufacturer: AMD
Processor Version: AMD K6-2
Handle 0x0005
DMI type 5, 27 bytes.
Memory Controller
Handle 0x0007
DMI type 6, 12 bytes.
Memory Bank
Socket: DIMM1-2
Banks: 0 1
Speed: 70nS
Type: EDO DIMM
Installed Size: Not Installed
Enabled Size: Not Installed
Handle 0x0008
DMI type 6, 12 bytes.
Memory Bank
Socket: DIMM2-1
Banks: 2 3
Speed: 70nS
Type: OTHER DIMM
Installed Size: 64Mbyte
Enabled Size: 64Mbyte
Handle 0x0009
DMI type 6, 12 bytes.
Memory Bank
Socket: DIMM2-2
Banks: 2 3
Speed: 70nS
Type: EDO DIMM
Installed Size: Not Installed
Enabled Size: Not Installed
Handle 0x000A
DMI type 6, 12 bytes.
Memory Bank
Socket: DIMM3-1
Banks: 4 5
Speed: 70nS
Type: EDO DIMM
Installed Size: Not Installed
Enabled Size: Not Installed
Handle 0x000B
DMI type 6, 12 bytes.
Memory Bank
Socket: DIMM3-2
Banks: 4 5
Speed: 70nS
Type: EDO DIMM
Installed Size: Not Installed
Enabled Size: Not Installed
Handle 0x000C
DMI type 7, 15 bytes.
Cache
Socket: L1 Cache
L1 Internal Cache: write-back
L1 Cache Size: 64K
L1 Cache Maximum: 64K
L1 Cache Type:
Handle 0x000D
DMI type 7, 15 bytes.
Cache
Socket: L2 Cache
L2 External Cache: write-back
L2 Cache Size: 1024K
L2 Cache Maximum: 0K
L2 Cache Type: Pipeline burst
Handle 0x000E
DMI type 8, 9 bytes.
Port Connector
Internal Designator: COM1
Internal Connector Type: 9 Pin Dual Inline (pin 10 cut)
External Designator: COM A
External Connector Type: DB-9 pin male
Port Type: Serial Port 16650A Compatible
Handle 0x000F
DMI type 8, 9 bytes.
Port Connector
Internal Designator: COM2
Internal Connector Type: 9 Pin Dual Inline (pin 10 cut)
External Designator: COM B
External Connector Type: DB-25 pin male
Port Type: Serial Port 16650A Compatible
Handle 0x0010
DMI type 8, 9 bytes.
Port Connector
Internal Designator: PRINTER
Internal Connector Type: 25 Pin Dual Inline (pin 26 cut)
External Designator: LPT
External Connector Type: DB-25 pin female
Port Type: Parallel Port ECP/EPP
Handle 0x0011
DMI type 8, 9 bytes.
Port Connector
Internal Designator: KEY
Internal Connector Type: None
External Designator: KEYBOARD
External Connector Type: Micro-DIN
Port Type: Keyboard Port
Handle 0x0012
DMI type 8, 9 bytes.
Port Connector
Internal Designator: PRIMARY IDE
Internal Connector Type: On Board IDE
External Designator: IDE-1
External Connector Type: None
Port Type: None
Handle 0x0013
DMI type 8, 9 bytes.
Port Connector
Internal Designator: SECONDARY IDE
Internal Connector Type: On Board IDE
External Designator: IDE-2
External Connector Type: None
Port Type: None
Handle 0x0014
DMI type 8, 9 bytes.
Port Connector
Internal Designator: FLOPPY
Internal Connector Type: On Board Floppy
External Designator: FLOPPY
External Connector Type: None
Port Type: None
Handle 0x0015
DMI type 9, 12 bytes.
Card Slot
Slot: PCI Slot1
Type: 32bit PCI
Status: In use.
Slot Features: 5v
Handle 0x0016
DMI type 9, 12 bytes.
Card Slot
Slot: PCI Slot2
Type: 32bit PCI
Status: Available.
Slot Features: 5v
Handle 0x0017
DMI type 9, 12 bytes.
Card Slot
Slot: PCI Slot3
Type: 32bit PCI
Status: Available.
Slot Features: 5v Shared
Handle 0x0018
DMI type 9, 12 bytes.
Card Slot
Slot: ISA Slot1
Type: 16bit ISA
Slot Features: 5v Shared
Handle 0x0019
DMI type 9, 12 bytes.
Card Slot
Slot: ISA Slot2
Type: 16bit ISA
Slot Features: 5v
Handle 0x001A
DMI type 11, 5 bytes.
OEM Data
OEM String
Handle 0x001B
DMI type 12, 5 bytes.
Configuration Information
System String
Handle 0x001C
DMI type 13, 22 bytes.
BIOS Language Information
Handle 0x0C49
DMI type 0, 0 bytes.
BIOS Information Block
Vendor:
Version:
Release:
BIOS base: 0x00000
ROM size: 0K
Capabilities:
Flags: 0x0000000000000000
^ permalink raw reply
* Re: How to do -nostdinc?
From: J.A. Magallon @ 2002-12-16 22:44 UTC (permalink / raw)
To: Keith Owens; +Cc: Sam Ravnborg, linux-kernel
In-Reply-To: <20218.1040073993@ocs3.intra.ocs.com.au>
On 2002.12.16 Keith Owens wrote:
>On Mon, 16 Dec 2002 19:29:19 +0100,
>Sam Ravnborg <sam@ravnborg.org> wrote:
>>On Sun, Dec 15, 2002 at 11:06:41PM +1100, Keith Owens wrote:
>>> There are two ways of setting the -nostdinc flag in the kernel Makefile :-
>>>
>>> (1) -nostdinc $(shell $(CC) -print-search-dirs | sed -ne 's/install: \(.*\)/-I \1include/gp')
>>> (2) -nostdinc -iwithprefix include
>>>
>>> The first format breaks with non-English locales, however the fix is trivial.
>>>
>>> (1a) -nostdinc $(shell LANG=C $(CC) -print-search-dirs | sed -ne 's/install: \(.*\)/-I \1include/gp')
>>>
>>Hi Keith.
>>
>>Based on the comments received, solution (2) seems to be OK.
>>Do you agree?
>
>Does gcc still mark -iwithprefix as deprecated? If it does then do not
>rely on it and use (1a). If gcc will support -iwithprefix then use (2).
>
gcc-3.2, info:
`-iwithprefix DIR'
`-iwithprefixbefore DIR'
Append DIR to the prefix specified previously with `-iprefix', and
add the resulting directory to the include search path.
`-iwithprefixbefore' puts it in the same place `-I' would;
`-iwithprefix' puts it where `-idirafter' would.
Use of these options is discouraged.
--
J.A. Magallon <jamagallon@able.es> \ Software is like sex:
werewolf.able.es \ It's better when it's free
Mandrake Linux release 9.1 (Cooker) for i586
Linux 2.4.20-jam1 (gcc 3.2 (Mandrake Linux 9.1 3.2-4mdk))
^ permalink raw reply
* Re: [ACPI] Metolious hardware-sensors-using-ACPI specs
From: Pavel Machek @ 2002-12-16 22:40 UTC (permalink / raw)
To: Grover, Andrew; +Cc: ACPI mailing list, kernel list
In-Reply-To: <EDC461A30AC4D511ADE10002A5072CAD04C7A5A4@orsmsx119.jf.intel.com>
Hi!
> > Is it goign to be implemented in linux-acpi?
> >
> > I took a look at specs at intel, and it has rather funny legaleese:
>
> Wow, is that still on a website somewhere?
Yep, as someone already pointed out.
> So as you may know from looking at the spec, Metolious was a spec that
> defined a way for platforms to enumerate various motherboard sensors to the
> OS, for manageability purposes.
>
> It never took off, except for a couple companies that used the Windows
> driver for other things because they didn't want to write a driver that
> received ACPI device Notify()s.
> The licensing may be weird, but given that there really is no point in
> implementing it on Linux, does that really matter?
Ouch, I started implementing that hour ago... [Never mind, very little
damage done so far].
But... Metolious sounds *needed*; how do you access voltage sensors
without metolious, in a way that can coexist with ACPI thermal
support?
Pavel
--
Casualities in World Trade Center: ~3k dead inside the building,
cryptography in U.S.A. and free speech in Czech Republic.
^ permalink raw reply
* Re: HT Benchmarks (was: /proc/cpuinfo and hyperthreading)
From: J.A. Magallon @ 2002-12-16 22:38 UTC (permalink / raw)
To: Scott Robert Ladd; +Cc: Linux Kernel Mailing List
In-Reply-To: <FKEAJLBKJCGBDJJIPJLJKEMCDLAA.scott@coyotegulch.com>
On 2002.12.16 Scott Robert Ladd wrote:
>Måns Rullgård wrote:
>> It's easy to write a program that displays any number of graphs
>> vaguely related to the system load. How do we know that the
>> performance meter isn't lying?
>
>We don't.
>
>All I can say is that the performance meter seems (note the weasel-word)
>proper when running Win2K SMP on a dual PIII-933 box at one of my client
>sites. However, such experience does *not* guarantee that WinXP is reporting
>valid numbers for a P4 with HT.
>
>Here's a little test I ran this morning, now that my new system is
>operational. My benchmark is a full "make bootstrap" compile of gcc-3.2.1,
>with and without the - j 2 make switch that enables two threads of
>compilation. Using the 2.5.51 SMP kernel, I see the following compile times:
>
> SMP w/o -j 2: 28m11s
> "nosmp" with -j 2: 27m32s
> SMP with -j 2: 24m21s
>
>HT appears to give a very tiny benefit even without an SMP kernel -- and
>*with* an SMP kernel, I get a 16% improvement in my compile time. That
>pretty much matches my expectation (i.e., a HT processor is *not* equal to
>dual processor, but it *is* better than a non-HT processor).
>
HT can give no benefit in UP case, nobody knows that the sibling exists
and the P4 does not paralelize itself. The gain you see is due to
computation-io overlap.
This my render code, implemented with posix threads, running on a dual
P4-Xeon@1.8GHz. Work is just dynamic strctures walk-through and floating
point calculation, no IO. In this example the database is tiny, so there
is no swap, and the box is 'all mine', any other process eating CPU.
Processes do not bounce between cpus and ht-aware scheduler
prefers a processor in different physical package when two cpu intensive
threads are running, so in the 2-threads case they run on different
packages:
Number of threads Elapsed time User Time System Time
1 53:216 53:220 00:000
2 29:272 58:180 00:320
3 27:162 1:21:450 00:540
4 25:094 1:41:080 01:250
Elapsed is measured by the parent thread, that is not doing anything
but wait on a pthread_join. User and system times are the sum of
times for all the children threads, that do real work.
The jump from 1->2 threads is fine, the one from 2->4 is ridiculous...
I have my cpus doubled but each one has half the pipelining for floating
point...see the user cpu time increased due to 'worst' processors and
cache pollution on each package.
So, IMHO and for my apps, HyperThreading is just a bad joke.
--
J.A. Magallon <jamagallon@able.es> \ Software is like sex:
werewolf.able.es \ It's better when it's free
Mandrake Linux release 9.1 (Cooker) for i586
Linux 2.4.20-jam1 (gcc 3.2 (Mandrake Linux 9.1 3.2-4mdk))
^ permalink raw reply
* Re: [PATCH] linux-2.4.21-pre1_cyclone-timer_B3
From: Alan Cox @ 2002-12-16 23:15 UTC (permalink / raw)
To: john stultz; +Cc: Marcelo Tosatti, lkml
In-Reply-To: <1040076206.1583.14.camel@w-jstultz2.beaverton.ibm.com>
On Mon, 2002-12-16 at 22:03, john stultz wrote:
> Marcelo, All,
> This patch fixes gettimeofday for multi-node Summit based systems (IBM
> x440, etc). These systems suffer from TSC skew, and thus require an
> alternate high res time source. This patch allows do_gettimeofday to
> access a register on the cyclone chip found on these systems, which
> functions as a global time source.
>
> Please consider for acceptance.
Older versions have been in -ac and seem fine
^ permalink raw reply
* Re: [parisc-linux] 2.4.20-pa14 64bit crash on boot - A500-5X
From: Thibaut VARENE @ 2002-12-16 22:28 UTC (permalink / raw)
To: Grant Grundler; +Cc: parisc-linux
In-Reply-To: <20021215035359.GA18647@dsl2.external.hp.com>
On Sat, 14 Dec 2002 20:53:59 -0700
"Grant Grundler" <grundler@dsl2.external.hp.com> wrote:
> On Fri, Dec 13, 2002 at 11:35:40PM +0100, Thibaut VARENE wrote:
> > AOUT: 0x10143bd4 mod_timer+3c
> ...
> > AOUT: 0x10538b48 hp_diva_timer+0
>
> Good News: I reproduced this and fixed it.
> But I don't know exactly what I did that fixed it. :^(
> (drawbacks of the shotgun approach).
> Fairly small patch is on ftp.parisc-linux.org/patches/diff-2.4.20-timer
> This isn't ready to commit until someone narrows it down to one thing.
>
> Bad News: SMP kernel now hangs during SCSI device discover.
> I haven't tried CONFIG_SMP=n yet and I guess that would be a next step.
> Console output of the a500-44 boot with 2.4.20-pa14 + patch is on
> dsl2.e.h.c:~grundler/rp2470-2.4.20-symhang-01
With CONFIG_SMP=y, here is what happens upon boot:
SMP: Total 2 of 2 processors activated (2195.46 BogoMIPS noticed).
Waiting on wait_init_idle (map = 0x2)
All processors have done init_idle
Linux NET4.0 for Linux 2.4
Based upon Swansea University Computer Society NET3.039
Initializing RT netlink socket
Soft power switch support not available.
Performance monitoring counters enabled for Crescend
Some investigation provided the following (after TOC/SER PIM) CPU0:
IAOQ = 0x0000000010144f1c
Func: timer_bh, Off: 1a4, Addr: 0x10144f1c
10144f10: 52 d3 0d f0 ldd 6f8(r22),r19
10144f14: 08 01 02 57 copy r1,r23
10144f18: 0e 60 10 94 ldw 0(sr0,r19),r20
10144f1c: 2b 61 20 00 addil 3000,dp,%r1
10144ff4: e8 1f 1e 2d b,l 10144f10 <timer_bh+0x198>,r0
GR1 = 000000001047ae00
Func: __gp, Off: a000, Addr: 0x1047ae00
GR2 = 0000000010144fd8
Func: timer_bh, Off: 260, Addr: 0x10144fd8
10144fd0: eb df bc 81 b,l 10103e18 <spin_lock>,%r2
10144fd4: 08 13 02 5a copy r19,r26
10144fd8: 08 0e 02 5b copy r14,dp
10144fdc: 2b 65 00 00 addil a000,dp,%r1
GR6 = 0000000010540b48
Func: hp_diva_timer, Off: 0, Addr: 0x10540b48
GR14 = 0000000010470e00
Func: __gp, Off: 0, Addr: 0x10470e00
GR18 = 0000000010540898
Func: serial_driver, Off: 0, Addr: 0x10540898
GR19 = 0000000010520e48
Func: tv1, Off: 0, Addr: 0x10520e48
GR26 = 00000000103e37c0
Func: timerlist_lock, Off: 0, Addr: 0x103e37c0
on a second try it went up to:
Performance monitoring counters enabled for Crescendo 550
Starting kswapd
Journalled Block Device driver loaded
Installing knfsd (copyright (C) 1996 o
Now the UP try:
went up to:
Performance monitoring counters enabled for Crescendo 550
Starting kswapd
Journalled Block Device driver loaded
Installing knfsd (copyright (C) 1996 okir@monad.swb.de).
pty: 256 Unix98 ptys configured
Serial driver version 5.05c (2001-07-08) with MANY_PORTS SHARE_IRQ SERIAL_PCI enabled
Investigation showed that:
IAOQ = 0x000000001021210c
Func: hp_diva_check, Off: ec, Addr: 0x1021210c
10212100: eb 94 be 61 b,l 1013b038 <add_timer>,%r2
10212104: 08 15 02 5a copy r21,r26
10212108: 08 03 02 5b copy r3,dp
1021210c: 53 c2 3e e1 ldd -90(sp),rp
GR0 = 0000000000000000
GR1 = 000000001045df70
Func: timer_jiffies, Off: 0, Addr: 0x1045df70
GR2 = 0000000010212108
Func: hp_diva_check, Off: e8, Addr: 0x10212108
10212100: eb 94 be 61 b,l 1013b038 <add_timer>,%r2
10212104: 08 15 02 5a copy r21,r26
10212108: 08 03 02 5b copy r3,dp
1021210c: 53 c2 3e e1 ldd -90(sp),rp
GR3 = 00000000103bd2a0
Func: __gp, Off: 0, Addr: 0x103bd2a0
GR6 = 0000000010472df8
Func: hp_diva_timer, Off: 0, Addr: 0x10472df8
GR18 = 0000000010472b48
Func: serial_driver, Off: 0, Addr: 0x10472b48
GR19 = 000000001045df68
Func: run_timer_list_running, Off: 0, Addr: 0x1045df68
GR20 = 0000000000001e11
GR21 = 000000001045df68
Func: run_timer_list_running, Off: 0, Addr: 0x1045df68
GR26 = 0000000010472df8
Func: hp_diva_timer, Off: 0, Addr: 0x10472df8
I think that the patch is quite wrong somehow...
Will investigate further tomorrow.
HTH,
Thibaut VARENE
The PA/Linux ESIEE Team
http://pateam.esiee.fr/
^ permalink raw reply
* Re: NAT helper module for MSN
From: Carlos Fernandez Sanz @ 2002-12-16 22:36 UTC (permalink / raw)
To: Holzrichter, Bruce, linux-kernel
In-Reply-To: <61DB42B180EAB34E9D28346C11535A78011303BD@nocmail101.ma.tmpw.net>
Not masquerading, only NAT.
Everything works except outgoing file transmission, apparently caused by the
internal network IPs going out inside the packet (not the headers). So
unless the packets are modified on the fly, I don't think there's a chance
it can work :-) (unless of course they were originated with the public IP,
but trillian doesn't have the feature to edit that, and even if it did, it
doesn't solve the problem in the right place).
----- Original Message -----
From: "Holzrichter, Bruce" <bruce.holzrichter@monster.com>
To: "'Carlos Fernandez Sanz'" <cfs-lk@nisupu.com>;
<linux-kernel@vger.kernel.org>
Sent: Monday, December 16, 2002 23:24
Subject: RE: NAT helper module for MSN
> >
> > Is there a help module to help MSN work through a NAT'ed connection?
> >
> > If there isn't one, is there an ongoing project to write one
> > I can join?
> >
>
> This may not be strictly kernel related, are you using masquerading? I
have
> yet to have a prob with MSN messenger using 2.2 with ipmasq. But, have
you
> checked http://ipmasq.cjb.net/
>
> Here's the masq modules I have loaded.
> ip_masq_quake 1420 0 (unused)
> ip_gre 6776 0 (unused)
> ip_masq_autofw 2556 0 (unused)
> ip_masq_portfw 2636 2
> ip_masq_mfw 3272 0
> ip_masq_ipsec 11812 0 (unused)
> ip_masq_pptp 6856 0
> ip_masq_irc 1656 0 (unused)
> ip_masq_raudio 3064 0
> ip_masq_ftp 2680 0
>
> Maybe you should check withe the iptables group at the netfilter home:
> http://www.netfilter.org/
>
> Hope that helps.
> Bruce H.
>
^ permalink raw reply
* Re: rmap and nvidia?
From: O.Sezer @ 2002-12-16 22:22 UTC (permalink / raw)
To: linux-kernel
[-- Attachment #1: Type: text/plain, Size: 93 bytes --]
Is this patch correct in any way?
(Ripped out of the 2.5 patch and modified some).
Thanks.
[-- Attachment #2: NVIDIA_kernel_rmap.patch --]
[-- Type: text/plain, Size: 2173 bytes --]
diff -urN NVIDIA_kernel-1.0-4191/nv.c NVIDIA_kernel.rmap15b/nv.c
--- NVIDIA_kernel-1.0-4191/nv.c 2002-12-09 22:27:15.000000000 +0200
+++ NVIDIA_kernel.rmap15b/nv.c 2002-12-17 00:03:12.000000000 +0200
@@ -2217,7 +2217,7 @@
{
pgd_t *pg_dir;
pmd_t *pg_mid_dir;
- pte_t *pte__, pte;
+ pte_t pte;
#if defined(NVCPU_IA64)
if (address > __IA64_UNCACHED_OFFSET)
@@ -2241,14 +2241,7 @@
if (pmd_none(*pg_mid_dir))
goto failed;
-#if defined (pte_offset_atomic)
- pte__ = pte_offset_atomic(pg_mid_dir, address);
- pte = *pte__;
- pte_kunmap(pte__);
-#else
- pte__ = NULL;
- pte = *pte_offset(pg_mid_dir, address);
-#endif
+ PTE_OFFSET(pg_mid_dir, address, pte);
if (!pte_present(pte))
goto failed;
diff -urN NVIDIA_kernel-1.0-4191/nv-linux.h NVIDIA_kernel.rmap15b/nv-linux.h
--- NVIDIA_kernel-1.0-4191/nv-linux.h 2002-12-09 22:27:15.000000000 +0200
+++ NVIDIA_kernel.rmap15b/nv-linux.h 2002-12-17 00:02:19.000000000 +0200
@@ -146,6 +146,28 @@
# define VMA_PRIVATE(vma) ((void*)((vma)->vm_pte))
#endif
+#ifdef pte_offset_map /* rmap-vm or 2.5 */
+#define PTE_OFFSET(pmd, address, pte) \
+ { \
+ pte_t *pPTE; \
+ pPTE = pte_offset_map(pmd, address); \
+ pte = *pPTE; \
+ pte_unmap(pPTE); \
+ }
+#else
+#ifdef pte_offset_atomic /* aa-vm */
+#define PTE_OFFSET(pmd, address, pte) \
+ { \
+ pte_t *pPTE; \
+ pPTE = pte_offset_atomic(pmd, address); \
+ pte = *pPTE; \
+ pte_kunmap(pPTE); \
+ }
+#else /* !pte_offset_atomic */
+#define PTE_OFFSET(pmd, address, pte) (pte = *pte_offset(pmd, address))
+#endif /* pte_offset_atomic */
+#endif /* pte_offset_map */
+
#define NV_PAGE_ALIGN(addr) ( ((addr) + PAGE_SIZE - 1) / PAGE_SIZE)
#define NV_MASK_OFFSET(addr) ( (addr) & (PAGE_SIZE - 1) )
^ permalink raw reply
* Re: counting shell args
From: Scott Taylor @ 2002-12-16 22:18 UTC (permalink / raw)
To: linux-admin
In-Reply-To: <Pine.LNX.4.33.0212161645140.3389-100000@router.windsormach ine.com>
At 01:49 PM 12/16/02, you wrote:
>On Mon, 16 Dec 2002, Scott Taylor wrote:
>
> > That should be very useful to know. :)
> >
> > Now you have me curious (grr...I just got over that) why do you care if
> > there are more than 25 blocks in your zipped file?
>
>If it dumps out a zero byte file, as part of the pipe gzip will go gzip
>it, and it ends up being 20 bytes. As far as smbtar is concerned,
>that's a valid output, and returns 0 error code. It was easier to put
>down 25 than figure out if that's 25 bytes or 25 kilobytes.
Ok. But you are testing for blocks not bytes or KB. Not that it probably
matters at this point; blocks these days are usually 1K size anyhow.
>If it's a zero return code, AND the file is over 25(k), then the script
>rotates the backups, otherwise reports via email that there was a backup
>failure on that particular machine. Once in awhile I'll get one of those
>partial backups, and that's what the previous full daily backups are for.
Ah, I see. :)
>If i get two or so in a row, I go hunting down why the machine is
>failing(is it just turned off,
That's just plain annoying, but it's funny when they come to you and ask
for a recovery of some file they have been working on for the last 6 months. ;>
>is the ethernet unplugged AGAIN,
Damn janitors!
>did the hard drive die last Friday and the user hasn't called me after 4
>days totell me their computer is broken?)
That's annoying too, but just about as funny as turning it off. I like to
send them to their boss to explain how much work they have accomplished in
that case. Yet, if it is the boss, I just take my time getting a
replacement. =P
>Are we still on topic? :D
Doesn't quite seem like it, but it's been interesting, nonetheless. ;)
Scott.
^ permalink raw reply
* RE: NAT helper module for MSN
From: Holzrichter, Bruce @ 2002-12-16 22:24 UTC (permalink / raw)
To: 'Carlos Fernandez Sanz', linux-kernel
>
> Is there a help module to help MSN work through a NAT'ed connection?
>
> If there isn't one, is there an ongoing project to write one
> I can join?
>
This may not be strictly kernel related, are you using masquerading? I have
yet to have a prob with MSN messenger using 2.2 with ipmasq. But, have you
checked http://ipmasq.cjb.net/
Here's the masq modules I have loaded.
ip_masq_quake 1420 0 (unused)
ip_gre 6776 0 (unused)
ip_masq_autofw 2556 0 (unused)
ip_masq_portfw 2636 2
ip_masq_mfw 3272 0
ip_masq_ipsec 11812 0 (unused)
ip_masq_pptp 6856 0
ip_masq_irc 1656 0 (unused)
ip_masq_raudio 3064 0
ip_masq_ftp 2680 0
Maybe you should check withe the iptables group at the netfilter home:
http://www.netfilter.org/
Hope that helps.
Bruce H.
^ permalink raw reply
* Re: [Linux-ia64] Re: gas generates incorrect ia64 unwind rlen values
From: David Mosberger @ 2002-12-16 22:16 UTC (permalink / raw)
To: linux-ia64
In-Reply-To: <marc-linux-ia64-105590709805569@msgid-missing>
>>>>> On Tue, 17 Dec 2002 09:12:25 +1100, Keith Owens <kaos@sgi.com> said:
Keith> On 16 Dec 2002 16:25:15 -0500,
Keith> Jim Wilson <wilson@redhat.com> wrote:
>>> RH 7.2-ia64, Dec 15 2001.
>> The tools for this release were based on Summer 2000 FSF sources
>> with patches. So they are about 2.5 years old now.
Keith> I know, but AFAICT it is the latest that is available on the RH site
Keith> for ia64. If there is a more recent binutils ia64.rpm, point me at it
Keith> and I will try it.
Not Red Hat, but while Debian (unfortunately) still defaults to
gcc-2.9x at the moment, you can do "apt-get install gcc-3.2" to get
something reasonably modern.
--david
^ permalink raw reply
* Re: dosemu 1.1.3.9 user report
From: Bart Oldeman @ 2002-12-16 22:15 UTC (permalink / raw)
To: Jan Willem Stumpel; +Cc: linux-msdos
In-Reply-To: <3DFE4880.3020604@my.home>
On Mon, 16 Dec 2002, Jan Willem Stumpel wrote:
> OK.. used the new dosemu.conf (everything commented out), set
> hdimage to "dos" to make it boot on my system, then only changed
> hogthreshold. Tried it (1.1.3.9) with
>
> hogthreshold = 0 --- 99 % CPU
> hogthreshold = 1 --- quiet behaviour
= 1 is the default. This is what dosemu.conf mentions.
> hogthreshold = 800 --- 99 % CPU
> hogthreshold commented out altogether --- quiet behaviour
>
> Mmm.. not very intuitive, this. Somewhere in the DOC's it
> says that hogthreshold should be related to the clock speed, and
> the higher hogthreshold, the quieter dosemu gets. Anyway, you know
> what I think about the dosemu doc's.
Much of what is in the docs is out of date that it one of the problems.
Anyway the thing you stated was taken out of context:
"Usually it is a good idea to format the drive after it."
this applies to a new disk image. The other "problem" is that new
Linux users are in general less technical than they were in say 1994, and
while this statement looks obvious to me it apparently does not do so for you.
(violating the art of technical writing).
"the drive" here means, "the DOS drive that you get if you use the freshly
created hdimage". in any case, hdimages aren't necessary for most people
anymore and here the out-of-date problem shows its ugly head.
> Mmm.. not very intuitive, this. Somewhere in the DOC's it
> says that hogthreshold should be related to the clock speed, and
> the higher hogthreshold, the quieter dosemu gets. Anyway, you know
> what I think about the dosemu doc's.
now to the point: hogthreshold, see README.txt:
The HogThreshold value determines how nice
Dosemu will be about giving other Linux processes a chance to run.
$_hogthreshold = (1) # 0 == all CPU power to DOSEMU
# 1 == max power for Linux
# >1 the higher, the faster DOSEMU will be
what this means is that the higher, the _faster_, not _quieter_, DOSEMU
will be, that is, the more CPU time DOSEMU will get! So (800) will get
DOSEMU much more CPU time than (1). You can basically view (0) as (infinity).
and there's also something in README-tech.txt
The HogThreshold value determines how nice Dosemu will be about giving
other Linux processes a chance to run. Setting the HogThreshold value
to approximately half of you BogoMips value will slightly degrade
Dosemu performance, but significantly increase overall system idle
time. A zero value runs Dosemu at full tilt.
the HOWTO says:
Daniel Barlow(jo95004@sable.ox.ac.uk) reported (95/4/8) that
HogThreshold should now be set to approximately half of the BogoMips
value that the system reports on boot.
this is really out-of-date, as you have seen. hogthreshold has been
tweaked recently, it is really something you have to play with to see
what's the best compromise, mind you, you can use "speed" inside dosemu
to change it, ie.
c:\>speed 1
(be nice)
c:\>speed 0
(be fast)
> > So you have applied some patches, havent you?
>
> Well of course I did. The patch set posted yesterday by Bart
> Oldeman. Or isn't that what you mean? Anyway I get a boot-up
> message which begins
well there are some related (experimental) patches at
http://dosemu.sourceforge.net/stas
to get sound going for duke3d and doom.
Bart
^ permalink raw reply
* Re: 2.4.21-pre1 broke the ide-tape driver
From: Mikael Pettersson @ 2002-12-16 22:18 UTC (permalink / raw)
To: alan; +Cc: linux-kernel, marcelo
On 16 Dec 2002 14:53:33 +0000, Alan Cox wrote:
>On Sun, 2002-12-15 at 23:38, Mikael Pettersson wrote:
>>
>> On Sun, 15 Dec 2002 02:23:34 +0100, Marc-Christian Petersen wrote:
>> >> Kernel 2.4.21-pre1 broke the ide-tape driver: the driver
>> >> now hangs during initialisation. 2.2 kernels (with Andre's
>> >> IDE patch) and 2.4 up to 2.4.20 do not have this problem.
>> >> My box has a Seagate STT8000A ATAPI tape drive as hdd;
>> >> hdc is a Philips CD-RW, and the controller is ICH2 (i850 chipset).
>> >http://linux.bkbits.net:8080/linux-2.4/patch@1.828?nav=index.html|ChangeSet@-7d|cset@1.828
>>
>> Addendum: this patch fixes the init-time hang, and ide-tape does
>> seem to work fine, but 'rmmod ide-tape' oopses -- 2.4.20-ac2 also
>> oopses on 'rmmod ide-tape'.
>
>I don't unfortunately have any ide-tape devices. I'll take a look though
I can trigger the oops by a simple 'modprobe ide-tape; rmmod ide-tape'
even on boxes without ide-tape devices.
^ permalink raw reply
* Re: [Linux-ia64] Re: gas generates incorrect ia64 unwind rlen values
From: David Mosberger @ 2002-12-16 22:12 UTC (permalink / raw)
To: linux-ia64
In-Reply-To: <marc-linux-ia64-105590709805569@msgid-missing>
>>>>> On Mon, 16 Dec 2002 20:00:23 +1100, Keith Owens <kaos@sgi.com> said:
Keith> Sorry for the surfeit of exclamation marks but the ia64 unwind code is
Keith> driving me up the wall. I want kdb to backtrace correctly, all this
Keith> garbage data just gets in the way.
Then use gcc-3.2 (or backport the fixes).
--david
^ permalink raw reply
* [Linux-ia64] Re: gas generates incorrect ia64 unwind rlen values
From: Keith Owens @ 2002-12-16 22:12 UTC (permalink / raw)
To: linux-ia64
In-Reply-To: <marc-linux-ia64-105590709805569@msgid-missing>
On 16 Dec 2002 16:25:15 -0500,
Jim Wilson <wilson@redhat.com> wrote:
>>RH 7.2-ia64, Dec 15 2001.
>
>The tools for this release were based on Summer 2000 FSF sources with patches.
>So they are about 2.5 years old now.
I know, but AFAICT it is the latest that is available on the RH site
for ia64. If there is a more recent binutils ia64.rpm, point me at it
and I will try it.
>Are you sure this is an assembler problem? If the compiler is emitting bad
>unwind directives, then it could be a compiler problem. You didn't mention
>anything about looking at assembly code.
See my follow up mail about memset.S, that is pure assembler. But just
to be sure, here is traps.c::ia64_fault assembler output. No spurious
unwind directives from gcc but unwind is still wrong.
.text
.align 16
.align 32
.global ia64_fault#
.proc ia64_fault#
ia64_fault:
.prologue 12, 37
.save ar.pfs, r38
alloc r38 = ar.pfs, 4, 3, 5, 0
.fframe 256
adds r12 = -256, r12
movl r14 = 34359738383
.save rp, r37
mov r37 = b0
;;
.body
and r14 = r14, r33
movl r15 = 34359738372
[454 lines omitted for brevity]
.L2933:
mov r39 = r36
mov r40 = r33
br.call.sptk.many b0 = ia32_intercept#
;;
cmp4.ne p6, p7 = 0, r8
(p7) br.cond.dpnt .L2880
addl r39 = @ltoff(.LC39), gp
;;
ld8 r39 = [r39]
br.call.sptk.many b0 = printk#
;;
adds r14 = 8, r36
addl r39 = @ltoff(.LC40), gp
mov r41 = r34
;;
ld8 r40 = [r14]
ld8 r39 = [r39]
mov r42 = r33
mov r43 = r35
br.call.sptk.many b0 = printk#
[unwind tables in the object say that the body ends here]
;;
addl r39 = 11, r0
mov r40 = r13
br.call.sptk.many b0 = force_sig#
;;
br .L2880
.L2935:
adds r34 = 144, r12
addl r40 = @ltoff(.LC41), gp
shr.u r41 = r33, 16
;;
mov r39 = r34
ld8 r40 = [r40]
br.call.sptk.many b0 = sprintf#
;;
br .L2882
.L2936:
adds r34 = 144, r12
addl r40 = @ltoff(.LC42), gp
mov r41 = r32
;;
mov r39 = r34
ld8 r40 = [r40]
br.call.sptk.many b0 = sprintf#
;;
.L2882:
mov r39 = r34
mov r40 = r36
mov r41 = r33
br.call.sptk.many b0 = die_if_kernel#
;;
addl r39 = 4, r0
mov r40 = r13
br.call.sptk.many b0 = force_sig#
;;
.L2880:
mov ar.pfs = r38
mov b0 = r37
.restore sp
adds r12 = 256, r12
br.ret.sptk.many b0
.endp ia64_fault#
^ permalink raw reply
* Re: [Linux-ia64] gas generates incorrect ia64 unwind rlen values
From: David Mosberger @ 2002-12-16 22:11 UTC (permalink / raw)
To: linux-ia64
In-Reply-To: <marc-linux-ia64-105590709805566@msgid-missing>
>>>>> On Mon, 16 Dec 2002 15:46:27 +1100, Keith Owens <kaos@sgi.com> said:
Keith> As I mentioned in the previous mail, I could not find any mail, bug
Keith> reports or changelog entries that mentioned ia64 unwind or rlen being
Keith> wrong. Which makes me think that the bug exists in current binutils,
Keith> however I cannot test that at the moment.
Trust me: there were at least 2 or 3 fixes; some in the compiler, some
in binutils. Here is an example from gas:
2002-02-22 David Mosberger <davidm@hpl.hp.com>
* config/tc-ia64.c (dot_restore): Issue error message of epilogue
count exceeds prologue count.
(md_show_usage): Describe -mconstant-gp and -mauto-pic.
(unwind.label_prologue_count): New member.
Based on a patch by Hans Boehm <hboehm@hpl.hp.com>:
(get_saved_prologue_count): New function.
(save_prologue_count): New function.
(free_saved_prologue_count): New function.
(dot_label_state): Record state label by calling save_prologue_count().
(dot_copy_state): Restore prologue count by calling
get_saved_prologue_count().
(generate_unwind_image): Free up list of saved prologue
counts by calling free_saved_prologue_counts().
--david
^ permalink raw reply
* Re: dosemu 1.1.3.9 user report
From: Stas Sergeev @ 2002-12-16 22:09 UTC (permalink / raw)
To: linux-msdos
Hello.
Jan Willem Stumpel wrote:
> hogthreshold = 0 --- 99 % CPU
> hogthreshold = 1 --- quiet behaviour
> hogthreshold = 800 --- 99 % CPU
Correct.
> hogthreshold commented out altogether --- quiet behaviour
> Mmm.. not very intuitive, this. Somewhere in the DOC's it
> says that hogthreshold should be related to the clock speed, and
> the higher hogthreshold, the quieter dosemu gets.
This mistake of the docs was already
fixed.
>> So you have applied some patches, havent you?
> Well of course I did. The patch set posted yesterday by Bart
> Oldeman. Or isn't that what you mean?
Nope... The fact that you got any sound
at all from Duke3D without an immediate
hang, is something very unusual.
To get a sound from Duke3D and no hangs,
this patch is a mandatory:
http://dosemu.sourceforge.net/stas/dpmi_sti4a.diff
Also read the comments about an adjustments
you have to make to dosemu.conf after
applying it.
You are the first person who got even an
intro with sound without that patch...
This doesn't explain a Wolf's problem
however.
What version of Wolf do you have?
(it is written in the bottom-right
corner of the screen where it is hanging
for you).
Tested with Wolfenstain V1.1 and
Spear of Destiny V1.0.
Do you have the same?
Also please produce a log of a sound
events (-D9+S) and mail it to me
compressed, and maybe I'll see the problem.
> Extra info: I use ms-dos 6.00. Maybe that's relevant.
No idea. I am using a PC-DOS 7.0 which
is a functional clone of MS-DOS 6.22
(or around it).
Try bypassing the config.sys and autoexec
by pressing F5 at startup. Maybe that
will help.
^ permalink raw reply
* Re: [Linux-ia64] gas generates incorrect ia64 unwind rlen values
From: David Mosberger @ 2002-12-16 22:08 UTC (permalink / raw)
To: linux-ia64
In-Reply-To: <marc-linux-ia64-105590709805566@msgid-missing>
>>>>> On Mon, 16 Dec 2002 12:24:03 +1100, Keith Owens <kaos@sgi.com> said:
Keith> Using binutils-2.11.90.0.8-12 (old I know, but it is the only version
Keith> supported on Redhat ia64), the rlen field in the body part of the
Keith> unwind descriptors is incorrect, it is short of the real body size.
There have been many unwind-related bug fixes to the toolchain. It's
one reason why 2.9x is hopelessly obsolete. Distros should really
switch to gcc-3.2.
--david
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.