Changeset 312 for trunk/hal/x86_64/core


Ignore:
Timestamp:
Aug 2, 2017, 2:36:58 PM (7 years ago)
Author:
max@…
Message:

Add a --no-smp option.

Location:
trunk/hal/x86_64/core
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/hal/x86_64/core/hal_boot.S

    r243 r312  
    2292291:
    230230
     231        testl   $MULTIBOOT_INFO_HAS_CMDLINE,MB_MI_FLAGS(%ebx)
     232        jz      1f
     233        movl    MB_MI_CMDLINE(%ebx),%esi        /* src */
     234        movl    $RELOC(mb_cmdline),%edi         /* dst */
     235        movl    $PAGE_SIZE,%ecx /* len */
     236
     237        rep
     238        movsb   /* copy esi -> edi */
     2391:
     240
    231241/*
    232242 * There are four levels of pages in amd64: PML4 -> PDP -> PD -> PT. They will
  • trunk/hal/x86_64/core/hal_init.c

    r310 r312  
    5858char mb_loader_name[PAGE_SIZE] __in_kdata;
    5959uint8_t mb_mmap[PAGE_SIZE] __in_kdata;
    60 
     60char mb_cmdline[PAGE_SIZE] __in_kdata;
     61
     62bool_t has_smp __in_kdata = true;
    6163size_t ncpu __in_kdata = 0;
    6264static boot_info_t btinfo __in_kdata;
     
    8082/* -------------------------------------------------------------------------- */
    8183
     84/* XXX XXX XXX libk */
     85char *
     86strstr(char *s, const char *find)
     87{
     88        char c, sc;
     89        size_t len;
     90
     91        if ((c = *find++) != 0) {
     92                len = strlen(find);
     93                do {
     94                        do {
     95                                if ((sc = *s++) == 0)
     96                                        return (NULL);
     97                        } while (sc != c);
     98                } while (strncmp(s, find, len) != 0);
     99                s--;
     100        }
     101        return s;
     102}
     103
    82104static void
    83105dump_memmap()
     
    101123
    102124                i += mm->mm_size + 4;
     125        }
     126
     127        if (mb_info.mi_flags & MULTIBOOT_INFO_HAS_CMDLINE) {
     128                mb_cmdline[PAGE_SIZE-1] = '\0';
     129                if (strstr(mb_cmdline, "--no-smp")) {
     130                        has_smp = false;
     131                        x86_printf("[+] SMP disabled\n");
     132                }
    103133        }
    104134}
     
    162192}
    163193
    164 static void init_bootinfo_core(boot_core_t *core)
     194static void init_bootinfo_core(boot_core_t *core, size_t n)
    165195{
    166196        size_t i;
    167197
    168198        // XXX: not necessarily contiguous
    169         for (i = 0; i < ncpu; i++) {
     199        for (i = 0; i < n; i++) {
    170200                memset(&core[i], 0, sizeof(boot_core_t));
    171201
     
    240270
    241271        info->cxy = 0;
    242         info->cores_nr = ncpu;
    243         init_bootinfo_core((boot_core_t *)&info->core);
     272        if (has_smp) {
     273                info->cores_nr = ncpu;
     274        } else {
     275                info->cores_nr = 1;
     276        }
     277        init_bootinfo_core((boot_core_t *)&info->core, info->cores_nr);
    244278
    245279        info->rsvd_nr = init_bootinfo_rsvd((boot_rsvd_t *)&info->rsvd);
     
    396430        init_bootinfo(&btinfo);
    397431
    398         start_secondary_cpus();
     432        if (has_smp) {
     433                start_secondary_cpus();
     434        }
    399435
    400436        kernel_init(&btinfo);
  • trunk/hal/x86_64/core/hal_multiboot.h

    r234 r312  
    7171/* Offsets into the structure */
    7272#define MB_MI_FLAGS             0
     73#define MB_MI_CMDLINE           16
    7374#define MB_MI_MMAP_LENGTH       44
    7475#define MB_MI_MMAP_ADDR         48
Note: See TracChangeset for help on using the changeset viewer.