x86/amd_nb: Unexport amd_cache_northbridges()
amd_cache_northbridges() is exported by amd_nb.c and is called by amd64-agp.c and amd64_edac.c modules at module_init() time so that NB descriptors are properly cached before those drivers can use them. However, the init_amd_nbs() initcall already does call amd_cache_northbridges() unconditionally and thus makes sure the NB descriptors are enumerated. That initcall is a fs_initcall type which is on the 5th group (starting from 0) of initcalls that gets run in increasing numerical order by the init code. The module_init() call is turned into an __initcall() in the MODULE=n case and those are device-level initcalls, i.e., group 6. Therefore, the northbridges caching is already finished by the time module initialization starts and thus the correct initialization order is retained. Unexport amd_cache_northbridges(), update dependent modules to call amd_nb_num() instead. While at it, simplify the checks in amd_cache_northbridges(). [ bp: Heavily massage and *actually* explain why the change is ok. ] Signed-off-by: Muralidhara M K <muralimk@amd.com> Signed-off-by: Naveen Krishna Chatradhi <nchatrad@amd.com> Signed-off-by: Borislav Petkov <bp@suse.de> Link: https://lore.kernel.org/r/20220324122729.221765-1-nchatrad@amd.com
This commit is contained in:
Родитель
3123109284
Коммит
e1907d3751
|
@ -16,7 +16,6 @@ extern const struct amd_nb_bus_dev_range amd_nb_bus_dev_ranges[];
|
||||||
|
|
||||||
extern bool early_is_amd_nb(u32 value);
|
extern bool early_is_amd_nb(u32 value);
|
||||||
extern struct resource *amd_get_mmconfig_range(struct resource *res);
|
extern struct resource *amd_get_mmconfig_range(struct resource *res);
|
||||||
extern int amd_cache_northbridges(void);
|
|
||||||
extern void amd_flush_garts(void);
|
extern void amd_flush_garts(void);
|
||||||
extern int amd_numa_init(void);
|
extern int amd_numa_init(void);
|
||||||
extern int amd_get_subcaches(int);
|
extern int amd_get_subcaches(int);
|
||||||
|
|
|
@ -188,7 +188,7 @@ int amd_smn_write(u16 node, u32 address, u32 value)
|
||||||
EXPORT_SYMBOL_GPL(amd_smn_write);
|
EXPORT_SYMBOL_GPL(amd_smn_write);
|
||||||
|
|
||||||
|
|
||||||
int amd_cache_northbridges(void)
|
static int amd_cache_northbridges(void)
|
||||||
{
|
{
|
||||||
const struct pci_device_id *misc_ids = amd_nb_misc_ids;
|
const struct pci_device_id *misc_ids = amd_nb_misc_ids;
|
||||||
const struct pci_device_id *link_ids = amd_nb_link_ids;
|
const struct pci_device_id *link_ids = amd_nb_link_ids;
|
||||||
|
@ -210,14 +210,14 @@ int amd_cache_northbridges(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
misc = NULL;
|
misc = NULL;
|
||||||
while ((misc = next_northbridge(misc, misc_ids)) != NULL)
|
while ((misc = next_northbridge(misc, misc_ids)))
|
||||||
misc_count++;
|
misc_count++;
|
||||||
|
|
||||||
if (!misc_count)
|
if (!misc_count)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
root = NULL;
|
root = NULL;
|
||||||
while ((root = next_northbridge(root, root_ids)) != NULL)
|
while ((root = next_northbridge(root, root_ids)))
|
||||||
root_count++;
|
root_count++;
|
||||||
|
|
||||||
if (root_count) {
|
if (root_count) {
|
||||||
|
@ -290,7 +290,6 @@ int amd_cache_northbridges(void)
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(amd_cache_northbridges);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Ignores subdevice/subvendor but as far as I can figure out
|
* Ignores subdevice/subvendor but as far as I can figure out
|
||||||
|
|
|
@ -327,7 +327,7 @@ static int cache_nbs(struct pci_dev *pdev, u32 cap_ptr)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (amd_cache_northbridges() < 0)
|
if (!amd_nb_num())
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
if (!amd_nb_has_feature(AMD_NB_GART))
|
if (!amd_nb_has_feature(AMD_NB_GART))
|
||||||
|
|
|
@ -4336,7 +4336,7 @@ static int __init amd64_edac_init(void)
|
||||||
if (!x86_match_cpu(amd64_cpuids))
|
if (!x86_match_cpu(amd64_cpuids))
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
if (amd_cache_northbridges() < 0)
|
if (!amd_nb_num())
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
opstate_init();
|
opstate_init();
|
||||||
|
|
Загрузка…
Ссылка в новой задаче