bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Enable SMP support


From: Almudena Garcia
Subject: Re: Enable SMP support
Date: Fri, 15 Jun 2018 18:27:21 +0200

I'm trying to define the cpu_number() in multiprocessor.

To do this, I tried to use CPUID assembly x86 instruction, to get the CPU SMP number.
The function, in C, is this:

static inline char smp_processor_id(void) {
  char apic_id = 0;
  asm("mov $1, %%eax\n\t"
  "cpuid\n\t"
  "mov %%bh, %0\n\t" : "=g" (apic_id));
  return apic_id;
}

In Linux, after executing this in a test source, It returns '8'

But, when I try to execute It in Hurd, It shows a segmentation fault.

I attach the test source file


Can you help me?


2018-06-15 1:52 GMT+02:00 Almudena Garcia <liberamenso10000@gmail.com>:
Ok. I understand you. But then... how can I to define cpu_number() function in multiprocessor? It isn't clear

2018-06-15 1:30 GMT+02:00 Amos Jeffries <squid3@treenet.co.nz>:
On 15/06/18 10:31, Almudena Garcia wrote:
> Yes, I concluded the same a few hours ago. I tried to edit
> kern/cpu_number.h, to add a new definition with many cores, at this form
>
> int     master_cpu;     /* 'master' processor - keeps time */
>
> #if     (NCPUS == 1)
>         /* cpu number is always 0 on a single processor system */
> #define cpu_number()    (0)
>
> #define CPU_L1_SIZE (1 << CPU_L1_SHIFT)
>
> #else
> #define cpu_number() (NCPUS)
>

I may be wrong, but that does not seem correct.

The man page for cpu_number() state it to be "an unique CPU
identification number for the CPU that this thread is running on". So it
clearly can change at runtime if there are 2+ CPUs on the machine.

Whereas NCPUS is being used by the precompiler as an integer with fixed
value that can be known at pre-compile time. Implied by the "#if NCPUS >
1" statement which this version of the code omits.


AYJ



Attachment: smp.c
Description: Text Data


reply via email to

[Prev in Thread] Current Thread [Next in Thread]