From 340ba037cfa81f1baf1780b25f78fd0a5731dd75 Mon Sep 17 00:00:00 2001 From: des Date: Tue, 10 Nov 2009 10:34:44 +0000 Subject: [PATCH] Remove a bunch of code used to detect SMP on ((i386 && !pc98) || amd64) and offer to install an SMP kernel. The way this worked was: on supported platforms, code to read ACPI tables and BIOS MP tables was compiled into sysinstall, and if an SMP kernel config was present in the source tree when sysinstall was built, code that called it was also compiled. Since we haven't had SMP kernel configs in years, the latter was never compiled and the former never ran. This only removes dead and unreachable code; it does *not* remove the NCpus variable, nor the code that sets it to 1, nor the code that asks the user to select a kernel from a list. Discussed with: re@, randi@ and others --- usr.sbin/sysinstall/Makefile | 31 --- usr.sbin/sysinstall/acpi.c | 356 ------------------------------ usr.sbin/sysinstall/acpidump.h | 177 --------------- usr.sbin/sysinstall/biosmptable.c | 275 ----------------------- usr.sbin/sysinstall/dist.c | 8 - usr.sbin/sysinstall/install.c | 15 +- usr.sbin/sysinstall/menus.c | 4 - usr.sbin/sysinstall/sysinstall.8 | 2 - 8 files changed, 1 insertion(+), 867 deletions(-) delete mode 100644 usr.sbin/sysinstall/acpi.c delete mode 100644 usr.sbin/sysinstall/acpidump.h delete mode 100644 usr.sbin/sysinstall/biosmptable.c diff --git a/usr.sbin/sysinstall/Makefile b/usr.sbin/sysinstall/Makefile index 3f2b75848373..db61cae2d06a 100644 --- a/usr.sbin/sysinstall/Makefile +++ b/usr.sbin/sysinstall/Makefile @@ -23,37 +23,6 @@ CFLAGS+= -I${.CURDIR}/../../gnu/lib/libdialog -I. DPADD= ${LIBDIALOG} ${LIBNCURSES} ${LIBUTIL} ${LIBDISK} ${LIBFTPIO} LDADD= -ldialog -lncurses -lutil -ldisk -lftpio -# -# When distributions have both UP and SMP kernels sysinstall -# will probe for the number of cpus on the target machine and -# automatically select which is appropriate. This can be overridden -# through the menus or both kernels can be installed (with the -# most "appropriate" one setup as /boot/kernel). For now this -# is done for i386 and amd64; for other systems support must be -# added to identify the cpu count if acpi and MPTable probing -# is insufficient. -# -# The unmber of cpus probed is passed through the environment in -# VAR_NCPUS ("ncpus") to scripts. -# -# Note that WITH_SMP is a compile time option that enables the -# builtin menus for the SMP kernel configuration. If this kernel -# is not built (see release/Makefile) then this should not be -# enabled as sysinstall may try to select an SMP kernel config -# where none is available. This option should not be needed--we -# should probe for an SMP kernel in the distribution but doing -# that is painful because of media changes and the structure of -# sysinstall so for now it's a priori. -# -.if ${MACHINE} == "i386" || ${MACHINE_ARCH} == "amd64" -SRCS+= acpi.c biosmptable.c -.if exists(${.CURDIR}/../../sys/${MACHINE}/conf/SMP) -CFLAGS+=-DWITH_SMP -.endif -DPADD+= ${LIBDEVINFO} -LDADD+= -ldevinfo -.endif - CLEANFILES= makedevs.c rtermcap CLEANFILES+= keymap.tmp keymap.h countries.tmp countries.h diff --git a/usr.sbin/sysinstall/acpi.c b/usr.sbin/sysinstall/acpi.c deleted file mode 100644 index 4a375a1c0b8c..000000000000 --- a/usr.sbin/sysinstall/acpi.c +++ /dev/null @@ -1,356 +0,0 @@ -/*- - * Copyright (c) 1998 Doug Rabson - * Copyright (c) 2000 Mitsuru IWASAKI - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include -__FBSDID("$FreeBSD$"); - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "acpidump.h" -#include "sysinstall.h" - -static void acpi_handle_apic(struct ACPIsdt *sdp); -static struct ACPIsdt *acpi_map_sdt(vm_offset_t pa); -static void acpi_handle_rsdt(struct ACPIsdt *rsdp); -static struct acpi_user_mapping *acpi_user_find_mapping(vm_offset_t, size_t); -static void * acpi_map_physical(vm_offset_t, size_t); - -/* Size of an address. 32-bit for ACPI 1.0, 64-bit for ACPI 2.0 and up. */ -static int addr_size; - -static int ncpu; - -static void -acpi_handle_apic(struct ACPIsdt *sdp) -{ - struct MADTbody *madtp; - struct MADT_APIC *mp; - struct MADT_local_apic *apic; - struct MADT_local_sapic *sapic; - - madtp = (struct MADTbody *) sdp->body; - mp = (struct MADT_APIC *)madtp->body; - while (((uintptr_t)mp) - ((uintptr_t)sdp) < sdp->len) { - switch (mp->type) { - case ACPI_MADT_APIC_TYPE_LOCAL_APIC: - apic = &mp->body.local_apic; - msgDebug("MADT: Found CPU APIC ID %d %s\n", - apic->cpu_id, - apic->flags & ACPI_MADT_APIC_LOCAL_FLAG_ENABLED ? - "enabled" : "disabled"); - if (apic->flags & ACPI_MADT_APIC_LOCAL_FLAG_ENABLED) - ncpu++; - break; - case ACPI_MADT_APIC_TYPE_LOCAL_SAPIC: - sapic = &mp->body.local_sapic; - msgDebug("MADT: Found CPU SAPIC ID %d %s\n", - sapic->cpu_id, - sapic->flags & ACPI_MADT_APIC_LOCAL_FLAG_ENABLED ? - "enabled" : "disabled"); - /* XXX is enable flag the same? */ - if (sapic->flags & ACPI_MADT_APIC_LOCAL_FLAG_ENABLED) - ncpu++; - break; - default: - break; - } - mp = (struct MADT_APIC *) ((char *)mp + mp->len); - } -} - -static int -acpi_checksum(void *p, size_t length) -{ - u_int8_t *bp; - u_int8_t sum; - - bp = p; - sum = 0; - while (length--) - sum += *bp++; - - return (sum); -} - -static struct ACPIsdt * -acpi_map_sdt(vm_offset_t pa) -{ - struct ACPIsdt *sp; - - sp = acpi_map_physical(pa, sizeof(struct ACPIsdt)); - if (sp != NULL) - sp = acpi_map_physical(pa, sp->len); - return (sp); -} - -static void -acpi_handle_rsdt(struct ACPIsdt *rsdp) -{ - struct ACPIsdt *sdp; - vm_offset_t addr; - int entries, i; - - entries = (rsdp->len - SIZEOF_SDT_HDR) / addr_size; - for (i = 0; i < entries; i++) { - switch (addr_size) { - case 4: - addr = le32dec((char*)rsdp->body + i * addr_size); - break; - case 8: - addr = le64dec((char*)rsdp->body + i * addr_size); - break; - default: - assert((addr = 0)); - } - - sdp = (struct ACPIsdt *)acpi_map_sdt(addr); - if (sdp == NULL) { - msgDebug("%s: unable to map sdt\n", __func__); - continue; - } - if (acpi_checksum(sdp, sdp->len)) { -#if 0 - msgDebug("RSDT entry %d (sig %.4s) has bad checksum\n", - i, sdp->signature); -#endif - continue; - } - if (!memcmp(sdp->signature, "APIC", 4)) - acpi_handle_apic(sdp); - } -} - -static char machdep_acpi_root[] = "machdep.acpi_root"; -static int acpi_mem_fd = -1; - -struct acpi_user_mapping { - LIST_ENTRY(acpi_user_mapping) link; - vm_offset_t pa; - caddr_t va; - size_t size; -}; - -LIST_HEAD(acpi_user_mapping_list, acpi_user_mapping) maplist; - -static int -acpi_user_init(void) -{ - - if (acpi_mem_fd == -1) { - acpi_mem_fd = open(_PATH_MEM, O_RDONLY); - if (acpi_mem_fd == -1) { - msgDebug("%s: error opening %s: %s\n", __func__, - _PATH_MEM, strerror(errno)); - return 0; - } - LIST_INIT(&maplist); - } - return 1; -} - -static struct acpi_user_mapping * -acpi_user_find_mapping(vm_offset_t pa, size_t size) -{ - struct acpi_user_mapping *map; - - /* First search for an existing mapping */ - for (map = LIST_FIRST(&maplist); map; map = LIST_NEXT(map, link)) { - if (map->pa <= pa && map->size >= pa + size - map->pa) - return (map); - } - - /* Then create a new one */ - size = round_page(pa + size) - trunc_page(pa); - pa = trunc_page(pa); - map = malloc(sizeof(struct acpi_user_mapping)); - if (!map) { - msgDebug("%s: out of memory: %s\n", __func__, strerror(errno)); - return (map); - } - map->pa = pa; - map->va = mmap(0, size, PROT_READ, MAP_SHARED, acpi_mem_fd, pa); - map->size = size; - if ((intptr_t) map->va == -1) { - msgDebug("%s: can't mmap address %lu size %lu: %s\n", __func__, - (unsigned long) pa, (unsigned long) size, strerror(errno)); - free(map); - return (NULL); - } - LIST_INSERT_HEAD(&maplist, map, link); - - return (map); -} - -static void * -acpi_map_physical(vm_offset_t pa, size_t size) -{ - struct acpi_user_mapping *map; - - map = acpi_user_find_mapping(pa, size); - return (map == NULL ? NULL : map->va + (pa - map->pa)); -} - -static struct ACPIrsdp * -acpi_get_rsdp(u_long addr) -{ - struct ACPIrsdp rsdp; - size_t len; - - /* Read in the table signature and check it. */ - pread(acpi_mem_fd, &rsdp, 8, addr); - if (memcmp(rsdp.signature, "RSD PTR ", 8)) - return (NULL); - - /* Read the entire table. */ - pread(acpi_mem_fd, &rsdp, sizeof(rsdp), addr); - - /* Run the checksum only over the version 1 header. */ - if (acpi_checksum(&rsdp, 20)) - return (NULL); - - /* If the revision is 0, assume a version 1 length. */ - if (rsdp.revision == 0) - len = 20; - else - len = rsdp.length; - - /* XXX Should handle ACPI 2.0 RSDP extended checksum here. */ - - return (acpi_map_physical(addr, len)); -} - -static const char * -devstate(devinfo_state_t state) -{ - switch (state) { - case DIS_NOTPRESENT: - return "not-present"; - case DIS_ALIVE: - return "alive"; - case DIS_ATTACHED: - return "attached"; - case DIS_BUSY: - return "busy"; - default: - return "unknown-state"; - } -} - -static int -acpi0_check(struct devinfo_dev *dd, void *arg) -{ - printf("%s: %s %s\n", __func__, dd->dd_name, devstate(dd->dd_state)); - /* NB: device must be present AND attached */ - if (strcmp(dd->dd_name, "acpi0") == 0) - return (dd->dd_state == DIS_ATTACHED || - dd->dd_state == DIS_BUSY); - return devinfo_foreach_device_child(dd, acpi0_check, arg); -} - -static int -acpi0_present(void) -{ - struct devinfo_dev *root; - int found; - - found = 0; - devinfo_init(); - root = devinfo_handle_to_device(DEVINFO_ROOT_DEVICE); - if (root != NULL) - found = devinfo_foreach_device_child(root, acpi0_check, NULL); - devinfo_free(); - return found; -} - -int -acpi_detect(void) -{ - struct ACPIrsdp *rp; - struct ACPIsdt *rsdp; - u_long addr; - size_t len; - - if (!acpi0_present()) { - msgDebug("%s: no acpi0 device located\n", __func__); - return -1; - } - - if (!acpi_user_init()) - return -1; - - /* Attempt to use sysctl to find RSD PTR record. */ - len = sizeof(addr); - if (sysctlbyname(machdep_acpi_root, &addr, &len, NULL, 0) != 0) { - msgDebug("%s: cannot find ACPI information\n", __func__); - return -1; - } - rp = acpi_get_rsdp(addr); - if (rp == NULL) { - msgDebug("%s: cannot find ACPI information: " - "sysctl %s does not point to RSDP\n", __func__, - machdep_acpi_root); - return -1; - } - if (rp->revision < 2) { - rsdp = (struct ACPIsdt *)acpi_map_sdt(rp->rsdt_addr); - if (rsdp == NULL) - return -1; - if (memcmp(rsdp->signature, "RSDT", 4) != 0 || - acpi_checksum(rsdp, rsdp->len) != 0) { - msgDebug("%s: RSDT is corrupted\n", __func__); - return -1; - } - addr_size = sizeof(uint32_t); - } else { - rsdp = (struct ACPIsdt *)acpi_map_sdt(rp->xsdt_addr); - if (rsdp == NULL) - return -1; - if (memcmp(rsdp->signature, "XSDT", 4) != 0 || - acpi_checksum(rsdp, rsdp->len) != 0) { - msgDebug("%s: XSDT is corrupted\n", __func__); - return -1; - } - addr_size = sizeof(uint64_t); - } - ncpu = 0; - acpi_handle_rsdt(rsdp); - return (ncpu == 0 ? 1 : ncpu); -} diff --git a/usr.sbin/sysinstall/acpidump.h b/usr.sbin/sysinstall/acpidump.h deleted file mode 100644 index 9c2b5b6e502d..000000000000 --- a/usr.sbin/sysinstall/acpidump.h +++ /dev/null @@ -1,177 +0,0 @@ -/*- - * Copyright (c) 1999 Doug Rabson - * Copyright (c) 2000 Mitsuru IWASAKI - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#ifndef _ACPIDUMP_H_ -#define _ACPIDUMP_H_ - -/* Root System Description Pointer */ -struct ACPIrsdp { - u_char signature[8]; - u_char sum; - u_char oem[6]; - u_char revision; - u_int32_t rsdt_addr; - u_int32_t length; - u_int64_t xsdt_addr; - u_char xsum; - u_char _reserved_[3]; -} __packed; - -/* System Description Table */ -struct ACPIsdt { - u_char signature[4]; - u_int32_t len; - u_char rev; - u_char check; - u_char oemid[6]; - u_char oemtblid[8]; - u_int32_t oemrev; - u_char creator[4]; - u_int32_t crerev; -#define SIZEOF_SDT_HDR 36 /* struct size except body */ - u_int32_t body[1];/* This member should be casted */ -} __packed; - -struct MADT_local_apic { - u_char cpu_id; - u_char apic_id; - u_int32_t flags; -#define ACPI_MADT_APIC_LOCAL_FLAG_ENABLED 1 -} __packed; - -struct MADT_io_apic { - u_char apic_id; - u_char reserved; - u_int32_t apic_addr; - u_int32_t int_base; -} __packed; - -struct MADT_int_override { - u_char bus; - u_char source; - u_int32_t intr; - u_int16_t mps_flags; -#define MPS_INT_FLAG_POLARITY_MASK 0x3 -#define MPS_INT_FLAG_POLARITY_CONFORM 0x0 -#define MPS_INT_FLAG_POLARITY_HIGH 0x1 -#define MPS_INT_FLAG_POLARITY_LOW 0x3 -#define MPS_INT_FLAG_TRIGGER_MASK 0xc -#define MPS_INT_FLAG_TRIGGER_CONFORM 0x0 -#define MPS_INT_FLAG_TRIGGER_EDGE 0x4 -#define MPS_INT_FLAG_TRIGGER_LEVEL 0xc -} __packed; - -struct MADT_nmi { - u_int16_t mps_flags; - u_int32_t intr; -} __packed; - -struct MADT_local_nmi { - u_char cpu_id; - u_int16_t mps_flags; - u_char lintpin; -} __packed; - -struct MADT_local_apic_override { - u_char reserved[2]; - u_int64_t apic_addr; -} __packed; - -struct MADT_io_sapic { - u_char apic_id; - u_char reserved; - u_int32_t int_base; - u_int64_t apic_addr; -} __packed; - -struct MADT_local_sapic { - u_char cpu_id; - u_char apic_id; - u_char apic_eid; - u_char reserved[3]; - u_int32_t flags; -} __packed; - -struct MADT_int_src { - u_int16_t mps_flags; - u_char type; -#define ACPI_MADT_APIC_INT_SOURCE_PMI 1 -#define ACPI_MADT_APIC_INT_SOURCE_INIT 2 -#define ACPI_MADT_APIC_INT_SOURCE_CPEI 3 /* Corrected Platform Error */ - u_char cpu_id; - u_char cpu_eid; - u_char sapic_vector; - u_int32_t intr; - u_char reserved[4]; -} __packed; - -struct MADT_APIC { - u_char type; -#define ACPI_MADT_APIC_TYPE_LOCAL_APIC 0 -#define ACPI_MADT_APIC_TYPE_IO_APIC 1 -#define ACPI_MADT_APIC_TYPE_INT_OVERRIDE 2 -#define ACPI_MADT_APIC_TYPE_NMI 3 -#define ACPI_MADT_APIC_TYPE_LOCAL_NMI 4 -#define ACPI_MADT_APIC_TYPE_LOCAL_OVERRIDE 5 -#define ACPI_MADT_APIC_TYPE_IO_SAPIC 6 -#define ACPI_MADT_APIC_TYPE_LOCAL_SAPIC 7 -#define ACPI_MADT_APIC_TYPE_INT_SRC 8 - u_char len; - union { - struct MADT_local_apic local_apic; - struct MADT_io_apic io_apic; - struct MADT_int_override int_override; - struct MADT_nmi nmi; - struct MADT_local_nmi local_nmi; - struct MADT_local_apic_override local_apic_override; - struct MADT_io_sapic io_sapic; - struct MADT_local_sapic local_sapic; - struct MADT_int_src int_src; - } body; -} __packed; - -struct MADTbody { - u_int32_t lapic_addr; - u_int32_t flags; -#define ACPI_APIC_FLAG_PCAT_COMPAT 1 /* System has dual-8259 setup. */ - u_char body[1]; -} __packed; - -/* - * Addresses to scan on ia32 for the RSD PTR. According to section 5.2.2 - * of the ACPI spec, we only consider two regions for the base address: - * 1. EBDA (1 KB area addressed to by 16 bit pointer at 0x40E) - * 2. High memory (0xE0000 - 0xFFFFF) - */ -#define RSDP_EBDA_PTR 0x40E -#define RSDP_EBDA_SIZE 0x400 -#define RSDP_HI_START 0xE0000 -#define RSDP_HI_SIZE 0x20000 - -#endif /* !_ACPIDUMP_H_ */ diff --git a/usr.sbin/sysinstall/biosmptable.c b/usr.sbin/sysinstall/biosmptable.c deleted file mode 100644 index 5a507bd6bfdd..000000000000 --- a/usr.sbin/sysinstall/biosmptable.c +++ /dev/null @@ -1,275 +0,0 @@ -/*- - * Copyright (c) 2005 Sandvine Incorporated. All righs reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * Author: Ed Maste - */ - -/* - * This module detects Intel Multiprocessor spec info (mptable) and returns - * the number of cpu's identified. - */ - -#include -__FBSDID("$FreeBSD$"); - -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include "sysinstall.h" - -#define MPFPS_SIG "_MP_" -#define MPCTH_SIG "PCMP" - -#define PTOV(pa) ((off_t)(pa)) - -static mpfps_t biosmptable_find_mpfps(void); -static mpfps_t biosmptable_search_mpfps(off_t base, int length); -static mpcth_t biosmptable_check_mpcth(off_t addr); - -static int memopen(void); -static void memclose(void); - -int -biosmptable_detect(void) -{ - mpfps_t mpfps; - mpcth_t mpcth; - char *entry_type_p; - proc_entry_ptr proc; - int ncpu, i; - - if (!memopen()) - return -1; /* XXX 0? */ - /* locate and validate the mpfps */ - mpfps = biosmptable_find_mpfps(); - mpcth = NULL; - if (mpfps == NULL) { - ncpu = 0; - } else if (mpfps->config_type != 0) { - /* - * If thie config_type is nonzero then this is a default configuration - * from Chapter 5 in the MP spec. Report 2 cpus and 1 I/O APIC. - */ - ncpu = 2; - } else { - ncpu = 0; - mpcth = biosmptable_check_mpcth(PTOV(mpfps->pap)); - if (mpcth != NULL) { - entry_type_p = (char *)(mpcth + 1); - for (i = 0; i < mpcth->entry_count; i++) { - switch (*entry_type_p) { - case 0: - entry_type_p += sizeof(struct PROCENTRY); - proc = (proc_entry_ptr) entry_type_p; - msgDebug("MPTable: Found CPU APIC ID %d %s\n", - proc->apic_id, - proc->cpu_flags & PROCENTRY_FLAG_EN ? - "enabled" : "disabled"); - if (proc->cpu_flags & PROCENTRY_FLAG_EN) - ncpu++; - break; - case 1: - entry_type_p += sizeof(struct BUSENTRY); - break; - case 2: - entry_type_p += sizeof(struct IOAPICENTRY); - break; - case 3: - case 4: - entry_type_p += sizeof(struct INTENTRY); - break; - default: - msgDebug("%s: unknown mptable entry type (%d)\n", - __func__, *entry_type_p); - goto done; /* XXX error return? */ - } - } - done: - ; - } - } - memclose(); - if (mpcth != NULL) - free(mpcth); - if (mpfps != NULL) - free(mpfps); - - return ncpu; -} - -static int pfd = -1; - -static int -memopen(void) -{ - if (pfd < 0) { - pfd = open(_PATH_MEM, O_RDONLY); - if (pfd < 0) - warn("%s: cannot open", _PATH_MEM); - } - return pfd >= 0; -} - -static void -memclose(void) -{ - if (pfd >= 0) { - close(pfd); - pfd = -1; - } -} - -static int -memread(off_t addr, void* entry, size_t size) -{ - if ((size_t)pread(pfd, entry, size, addr) != size) { - warn("pread (%zu @ 0x%llx)", size, addr); - return 0; - } - return 1; -} - - -/* - * Find the MP Floating Pointer Structure. See the MP spec section 4.1. - */ -static mpfps_t -biosmptable_find_mpfps(void) -{ - mpfps_t mpfps; - uint16_t addr; - - /* EBDA is the 1 KB addressed by the 16 bit pointer at 0x40E. */ - if (!memread(PTOV(0x40E), &addr, sizeof(addr))) - return (NULL); - mpfps = biosmptable_search_mpfps(PTOV(addr << 4), 0x400); - if (mpfps != NULL) - return (mpfps); - - /* Check the BIOS. */ - mpfps = biosmptable_search_mpfps(PTOV(0xf0000), 0x10000); - if (mpfps != NULL) - return (mpfps); - - return (NULL); -} - -static mpfps_t -biosmptable_search_mpfps(off_t base, int length) -{ - mpfps_t mpfps; - u_int8_t *cp, sum; - int ofs, idx; - - mpfps = malloc(sizeof(*mpfps)); - if (mpfps == NULL) { - msgDebug("%s: unable to malloc space for " - "MP Floating Pointer Structure\n", __func__); - return (NULL); - } - /* search on 16-byte boundaries */ - for (ofs = 0; ofs < length; ofs += 16) { - if (!memread(base + ofs, mpfps, sizeof(*mpfps))) - break; - - /* compare signature, validate checksum */ - if (!strncmp(mpfps->signature, MPFPS_SIG, strlen(MPFPS_SIG))) { - cp = (u_int8_t *)mpfps; - sum = 0; - /* mpfps is 16 bytes, or one "paragraph" */ - if (mpfps->length != 1) { - msgDebug("%s: bad mpfps length (%d)\n", - __func__, mpfps->length); - continue; - } - for (idx = 0; idx < mpfps->length * 16; idx++) - sum += *(cp + idx); - if (sum != 0) { - msgDebug("%s: bad mpfps checksum (%d)\n", __func__, sum); - continue; - } - return (mpfps); - } - } - free(mpfps); - return (NULL); -} - -static mpcth_t -biosmptable_check_mpcth(off_t addr) -{ - mpcth_t mpcth; - u_int8_t *cp, sum; - int idx, table_length; - - /* mpcth must be in the first 1MB */ - if ((u_int32_t)addr >= 1024 * 1024) { - msgDebug("%s: bad mpcth address (0x%llx)\n", __func__, addr); - return (NULL); - } - - mpcth = malloc(sizeof(*mpcth)); - if (mpcth == NULL) { - msgDebug("%s: unable to malloc space for " - "MP Configuration Table Header\n", __func__); - return (NULL); - } - if (!memread(addr, mpcth, sizeof(*mpcth))) - goto bad; - /* Compare signature and validate checksum. */ - if (strncmp(mpcth->signature, MPCTH_SIG, strlen(MPCTH_SIG)) != 0) { - msgDebug("%s: bad mpcth signature\n", __func__); - goto bad; - } - table_length = mpcth->base_table_length; - mpcth = realloc(mpcth, table_length); - if (mpcth == NULL) { - msgDebug("%s: unable to realloc space for mpcth (len %u)\n", - __func__, table_length); - return (NULL); - } - if (!memread(addr, mpcth, table_length)) - goto bad; - cp = (u_int8_t *)mpcth; - sum = 0; - for (idx = 0; idx < mpcth->base_table_length; idx++) - sum += *(cp + idx); - if (sum != 0) { - msgDebug("%s: bad mpcth checksum (%d)\n", __func__, sum); - goto bad; - } - - return mpcth; -bad: - free(mpcth); - return (NULL); -} diff --git a/usr.sbin/sysinstall/dist.c b/usr.sbin/sysinstall/dist.c index 3c84a1d2ed64..5c9fe1cb316e 100644 --- a/usr.sbin/sysinstall/dist.c +++ b/usr.sbin/sysinstall/dist.c @@ -99,9 +99,6 @@ static Distribution DistTable[] = { /* The kernel distributions */ static Distribution KernelDistTable[] = { DTE_TARBALL("GENERIC", &KernelDists, KERNEL_GENERIC, "/boot"), -#ifdef WITH_SMP - DTE_TARBALL("SMP", &KernelDists, KERNEL_SMP, "/boot"), -#endif DTE_END, }; @@ -207,12 +204,7 @@ distConfig(dialogMenuItem *self) int selectKernel(void) { -#ifdef WITH_SMP - /* select default kernel based on deduced cpu count */ - return NCpus > 1 ? DIST_KERNEL_SMP : DIST_KERNEL_GENERIC; -#else return DIST_KERNEL_GENERIC; -#endif } int diff --git a/usr.sbin/sysinstall/install.c b/usr.sbin/sysinstall/install.c index a2979c900b05..ac2280311f75 100644 --- a/usr.sbin/sysinstall/install.c +++ b/usr.sbin/sysinstall/install.c @@ -938,20 +938,12 @@ installFixupKernel(dialogMenuItem *self, int dists) /* All of this is done only as init, just to be safe */ if (RunningAsInit) { /* - * Install something as /boot/kernel. Prefer SMP - * over GENERIC--this should handle the case where - * both SMP and GENERIC are installed (otherwise we - * select the one kernel that was installed). + * Install something as /boot/kernel. * * NB: we assume any existing kernel has been saved * already and the /boot/kernel we remove is empty. */ vsystem("rm -rf /boot/kernel"); -#if WITH_SMP - if (dists & DIST_KERNEL_SMP) - vsystem("mv /boot/SMP /boot/kernel"); - else -#endif vsystem("mv /boot/GENERIC /boot/kernel"); } return DITEM_SUCCESS | DITEM_RESTORE; @@ -1255,11 +1247,6 @@ installVarDefaults(dialogMenuItem *self) variable_set2(SYSTEM_STATE, "init", 0); variable_set2(VAR_NEWFS_ARGS, "-b 16384 -f 2048", 0); variable_set2(VAR_CONSTERM, "NO", 0); -#if (defined(__i386__) && !defined(PC98)) || defined(__amd64__) - NCpus = acpi_detect(); - if (NCpus == -1) - NCpus = biosmptable_detect(); -#endif if (NCpus <= 0) NCpus = 1; snprintf(ncpus, sizeof(ncpus), "%u", NCpus); diff --git a/usr.sbin/sysinstall/menus.c b/usr.sbin/sysinstall/menus.c index 8ea7f9876e32..decb4fd0b871 100644 --- a/usr.sbin/sysinstall/menus.c +++ b/usr.sbin/sysinstall/menus.c @@ -1031,10 +1031,6 @@ DMenu MenuKernelDistributions = { NULL, clearKernel, NULL, NULL, ' ', ' ', ' ' }, { " GENERIC", "GENERIC kernel configuration", dmenuFlagCheck, dmenuSetFlag, NULL, &KernelDists, '[', 'X', ']', DIST_KERNEL_GENERIC }, -#ifdef WITH_SMP - { " SMP", "GENERIC symmetric multiprocessor kernel configuration", - dmenuFlagCheck, dmenuSetFlag, NULL, &KernelDists, '[', 'X', ']', DIST_KERNEL_SMP }, -#endif { NULL } }, }; diff --git a/usr.sbin/sysinstall/sysinstall.8 b/usr.sbin/sysinstall/sysinstall.8 index 46a14fc8d9c5..cdaec6dcc218 100644 --- a/usr.sbin/sysinstall/sysinstall.8 +++ b/usr.sbin/sysinstall/sysinstall.8 @@ -413,8 +413,6 @@ Possible distribution values are: The base binary distribution. .It Li GENERIC The GENERIC kernel. -.It Li SMP -A kernel suitable for multiple processor systems. .It Li doc Miscellaneous documentation .It Li games