Re: lk 4.7 regression: EDAC, amd64_edac: Drop pci_register_driver() use

From: Tony Battersby
Date: Wed Jun 15 2016 - 17:43:55 EST


On 06/15/2016 05:12 PM, Borislav Petkov wrote:
> On Wed, Jun 15, 2016 at 04:46:40PM -0400, Tony Battersby wrote:
>> The following commit is causing an oops:
>>
>> 3f37a36b6282 ("EDAC, amd64_edac: Drop pci_register_driver() use")
>>
>> The oops happens when I "modprobe amd64_edac_mod" on an Intel
>> Xeon-based system, or when booting the same system with amd64_edac
>> built-in. Obviously the module is not meant for this hardware, but it
>> tries to load anyway and then oopses.
> Hmm, that shouldn't happen. AFAICT, amd_cache_northbridges() doesn't
> prevent us from loading as it should.
>
> Can you send me your .config please? Privately is fine too.
>
> It is late here so I can only think of this totally untested fix right
> now:
>
> ---
> diff --git a/arch/x86/kernel/amd_nb.c b/arch/x86/kernel/amd_nb.c
> index a147e676fc7b..b913c6173c1b 100644
> --- a/arch/x86/kernel/amd_nb.c
> +++ b/arch/x86/kernel/amd_nb.c
> @@ -72,7 +72,7 @@ int amd_cache_northbridges(void)
> i++;
>
> if (i == 0)
> - return 0;
> + return -1;
>
> nb = kzalloc(i * sizeof(struct amd_northbridge), GFP_KERNEL);
> if (!nb)
> ---
>
> More staring tomorrow.
>
> Thanks!
>

With that patch applied, modprobe amd64_edac_mod correctly reports "No
such device" and everything is fine. I also get a new line in dmesg on
boot:

amd_nb: Cannot enumerate AMD northbridges

You might want to consider using -ENODEV instead of -1 for callers such
as init_amd_nbs() that use the error value.

Tony