* slab.c comments patch and doc
@ 2002-04-26 0:57 Mel
2002-05-21 1:14 ` gdth driver oops on shutdown Stephen Samuel
0 siblings, 1 reply; 2+ messages in thread
From: Mel @ 2002-04-26 0:57 UTC (permalink / raw)
To: linux-kernel
This is a first cut effort patch against 2.4.19pre7 at improving the
documentation for the slab allocator. These are pretty minor changes and
none involving code.
The main work into this is at
http://www.csn.ul.ie/~mel/projects/vm/docs/slab.html which is a verbose
document that tries to explain the slab allocator. It covers most of the
slab allocator with the per cpu cache been the only major absense.
I'd really appreciate it if people took a look at the patch and the doc to
make sure there is no glaring errors in it. As I'll eventually be
submitting docs on each part of the VM for the Documentation/vm directory,
the less errors in it, the better :-)
Thanks
Mel Gorman
--- /usr/src/linux-2.4.19pre7.orig/mm/slab.c Tue Apr 16 20:36:49 2002
+++ /usr/src/linux-2.4.19pre7.mel/mm/slab.c Fri Apr 26 01:45:05 2002
@@ -173,8 +173,11 @@
unsigned int limit;
} cpucache_t;
+/* Returns back the next cpucache_t struct */
#define cc_entry(cpucache) \
((void **)(((cpucache_t*)(cpucache))+1))
+
+/* Returns back the cpucachet struct for this processor */
#define cc_data(cachep) \
((cachep)->cpudata[smp_processor_id()])
/*
@@ -196,7 +199,8 @@
unsigned int num; /* # of objs per slab */
spinlock_t spinlock;
#ifdef CONFIG_SMP
- unsigned int batchcount;
+ /* Number of objects allocated to a CPU cache in one batch */
+ unsigned int batchcount;
#endif
/* 2) slab additions /removals */
@@ -300,6 +304,11 @@
#endif
+/* QUERY: Would it make more sense to make this value related to MAX_GFP_ORDER
+ * like MAX_GFP_ORDER / 2 . Evaluates to the same thing but 5 is a magic
+ * number where as MAX_GFP_ORDER / 2 says "at least have two objects
+ * in a slab"
+ */
/* maximum size of an obj (in 2^order pages) */
#define MAX_OBJ_ORDER 5 /* 32 pages */
@@ -315,10 +324,10 @@
*/
#define MAX_GFP_ORDER 5 /* 32 pages */
-
-/* Macros for storing/retrieving the cachep and or slab from the
- * global 'mem_map'. These are used to find the slab an obj belongs to.
- * With kfree(), these are used to find the cache which an obj belongs to.
+/*
+ * The slab_t and cache_t a page belongs to is stored on the
+ * struct page->list . This macros will retrieve set and retrieve it.
+ * With kfree(), these are used to find the cache which an obj belongs to
*/
#define SET_PAGE_CACHE(pg,x) ((pg)->list.next = (struct list_head *)(x))
#define GET_PAGE_CACHE(pg) ((kmem_cache_t *)(pg)->list.next)
@@ -395,6 +404,7 @@
base = sizeof(slab_t);
extra = sizeof(kmem_bufctl_t);
}
+ /* Keep trying to pack in objects until we run out of space */
i = 0;
while (i*size + L1_CACHE_ALIGN(base+i*extra) <= wastage)
i++;
@@ -520,6 +530,12 @@
}
#if DEBUG
+/*
+ * kmem_poison_obj - Poison an object
+ *
+ * This fills an object with POISON_BYTE bytes and marks the end with
+ * POISON_END. It's used to catch overruns
+ */
static inline void kmem_poison_obj (kmem_cache_t *cachep, void *addr)
{
int size = cachep->objsize;
@@ -531,6 +547,13 @@
*(unsigned char *)(addr+size-1) = POISON_END;
}
+/*
+ * kmem_check_poison_obj - Make sure an object hasn't been overrun
+ *
+ * This will make sure an object hasn't been used prematurly or is
+ * overlapping with another object by making sure the marker POISON_END
+ * is at the right place
+ */
static inline int kmem_check_poison_obj (kmem_cache_t *cachep, void *addr)
{
int size = cachep->objsize;
@@ -738,8 +761,10 @@
}
/*
- * Large num of objs is good, but v. large slabs are currently
- * bad for the gfp()s.
+ * The Buddy Allocator will suffer if it has to deal with
+ * too many allocators of a large order. So while large
+ * numbers of objects is good, large orders are not so
+ * slab_break_gfp_order forces a balance
*/
if (cachep->gfporder >= slab_break_gfp_order)
break;
@@ -800,7 +825,10 @@
if (g_cpucache_up)
enable_cpucache(cachep);
#endif
- /* Need the semaphore to access the chain. */
+ /*
+ * Need the semaphore to access the chain. Cycle through the chain
+ * to make sure there isn't a cache of the same name available.
+ */
down(&cache_chain_sem);
{
struct list_head *p;
@@ -869,6 +897,14 @@
cpucache_t *new[NR_CPUS];
} ccupdate_struct_t;
+/*
+ * do_ccupdate_local - Copy the cachep data from info into the cachep
+ *
+ * When this function is called, info is a local variable of type
+ * ccupdate_struct_t . The job of this function is to take all the
+ * information in it and copy it into the cpudata array in the
+ * cachep
+ */
static void do_ccupdate_local(void *info)
{
ccupdate_struct_t *new = (ccupdate_struct_t *)info;
@@ -880,18 +916,29 @@
static void free_block (kmem_cache_t* cachep, void** objpp, int len);
+/*
+ * drain_cpu_caches - Remove all free objects kept spare for a CPU
+ *
+ * kmem_cache_alloc_batch allocates a block of objects that are reserved
+ * for the use of that CPU. This function is called during kmem_cache_shrink
+ * so the objects need to be freed
+ */
static void drain_cpu_caches(kmem_cache_t *cachep)
{
ccupdate_struct_t new;
int i;
+ /* new is an array of cpucache_t */
memset(&new.new,0,sizeof(new.new));
new.cachep = cachep;
down(&cache_chain_sem);
+
+ /* Update all the local CPU caches to show they are now empty */
smp_call_function_all_cpus(do_ccupdate_local, (void *)&new);
+ /* For every cpu, free all the avail objects they have */
for (i = 0; i < smp_num_cpus; i++) {
cpucache_t* ccold = new.new[cpu_logical_map(i)];
if (!ccold || (ccold->avail == 0))
@@ -901,7 +948,10 @@
local_irq_enable();
ccold->avail = 0;
}
+
+ /* QUERY: Why do we set it twice, wasn't it set above? */
smp_call_function_all_cpus(do_ccupdate_local, (void *)&new);
+
up(&cache_chain_sem);
}
@@ -940,6 +990,12 @@
return ret;
}
+/*
+ * __kmem_cache_shrink - Shrink a cache
+ *
+ * Shrinks a cache and returns if the cache is totally free or not. Used when
+ * trying to destroy a cache
+ */
static int __kmem_cache_shrink(kmem_cache_t *cachep)
{
int ret;
@@ -974,6 +1030,7 @@
ret = __kmem_cache_shrink_locked(cachep);
spin_unlock_irq(&cachep->spinlock);
+ /* Number of slabs returned << gfporder gives number of pages freed */
return ret << cachep->gfporder;
}
@@ -1053,6 +1110,15 @@
return slabp;
}
+/*
+ * kmem_cache_init_objs - Initialise all objects in a slab
+ *
+ * Called once by kmem_cache_grow. It creates all the objects for the slab
+ * and calls the constructor if there is one available. If debugging is
+ * available, either end of an object will be marked with RED_MAGIC1 to
+ * catch overruns. Then the object will be poisoned with a known pattern
+ *
+ */
static inline void kmem_cache_init_objs (kmem_cache_t * cachep,
slab_t * slabp, unsigned long ctor_flags)
{
@@ -1082,6 +1148,12 @@
if (cachep->flags & SLAB_POISON)
/* need to poison the objs */
kmem_poison_obj(cachep, objp);
+
+ /* QUERY: Is it really necessary to check this now? We
+ * just wrote them above ago unless the objp
+ * pointers were totally screwed, this isn't
+ * going to be true surely?
+ */
if (cachep->flags & SLAB_RED_ZONE) {
if (*((unsigned long*)(objp)) != RED_MAGIC1)
BUG();
@@ -1115,6 +1187,11 @@
*/
if (flags & ~(SLAB_DMA|SLAB_LEVEL_MASK|SLAB_NO_GROW))
BUG();
+
+ /* QUERY: Dead check? Wouldn't BUG() have above have prevented getting
+ Or is having SLAB_NO_GROW in here not a bug at all and
+ * the previous check is bogus?
+ */
if (flags & SLAB_NO_GROW)
return 0;
@@ -1167,7 +1244,7 @@
if (!(slabp = kmem_cache_slabmgmt(cachep, objp, offset, local_flags)))
goto opps1;
- /* Nasty!!!!!! I hope this is OK. */
+ /* For each page used for the slab, attach the cachep and slabp */
i = 1 << cachep->gfporder;
page = virt_to_page(objp);
do {
@@ -1226,6 +1303,13 @@
}
#endif
+/*
+ * kmem_cache_alloc_head - Simple debugging checks before and object is
+ * allocated
+ *
+ * Asserts that the wrong combination of SLAB_DMA and GFP_DMA is not in
+ * use.
+ */
static inline void kmem_cache_alloc_head(kmem_cache_t *cachep, int flags)
{
if (flags & SLAB_DMA) {
@@ -1237,6 +1321,7 @@
}
}
+/* kmem_cache_alloc_one_tail - Allocate one object from the slab provided */
static inline void * kmem_cache_alloc_one_tail (kmem_cache_t *cachep,
slab_t *slabp)
{
@@ -1249,6 +1334,13 @@
/* get obj pointer */
slabp->inuse++;
objp = slabp->s_mem + slabp->free*cachep->objsize;
+
+ /* QUERY: This moves free onto the next object. However, during
+ * kmem_cache_free_one, the free is pointed to the object
+ * been freed. Lets say the one freed pointed into the middle
+ * of an allocated group of objects. free now points to
+ * an allocated object. bug?
+ */
slabp->free=slab_bufctl(slabp)[slabp->free];
if (unlikely(slabp->free == BUFCTL_END)) {
@@ -1300,6 +1392,12 @@
})
#ifdef CONFIG_SMP
+/*
+ * kmem_cache_alloc_batch - Allocate multiple objects and store in cache
+ *
+ * This function will allocate a number of objects for a slab and keep a
+ * reference to them in the local cpucache_t entry.
+ */
void* kmem_cache_alloc_batch(kmem_cache_t* cachep, cpucache_t* cc, int flags)
{
int batchcount = cachep->batchcount;
@@ -1308,13 +1406,16 @@
while (batchcount--) {
struct list_head * slabs_partial, * entry;
slab_t *slabp;
- /* Get slab alloc is to come from. */
+
+ /* Get slab alloc is to come from */
slabs_partial = &(cachep)->slabs_partial;
entry = slabs_partial->next;
if (unlikely(entry == slabs_partial)) {
struct list_head * slabs_free;
slabs_free = &(cachep)->slabs_free;
entry = slabs_free->next;
+
+ /* no partial or free slab. call kmem_cache_grow */
if (unlikely(entry == slabs_free))
break;
list_del(entry);
@@ -1322,6 +1423,8 @@
}
slabp = list_entry(entry, slab_t, list);
+
+ /* Increment the number of avail objects for this CPU cache */
cc_entry(cc)[cc->avail++] =
kmem_cache_alloc_one_tail(cachep, slabp);
}
@@ -1333,6 +1436,7 @@
}
#endif
+/* __kmem_cache_alloc - Allocate an object from a slab */
static inline void * __kmem_cache_alloc (kmem_cache_t *cachep, int flags)
{
unsigned long save_flags;
@@ -1340,9 +1444,13 @@
kmem_cache_alloc_head(cachep, flags);
try_again:
+
+ /* QUERY: Is this really needed for the UP case? */
local_irq_save(save_flags);
+
#ifdef CONFIG_SMP
{
+ /* Check to see can we allocate from the CPU cache */
cpucache_t *cc = cc_data(cachep);
if (cc) {
@@ -1366,6 +1474,8 @@
#endif
local_irq_restore(save_flags);
return objp;
+
+/* kmem_cache_alloc_one contains a goto to this label */
alloc_new_slab:
#ifdef CONFIG_SMP
spin_unlock(&cachep->spinlock);
@@ -1446,8 +1556,14 @@
return;
#endif
{
+ /* Set free to point to this object now that it has been
+ * freed.
+ *
+ * QUERY: This could introduce problems during the next
+ * alloc_one. see kmem_cache_alloc_one_tail for
+ * details.
+ */
unsigned int objnr = (objp-slabp->s_mem)/cachep->objsize;
-
slab_bufctl(slabp)[objnr] = slabp->free;
slabp->free = objnr;
}
@@ -1476,6 +1592,11 @@
kmem_cache_free_one(cachep, *objpp);
}
+/* free_block - Free a number of objects placed together
+ *
+ * Of primary interest to the per CPU cache which will have a number of
+ * objects placed together
+ */
static void free_block (kmem_cache_t* cachep, void** objpp, int len)
{
spin_lock(&cachep->spinlock);
@@ -1554,6 +1675,7 @@
{
cache_sizes_t *csizep = cache_sizes;
+ /* QUERY: Use kmem_find_general_cachep? */
for (; csizep->cs_size; csizep++) {
if (size > csizep->cs_size)
continue;
@@ -1600,12 +1722,18 @@
if (!objp)
return;
local_irq_save(flags);
+
+ /* CHECK\_PAGE makes sure this is a slab cache. */
CHECK_PAGE(virt_to_page(objp));
+
+ /* The struct page list stores the pointer to the kmem_cache_t */
c = GET_PAGE_CACHE(virt_to_page(objp));
+
__kmem_cache_free(c, (void*)objp);
local_irq_restore(flags);
}
+/* kmem_find_general_cachep - Find a general cache large enough for size */
kmem_cache_t * kmem_find_general_cachep (size_t size, int gfpflags)
{
cache_sizes_t *csizep = cache_sizes;
@@ -1624,9 +1752,15 @@
#ifdef CONFIG_SMP
-/* called with cache_chain_sem acquired. */
+/*
+ * kmem_tune_cpucache - Create and tune the per CPU caches
+ *
+ * This function is responsible for creating a cpucache_t for each CPU.
+ * It sets an appropriate limit and avail based on batchcount
+ */
static int kmem_tune_cpucache (kmem_cache_t* cachep, int limit, int batchcount)
{
+ /* Static struct large enough to store data on NR_CPU CPU's */
ccupdate_struct_t new;
int i;
@@ -1644,6 +1778,10 @@
memset(&new.new,0,sizeof(new.new));
if (limit) {
+ /*
+ * Create smp_num_cpus number of cpucache_t and place them
+ * in the ccupdate_struct_t struct new
+ */
for (i = 0; i< smp_num_cpus; i++) {
cpucache_t* ccnew;
@@ -1661,8 +1799,10 @@
cachep->batchcount = batchcount;
spin_unlock_irq(&cachep->spinlock);
+ /* Copy the information from new into cachep */
smp_call_function_all_cpus(do_ccupdate_local, (void *)&new);
+ /* This clears all objects in all CPU caches */
for (i = 0; i < smp_num_cpus; i++) {
cpucache_t* ccold = new.new[cpu_logical_map(i)];
if (!ccold)
@@ -1672,6 +1812,7 @@
local_irq_enable();
kfree(ccold);
}
+
return 0;
oom:
for (i--; i >= 0; i--)
@@ -1679,6 +1820,12 @@
return -ENOMEM;
}
+/*
+ * enable_cpucache
+ *
+ * Find a good size for limit based on the size of the objects and create
+ * the CPU caches with kmem_tune_cpucache
+ */
static void enable_cpucache (kmem_cache_t *cachep)
{
int err;
@@ -1762,6 +1909,7 @@
}
#ifdef CONFIG_SMP
{
+ /* Free the per CPU cache */
cpucache_t *cc = cc_data(searchp);
if (cc && cc->avail) {
__free_block(searchp, cc_entry(cc), cc->avail);
@@ -1772,6 +1920,8 @@
full_free = 0;
p = searchp->slabs_free.next;
+
+ /* Count the number of free slabs (full_free) */
while (p != &searchp->slabs_free) {
slabp = list_entry(p, slab_t, list);
#if DEBUG
@@ -1820,7 +1970,11 @@
best_len = (best_len + 1)/2;
for (scan = 0; scan < best_len; scan++) {
struct list_head *p;
-
+
+ /*
+ * QUERY: useless check? The search above always skips over
+ * caches that are growing.
+ */
if (best_cachep->growing)
break;
p = best_cachep->slabs_free.prev;
@@ -1842,6 +1996,8 @@
spin_lock_irq(&best_cachep->spinlock);
}
spin_unlock_irq(&best_cachep->spinlock);
+
+ /* Return number of pages freed */
ret = scan * (1 << best_cachep->gfporder);
out:
up(&cache_chain_sem);
^ permalink raw reply [flat|nested] 2+ messages in thread
* gdth driver oops on shutdown
2002-04-26 0:57 slab.c comments patch and doc Mel
@ 2002-05-21 1:14 ` Stephen Samuel
0 siblings, 0 replies; 2+ messages in thread
From: Stephen Samuel @ 2002-05-21 1:14 UTC (permalink / raw)
Cc: linux-kernel
[-- Attachment #1: Type: text/plain, Size: 2022 bytes --]
we have a new Intel-hardware box that is having problems with the
gdth driver (or so it seems). This is a machine that has 6gb of ram
(breaking the 4GB boundary MAY have something to do with it..) and an
srcu-31 hardware raid controller (2x2 mirror) Things work fine except for
two things:
Modprobe fails when loading the system (boot extract below),
and the system has an OOPS when shutting down the filesystems.
1) when booting, I see the message:
May 20 18:54:05 virtual kernel: Linux IP multicast router 0.06 plus PIM-SM
May 20 18:54:05 virtual kernel: NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
May 20 18:54:05 virtual kernel: RAMDISK: Compressed image found at block 0
May 20 18:54:05 virtual kernel: Freeing initrd memory: 216k freed
May 20 18:54:05 virtual kernel: VFS: Mounted root (ext2 filesystem).
May 20 18:54:05 virtual kernel: SCSI subsystem driver Revision: 1.00
May 20 18:54:05 virtual kernel: kmod: failed to exec /sbin/modprobe -s -k scsi_hostadapter, errno = 2
************
May 20 18:54:05 virtual kernel: Configuring GDT-PCI HA at 1/8 IRQ 31
May 20 18:54:05 virtual kernel: scsi0 : SRCU31
May 20 18:54:05 virtual kernel: Vendor: Intel Model: Host Drive #00 Rev:
May 20 18:54:05 virtual kernel: Type: Direct-Access ANSI SCSI revision: 02
May 20 18:54:05 virtual kernel: Vendor: ESG-SHV Model: SCA HSBP M16 Rev: 0.04
May 20 18:54:05 virtual kernel: Type: Processor ANSI SCSI revision: 02
When shutting down the system... The last thing we see is an oops
(when shutting down)
images of the OOPS screens are at:
http://www.bcgreen.com/kernel/screen_01.jpg
and http://www.bcgreen.com/kernel/screen_02.jpg
the boot messages from /var/adm/messages is attached (oops)
--
Stephen Samuel +1(604)876-0426 samuel@bcgreen.com
http://www.bcgreen.com/~samuel/
Powerful committed communication, reaching through fear, uncertainty and
doubt to touch the jewel within each person and bring it to life.
[-- Attachment #2: oops.txt --]
[-- Type: text/plain, Size: 18864 bytes --]
May 20 18:54:03 virtual syslogd 1.4.1: restart.
May 20 18:54:03 virtual syslog: syslogd startup succeeded
May 20 18:54:03 virtual syslog: klogd startup succeeded
May 20 18:54:03 virtual kernel: klogd 1.4.1, log source = /proc/kmsg started.
May 20 18:54:03 virtual kernel: Linux version 2.4.18-4bigmem (bhcompile@stripples.devel.redhat.com) (gcc version 2.96 20000731 (Red Hat Linux 7.3 2.96-110)) #1 SMP Thu May 2 18:06:05 EDT 2002
May 20 18:54:03 virtual kernel: BIOS-provided physical RAM map:
May 20 18:54:03 virtual kernel: BIOS-e820: 0000000000000000 - 000000000009b000 (usable)
May 20 18:54:03 virtual kernel: BIOS-e820: 000000000009b000 - 00000000000a0000 (reserved)
May 20 18:54:03 virtual kernel: BIOS-e820: 00000000000e8000 - 0000000000100000 (reserved)
May 20 18:54:03 virtual kernel: BIOS-e820: 0000000000100000 - 00000000fbff0000 (usable)
May 20 18:54:03 virtual kernel: BIOS-e820: 00000000fbff0000 - 00000000fbfff000 (ACPI data)
May 20 18:54:03 virtual kernel: BIOS-e820: 00000000fbfff000 - 00000000fc000000 (ACPI NVS)
May 20 18:54:03 virtual kernel: BIOS-e820: 00000000fec00000 - 00000000fec02000 (reserved)
May 20 18:54:03 virtual kernel: BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved)
May 20 18:54:03 virtual kernel: BIOS-e820: 00000000fff00000 - 0000000100000000 (reserved)
May 20 18:54:03 virtual kernel: BIOS-e820: 0000000100000000 - 0000000180000000 (usable)
May 20 18:54:03 virtual portmap: portmap startup succeeded
May 20 18:54:03 virtual kernel: 5248MB HIGHMEM available.
May 20 18:54:03 virtual kernel: found SMP MP-table at 000ff780
May 20 18:54:03 virtual kernel: hm, page 000ff000 reserved twice.
May 20 18:54:03 virtual kernel: hm, page 00100000 reserved twice.
May 20 18:54:03 virtual kernel: hm, page 000f1000 reserved twice.
May 20 18:54:03 virtual kernel: hm, page 000f2000 reserved twice.
May 20 18:54:04 virtual kernel: On node 0 totalpages: 1572864
May 20 18:54:04 virtual kernel: zone(0): 4096 pages.
May 20 18:54:04 virtual keytable: Loading keymap: succeeded
May 20 18:54:04 virtual kernel: zone(1): 225280 pages.
May 20 18:54:04 virtual kernel: zone(2): 1343488 pages.
May 20 18:54:04 virtual kernel: Intel MultiProcessor Specification v1.4
May 20 18:54:04 virtual keytable: Loading system font: succeeded
May 20 18:54:04 virtual kernel: Virtual Wire compatibility mode.
May 20 18:54:04 virtual kernel: OEM ID: INTEL Product ID: SCB20 APIC at: 0xFEE00000
May 20 18:54:04 virtual kernel: Processor #3 Pentium(tm) Pro APIC version 17
May 20 18:54:04 virtual kernel: Processor #0 Pentium(tm) Pro APIC version 17
May 20 18:54:04 virtual kernel: I/O APIC #4 Version 17 at 0xFEC00000.
May 20 18:54:04 virtual kernel: I/O APIC #5 Version 17 at 0xFEC01000.
May 20 18:54:04 virtual random: Initializing random number generator: succeeded
May 20 18:54:04 virtual kernel: Processors: 2
May 20 18:54:04 virtual kernel: Kernel command line: ro root=/dev/sda1 vga=0x0F07
May 20 18:54:04 virtual kernel: Initializing CPU#0
May 20 18:54:04 virtual kernel: Detected 1263.496 MHz processor.
May 20 18:54:04 virtual kernel: Console: colour VGA+ 80x60
May 20 18:54:04 virtual kernel: Calibrating delay loop... 2523.13 BogoMIPS
May 20 18:54:04 virtual kernel: Memory: 6135556k/6291456k available (1235k kernel code, 89896k reserved, 854k data, 304k init, 5308352k highmem)
May 20 18:54:04 virtual kernel: Dentry cache hash table entries: 262144 (order: 9, 2097152 bytes)
May 20 18:54:04 virtual kernel: Inode cache hash table entries: 262144 (order: 9, 2097152 bytes)
May 20 18:54:04 virtual netfs: Mounting other filesystems: succeeded
May 20 18:54:04 virtual kernel: Mount-cache hash table entries: 131072 (order: 8, 1048576 bytes)
May 20 18:54:04 virtual kernel: Buffer cache hash table entries: 524288 (order: 9, 2097152 bytes)
May 20 18:54:04 virtual kernel: Page-cache hash table entries: 524288 (order: 9, 2097152 bytes)
May 20 18:54:04 virtual kernel: CPU: L1 I cache: 16K, L1 D cache: 16K
May 20 18:54:04 virtual kernel: CPU: L2 cache: 512K
May 20 18:54:04 virtual kernel: Intel machine check architecture supported.
May 20 18:54:04 virtual kernel: Intel machine check reporting enabled on CPU#0.
May 20 18:54:04 virtual kernel: Enabling fast FPU save and restore... done.
May 20 18:54:04 virtual kernel: Enabling unmasked SIMD FPU exception support... done.
May 20 18:54:04 virtual kernel: Checking 'hlt' instruction... OK.
May 20 18:54:04 virtual kernel: POSIX conformance testing by UNIFIX
May 20 18:54:04 virtual kernel: mtrr: v1.40 (20010327) Richard Gooch (rgooch@atnf.csiro.au)
May 20 18:54:04 virtual kernel: mtrr: detected mtrr type: Intel
May 20 18:54:04 virtual kernel: CPU: L1 I cache: 16K, L1 D cache: 16K
May 20 18:54:04 virtual kernel: CPU: L2 cache: 512K
May 20 18:54:04 virtual kernel: Intel machine check reporting enabled on CPU#0.
May 20 18:54:04 virtual kernel: CPU0: Intel(R) Pentium(R) III CPU family 1266MHz stepping 01
May 20 18:54:04 virtual kernel: per-CPU timeslice cutoff: 1462.38 usecs.
May 20 18:54:04 virtual autofs: automount startup succeeded
May 20 18:54:04 virtual kernel: task migration cache decay timeout: 10 msecs.
May 20 18:54:04 virtual kernel: enabled ExtINT on CPU#0
May 20 18:54:04 virtual kernel: ESR value before enabling vector: 00000004
May 20 18:54:04 virtual kernel: ESR value after enabling vector: 00000000
May 20 18:54:04 virtual kernel: Booting processor 1/0 eip 2000
May 20 18:54:04 virtual kernel: Initializing CPU#1
May 20 18:54:04 virtual kernel: masked ExtINT on CPU#1
May 20 18:54:04 virtual kernel: ESR value before enabling vector: 00000000
May 20 18:54:04 virtual kernel: ESR value after enabling vector: 00000000
May 20 18:54:04 virtual kernel: Calibrating delay loop... 2523.13 BogoMIPS
May 20 18:54:04 virtual kernel: CPU: L1 I cache: 16K, L1 D cache: 16K
May 20 18:54:04 virtual kernel: CPU: L2 cache: 512K
May 20 18:54:04 virtual kernel: Intel machine check reporting enabled on CPU#1.
May 20 18:54:04 virtual kernel: CPU1: Intel(R) Pentium(R) III CPU family 1266MHz stepping 01
May 20 18:54:04 virtual kernel: Total of 2 processors activated (5046.27 BogoMIPS).
May 20 18:54:04 virtual kernel: ENABLING IO-APIC IRQs
May 20 18:54:04 virtual kernel: Setting 4 in the phys_id_present_map
May 20 18:54:04 virtual kernel: ...changing IO-APIC physical APIC ID to 4 ... ok.
May 20 18:54:04 virtual kernel: Setting 5 in the phys_id_present_map
May 20 18:54:04 virtual kernel: ...changing IO-APIC physical APIC ID to 5 ... ok.
May 20 18:54:04 virtual kernel: ..TIMER: vector=0x31 pin1=2 pin2=0
May 20 18:54:04 virtual kernel: ..MP-BIOS bug: 8254 timer not connected to IO-APIC
May 20 18:54:04 virtual kernel: ...trying to set up timer (IRQ0) through the 8259A ...
May 20 18:54:04 virtual kernel: ..... (found pin 0) ...works.
May 20 18:54:04 virtual sshd: Starting sshd:
May 20 18:54:04 virtual kernel: testing the IO APIC.......................
May 20 18:54:04 virtual kernel:
May 20 18:54:05 virtual kernel:
May 20 18:54:05 virtual kernel: .................................... done.
May 20 18:54:05 virtual kernel: Using local APIC timer interrupts.
May 20 18:54:05 virtual kernel: calibrating APIC timer ...
May 20 18:54:05 virtual kernel: ..... CPU clock speed is 1263.5036 MHz.
May 20 18:54:05 virtual kernel: ..... host bus clock speed is 132.9998 MHz.
May 20 18:54:05 virtual kernel: cpu: 0, clocks: 1329998, slice: 443332
May 20 18:54:05 virtual kernel: CPU0<T0:1329984,T1:886640,D:12,S:443332,C:1329998>
May 20 18:54:05 virtual kernel: cpu: 1, clocks: 1329998, slice: 443332
May 20 18:54:05 virtual kernel: CPU1<T0:1329984,T1:443312,D:8,S:443332,C:1329998>
May 20 18:54:05 virtual kernel: checking TSC synchronization across CPUs: passed.
May 20 18:54:05 virtual kernel: PCI: PCI BIOS revision 2.10 entry at 0xfdb65, last bus=2
May 20 18:54:05 virtual kernel: PCI: Using configuration type 1
May 20 18:54:05 virtual kernel: PCI: Probing PCI hardware
May 20 18:54:05 virtual kernel: PCI: Discovered primary peer bus 01 [IRQ]
May 20 18:54:05 virtual kernel: PCI: Discovered primary peer bus 02 [IRQ]
May 20 18:54:05 virtual kernel: PCI: Using IRQ router ServerWorks [1166/0201] at 00:0f.0
May 20 18:54:05 virtual kernel: PCI->APIC IRQ transform: (B0,I3,P0) -> 21
May 20 18:54:05 virtual kernel: PCI->APIC IRQ transform: (B0,I4,P0) -> 20
May 20 18:54:05 virtual kernel: PCI->APIC IRQ transform: (B0,I12,P0) -> 18
May 20 18:54:05 virtual kernel: PCI->APIC IRQ transform: (B0,I15,P0) -> 10
May 20 18:54:05 virtual kernel: PCI->APIC IRQ transform: (B0,I15,P0) -> 10
May 20 18:54:05 virtual kernel: PCI->APIC IRQ transform: (B1,I8,P0) -> 31
May 20 18:54:05 virtual kernel: isapnp: Scanning for PnP cards...
May 20 18:54:05 virtual kernel: isapnp: No Plug & Play device found
May 20 18:54:05 virtual kernel: Linux NET4.0 for Linux 2.4
May 20 18:54:05 virtual kernel: Based upon Swansea University Computer Society NET3.039
May 20 18:54:05 virtual kernel: Initializing RT netlink socket
May 20 18:54:05 virtual kernel: apm: BIOS not found.
May 20 18:54:05 virtual kernel: Starting kswapd
May 20 18:54:05 virtual kernel: allocated 256 pages and 256 bhs reserved for the highmem bounces
May 20 18:54:05 virtual kernel: VFS: Diskquotas version dquot_6.5.0 initialized
May 20 18:54:05 virtual sshd: succeeded
May 20 18:54:05 virtual kernel: pty: 2048 Unix98 ptys configured
May 20 18:54:05 virtual kernel: Serial driver version 5.05c (2001-07-08) with MANY_PORTS MULTIPORT SHARE_IRQ SERIAL_PCI ISAPNP enabled
May 20 18:54:05 virtual sshd: ^[[60G[
May 20 18:54:05 virtual kernel: ttyS00 at 0x03f8 (irq = 4) is a 16550A
May 20 18:54:05 virtual kernel: ttyS01 at 0x02f8 (irq = 3) is a 16550A
May 20 18:54:05 virtual kernel: Real Time Clock Driver v1.10e
May 20 18:54:05 virtual kernel: block: 1024 slots per queue, batch=256
May 20 18:54:05 virtual sshd:
May 20 18:54:05 virtual kernel: Uniform Multi-Platform E-IDE driver Revision: 6.31
May 20 18:54:05 virtual rc: Starting sshd: succeeded
May 20 18:54:05 virtual kernel: ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx
May 20 18:54:05 virtual kernel: SvrWks CSB5: IDE controller on PCI bus 00 dev 79
May 20 18:54:05 virtual kernel: PCI: Device 00:0f.1 not available because of resource collisions
May 20 18:54:05 virtual kernel: SvrWks CSB5: (ide_setup_pci_device:) Could not enable device.
May 20 18:54:05 virtual kernel: hda: SAMSUNG CD-ROM SN-124, ATAPI CD/DVD-ROM drive
May 20 18:54:05 virtual kernel: ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
May 20 18:54:05 virtual kernel: ide-floppy driver 0.99.newide
May 20 18:54:05 virtual kernel: Floppy drive(s): fd0 is 1.44M
May 20 18:54:05 virtual kernel: FDC 0 is a National Semiconductor PC87306
May 20 18:54:05 virtual kernel: RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize
May 20 18:54:05 virtual kernel: ide-floppy driver 0.99.newide
May 20 18:54:05 virtual kernel: md: md driver 0.90.0 MAX_MD_DEVS=256, MD_SB_DISKS=27
May 20 18:54:05 virtual kernel: md: Autodetecting RAID arrays.
May 20 18:54:05 virtual kernel: md: autorun ...
May 20 18:54:05 virtual kernel: md: ... autorun DONE.
May 20 18:54:05 virtual kernel: pci_hotplug: PCI Hot Plug PCI Core version: 0.4
May 20 18:54:05 virtual kernel: NET4: Linux TCP/IP 1.0 for NET4.0
May 20 18:54:05 virtual kernel: IP Protocols: ICMP, UDP, TCP, IGMP
May 20 18:54:05 virtual kernel: IP: routing cache hash table of 65536 buckets, 512Kbytes
May 20 18:54:05 virtual kernel: TCP: Hash tables configured (established 262144 bind 65536)
May 20 18:54:05 virtual kernel: Linux IP multicast router 0.06 plus PIM-SM
May 20 18:54:05 virtual kernel: NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
May 20 18:54:05 virtual kernel: RAMDISK: Compressed image found at block 0
May 20 18:54:05 virtual kernel: Freeing initrd memory: 216k freed
May 20 18:54:05 virtual kernel: VFS: Mounted root (ext2 filesystem).
May 20 18:54:05 virtual kernel: SCSI subsystem driver Revision: 1.00
May 20 18:54:05 virtual kernel: kmod: failed to exec /sbin/modprobe -s -k scsi_hostadapter, errno = 2
May 20 18:54:05 virtual kernel: Configuring GDT-PCI HA at 1/8 IRQ 31
May 20 18:54:05 virtual kernel: scsi0 : SRCU31
May 20 18:54:05 virtual kernel: Vendor: Intel Model: Host Drive #00 Rev:
May 20 18:54:05 virtual kernel: Type: Direct-Access ANSI SCSI revision: 02
May 20 18:54:05 virtual kernel: Vendor: ESG-SHV Model: SCA HSBP M16 Rev: 0.04
May 20 18:54:05 virtual kernel: Type: Processor ANSI SCSI revision: 02
May 20 18:54:05 virtual kernel: Attached scsi disk sda at scsi0, channel 0, id 0, lun 0
May 20 18:54:05 virtual kernel: SCSI device sda: 143219475 512-byte hdwr sectors (73328 MB)
May 20 18:54:05 virtual kernel: Partition check:
May 20 18:54:05 virtual kernel: sda: sda1 sda2 sda3
May 20 18:54:05 virtual kernel: Journalled Block Device driver loaded
May 20 18:54:05 virtual kernel: kjournald starting. Commit interval 5 seconds
May 20 18:54:05 virtual kernel: EXT3-fs: mounted filesystem with ordered data mode.
May 20 18:54:05 virtual kernel: Freeing unused kernel memory: 304k freed
May 20 18:54:05 virtual kernel: Adding Swap: 2096472k swap-space (priority -1)
May 20 18:54:05 virtual kernel: Adding Swap: 2096472k swap-space (priority -2)
May 20 18:54:05 virtual kernel: usb.c: registered new driver usbdevfs
May 20 18:53:45 virtual rc.sysinit: Mounting proc filesystem: succeeded
May 20 18:54:06 virtual kernel: usb.c: registered new driver hub
May 20 18:53:45 virtual rc.sysinit: Unmounting initrd: succeeded
May 20 18:54:06 virtual kernel: usb-ohci.c: USB OHCI at membase 0xf8a89000, IRQ 10
May 20 18:53:45 virtual sysctl: net.ipv4.ip_forward = 0
May 20 18:54:06 virtual kernel: usb-ohci.c: usb-00:0f.2, ServerWorks OSB4/CSB5 OHCI USB Controller
May 20 18:53:45 virtual sysctl: net.ipv4.conf.default.rp_filter = 1
May 20 18:54:06 virtual kernel: usb.c: new USB bus registered, assigned bus number 1
May 20 18:53:45 virtual sysctl: kernel.sysrq = 0
May 20 18:54:06 virtual kernel: hub.c: USB hub found
May 20 18:53:45 virtual sysctl: kernel.core_uses_pid = 1
May 20 18:54:06 virtual kernel: hub.c: 4 ports detected
May 20 18:53:45 virtual rc.sysinit: Configuring kernel parameters: succeeded
May 20 18:54:06 virtual kernel: EXT3 FS 2.4-0.9.17, 10 Jan 2002 on sd(8,1), internal journal
May 20 18:53:45 virtual date: Mon May 20 18:53:40 MDT 2002
May 20 18:54:06 virtual kernel: eepro100.c:v1.09j-t 9/29/99 Donald Becker http://www.scyld.com/network/eepro100.html
May 20 18:53:45 virtual rc.sysinit: Setting clock (localtime): Mon May 20 18:53:40 MDT 2002 succeeded
May 20 18:54:06 virtual kernel: eepro100.c: $Revision: 1.36 $ 2000/11/17 Modified by Andrey V. Savochkin <saw@saw.sw.com.sg> and others
May 20 18:53:45 virtual rc.sysinit: Loading default keymap succeeded
May 20 18:54:06 virtual kernel: eth0: OEM i82557/i82558 10/100 Ethernet, 00:03:47:BD:61:DD, IRQ 21.
May 20 18:53:45 virtual rc.sysinit: Activating swap partitions: succeeded
May 20 18:54:06 virtual kernel: Board assembly fab600-000, Physical connectors present: RJ45
May 20 18:53:45 virtual rc.sysinit: Setting hostname virtual.palb.com: succeeded
May 20 18:53:45 virtual rc.sysinit: Mounting USB filesystem: succeeded
May 20 18:53:45 virtual rc.sysinit: Initializing USB controller (usb-ohci): succeeded
May 20 18:54:06 virtual kernel: Primary interface chip i82555 PHY #1.
May 20 18:53:45 virtual fsck: /: clean, 42896/8437760 files, 1298451/16854185 blocks
May 20 18:54:06 virtual kernel: General self-test: passed.
May 20 18:53:45 virtual rc.sysinit: Checking root filesystem succeeded
May 20 18:54:06 virtual kernel: Serial sub-system self-test: passed.
May 20 18:53:45 virtual rc.sysinit: Remounting root filesystem in read-write mode: succeeded
May 20 18:54:06 virtual kernel: Internal registers self-test: passed.
May 20 18:54:06 virtual kernel: ROM checksum self-test: passed (0xb874c1d3).
May 20 18:53:47 virtual rc.sysinit: Finding module dependencies: succeeded
May 20 18:54:06 virtual kernel: eth1: OEM i82557/i82558 10/100 Ethernet, 00:03:47:BD:61:DF, IRQ 20.
May 20 18:54:06 virtual kernel: Board assembly fab600-000, Physical connectors present: RJ45
May 20 18:53:47 virtual rc.sysinit: Checking filesystems succeeded
May 20 18:54:06 virtual kernel: Primary interface chip i82555 PHY #1.
May 20 18:54:06 virtual kernel: General self-test: passed.
May 20 18:53:47 virtual rc.sysinit: Mounting local filesystems: succeeded
May 20 18:54:06 virtual kernel: Serial sub-system self-test: passed.
May 20 18:54:06 virtual kernel: Internal registers self-test: passed.
May 20 18:53:47 virtual rc.sysinit: Enabling local filesystem quotas: succeeded
May 20 18:54:06 virtual kernel: ROM checksum self-test: passed (0xb874c1d3).
May 20 18:53:47 virtual rc.sysinit: Enabling swap space: succeeded
May 20 18:53:49 virtual init: Entering runlevel: 3
May 20 18:53:49 virtual kudzu: Updating /etc/fstab succeeded
May 20 18:54:00 virtual kudzu: succeeded
May 20 18:54:00 virtual sysctl: net.ipv4.ip_forward = 0
May 20 18:54:00 virtual sysctl: net.ipv4.conf.default.rp_filter = 1
May 20 18:54:00 virtual sysctl: kernel.sysrq = 0
May 20 18:54:00 virtual sysctl: kernel.core_uses_pid = 1
May 20 18:54:00 virtual network: Setting network parameters: succeeded
May 20 18:54:01 virtual network: Bringing up loopback interface: succeeded
May 20 18:54:03 virtual network: Bringing up interface eth0: succeeded
May 20 18:54:06 virtual xinetd[740]: xinetd Version 2002.03.28 started with libwrap options compiled in.
May 20 18:54:06 virtual xinetd[740]: Started working: 0 available services
May 20 18:54:08 virtual xinetd: xinetd startup succeeded
May 20 18:54:09 virtual sendmail: sendmail startup succeeded
May 20 18:54:09 virtual gpm: gpm startup succeeded
May 20 18:54:10 virtual crond: crond startup succeeded
May 20 18:54:10 virtual xfs: xfs startup succeeded
May 20 18:54:10 virtual anacron: anacron startup succeeded
May 20 18:54:10 virtual xfs: listening on port 7100
May 20 18:54:10 virtual atd: atd startup succeeded
May 20 18:54:11 virtual xfs: ignoring font path element /usr/X11R6/lib/X11/fonts/cyrillic (unreadable)
May 20 18:54:11 virtual xfs: ignoring font path element /usr/X11R6/lib/X11/fonts/CID (unreadable)
May 20 18:54:11 virtual xfs: ignoring font path element /usr/X11R6/lib/X11/fonts/local (unreadable)
May 20 18:54:11 virtual xfs: ignoring font path element /usr/X11R6/lib/X11/fonts/latin2/Type1 (unreadable)
May 20 18:54:11 virtual xfs: ignoring font path element /usr/share/fonts/default/TrueType (unreadable)
May 20 18:54:11 virtual xfs: ignoring font path element /usr/share/fonts/default/Type1 (unreadable)
May 20 18:54:11 virtual xfs: ignoring font path element /usr/share/AbiSuite/fonts (unreadable)
May 20 18:55:20 virtual sshd(pam_unix)[904]: session opened for user root by (uid=0)
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2002-05-21 1:14 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2002-04-26 0:57 slab.c comments patch and doc Mel
2002-05-21 1:14 ` gdth driver oops on shutdown Stephen Samuel
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox