Yes, I saw this.

When I test It in Linux, I used a dual core computer. But the snippet
returns "8" number.

Now I know the reason ;)

2018-06-15 19:25 GMT+02:00 Richard Braun <rbr...@sceen.net>:

> On Fri, Jun 15, 2018 at 07:18:55PM +0200, Richard Braun wrote:
> > On Fri, Jun 15, 2018 at 06:27:21PM +0200, Almudena Garcia wrote:
> > > 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?
>
> Also note here that you're confusing the APIC ID, a device identifier at
> the hardware level, with the CPU ID, a processor identifier at the kernel
> level. On some machines, the APIC ID may be higher than or equal to the
> maximum number of processor installed.
>
> --
> Richard Braun
>

Reply via email to