IIRC, APIC is the part of the chipset that controls SMP.  Can you run in
SMP mode if you use noapic?

On Mon, 6 Mar 2000, John Aldrich wrote:

> On Mon, 06 Mar 2000, you wrote:
> 
> > Whats the patch? How do you do the noapic at lilo? What the hell is APIC?
> > 
> Ok. Here's the patch. It's for kernel  2.3.45. You need to
> install THAT kernel, and then patch it with the attached
> patch (my apologies to the list for sending a binary...)
> 
> I'm not sure WHAT APIC is, but to use it at LILO, just type
> "<boot image name> noapic", i.e. "linux noapic" and hit
> enter.
>       John
--- linux/include/asm-i386/pgtable.h.orig3	Mon Feb 14 09:59:19 2000
+++ linux/include/asm-i386/pgtable.h	Mon Feb 14 09:59:22 2000
@@ -130,7 +130,8 @@
  * area for the same reason. ;)
  */
 #define VMALLOC_OFFSET	(8*1024*1024)
-#define VMALLOC_START	(((unsigned long) high_memory + VMALLOC_OFFSET) & ~(VMALLOC_OFFSET-1))
+#define VMALLOC_START	(((unsigned long) high_memory + 2*VMALLOC_OFFSET-1) & \
+						~(VMALLOC_OFFSET-1))
 #define VMALLOC_VMADDR(x) ((unsigned long)(x))
 #define VMALLOC_END	(FIXADDR_START)
 
--- linux/arch/i386/mm/init.c.orig3	Mon Feb 14 09:46:02 2000
+++ linux/arch/i386/mm/init.c	Mon Feb 14 09:56:57 2000
@@ -307,27 +307,30 @@
 	pmd_t *pmd;
 	pte_t *pte;
 	int i, j, k;
-	unsigned long vaddr;
-	unsigned long end = (unsigned long)__va(max_low_pfn*PAGE_SIZE);
+	unsigned long vaddr, end;
 
-	pgd_base = swapper_pg_dir;
+	end = (unsigned long)__va(max_low_pfn*PAGE_SIZE) - 1;
 
-	vaddr = PAGE_OFFSET;
-	i = __pgd_offset(vaddr);
+	i = __pgd_offset(PAGE_OFFSET);
+	pgd_base = swapper_pg_dir;
 	pgd = pgd_base + i;
 
-	for (; (i < PTRS_PER_PGD) && (vaddr <= end); pgd++, i++) {
+	for (; i < PTRS_PER_PGD; pgd++, i++) {
 		vaddr = i*PGDIR_SIZE;
+		if (vaddr >= end)
+			break;
 #if CONFIG_X86_PAE
-		pmd = (pmd_t *) alloc_bootmem_low_pages(PAGE_SIZE);
+		pmd = (pmd_t *) alloc_bootmem_pages(PAGE_SIZE);
 		set_pgd(pgd, __pgd(__pa(pmd) + 0x1));
 #else
 		pmd = (pmd_t *)pgd;
 #endif
 		if (pmd != pmd_offset(pgd, 0))
 			BUG();
-		for (j = 0; (j < PTRS_PER_PMD) && (vaddr <= end); pmd++, j++) {
+		for (j = 0; j < PTRS_PER_PMD; pmd++, j++) {
 			vaddr = i*PGDIR_SIZE + j*PMD_SIZE;
+			if (vaddr >= end)
+				break;
 			if (cpu_has_pse) {
 				unsigned long __pe;
 
@@ -349,10 +352,10 @@
 			if (pte != pte_offset(pmd, 0))
 				BUG();
 
-			for (k = 0;
-				(k < PTRS_PER_PTE) && (vaddr <= end);
-					pte++, k++) {
+			for (k = 0; k < PTRS_PER_PTE; pte++, k++) {
 				vaddr = i*PGDIR_SIZE + j*PMD_SIZE + k*PAGE_SIZE;
+				if (vaddr >= end)
+					break;
 				*pte = mk_pte_phys(__pa(vaddr), PAGE_KERNEL);
 			}
 		}
--- linux/arch/i386/kernel/io_apic.c.orig3	Mon Feb 14 09:34:59 2000
+++ linux/arch/i386/kernel/io_apic.c	Mon Feb 14 09:35:02 2000
@@ -1406,7 +1406,6 @@
 {
 	if (!smp_found_config)
 		return;
-	phys_cpu_present_map = 0xff;
 	setup_local_APIC();
 	setup_IO_APIC();
 	setup_APIC_clocks();

Reply via email to