On 26/11/2010, at 9:04 AM, Kenneth R Westerback wrote:

> On Thu, Nov 25, 2010 at 02:13:35PM +0100, Mark Kettenis wrote:
>>> From: David Gwynne <l...@animata.net>
>>> 
>>> without this diff this box panics on boot while attaching the 36th
>>> cpu. its a buffer overrun...
>>> 
>>> analysis done by kettenis.
>>> 
>>> ok?
>> 
>> I think the check should involve MAXCPUS.  Your diff makes clear
>> though that simply bumping MAXCPUS to 64 isn't going to fly.  At the
>> very least cpus_attached needs to be changed into a 64-bit integer.
>> 
>>> Index: cpu.c
>>> ===================================================================
>>> RCS file: /cvs/src/sys/arch/amd64/amd64/cpu.c,v
>>> retrieving revision 1.38
>>> diff -u -p -r1.38 cpu.c
>>> --- cpu.c   13 Nov 2010 04:16:42 -0000      1.38
>>> +++ cpu.c   24 Nov 2010 13:04:30 -0000
>>> @@ -168,6 +168,9 @@ cpu_match(struct device *parent, void *m
>>>     struct cfdata *cf = match;
>>>     struct cpu_attach_args *caa = aux;
>>> 
>>> +   if (~cpus_attached == 0)
>>> +           return 0;
>>> +
>>>     if (strcmp(caa->caa_name, cf->cf_driver->cd_name) == 0)
>>>             return 1;
>>>     return 0;
>> 
> 
> Hmmm. I can't actually find any *use* of cpus_attached. Is it a relic?
> 
> The diff below compiles and runs fine on my 6-proc amd64 box.

make sense to me. ok (for what my ok counts for in this area).

dlg

> 
> .... Ken
> 
> Index: amd64/cpu.c
> ===================================================================
> RCS file: /cvs/src/sys/arch/amd64/amd64/cpu.c,v
> retrieving revision 1.38
> diff -u -p -r1.38 cpu.c
> --- amd64/cpu.c       13 Nov 2010 04:16:42 -0000      1.38
> +++ amd64/cpu.c       25 Nov 2010 23:00:44 -0000
> @@ -135,8 +135,6 @@ struct cpu_info cpu_info_primary = { 0, 
> 
> struct cpu_info *cpu_info_list = &cpu_info_primary;
> 
> -u_int32_t cpus_attached = 0;
> -
> #ifdef MULTIPROCESSOR
> /*
>  * Array of CPU info structures.  Must be statically-allocated because
> @@ -345,8 +343,6 @@ cpu_attach(struct device *parent, struct
>               panic("unknown processor type??");
>       }
>       cpu_vm_init(ci);
> -
> -     cpus_attached |= (1 << ci->ci_cpuid);
> 
> #if defined(MULTIPROCESSOR)
>       if (mp_verbose) {
> Index: include/cpu.h
> ===================================================================
> RCS file: /cvs/src/sys/arch/amd64/include/cpu.h,v
> retrieving revision 1.60
> diff -u -p -r1.60 cpu.h
> --- include/cpu.h     22 Nov 2010 21:07:18 -0000      1.60
> +++ include/cpu.h     25 Nov 2010 23:00:44 -0000
> @@ -211,8 +211,6 @@ extern struct cpu_info cpu_info_primary;
> 
> #define aston(p)      ((p)->p_md.md_astpending = 1)
> 
> -extern u_int32_t cpus_attached;
> -
> #define curpcb                curcpu()->ci_curpcb
> 
> /*

Reply via email to