mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 04:18:39 +08:00
nubus: Don't list slot resources by default
Some Nubus card ROMs contain many slot resources. A single Radius video card produced well over a thousand entries under /proc/bus/nubus/. Populating /proc/bus/nubus/ on a slow machine with several such cards installed takes long enough that the user may think that the system is wedged. All those procfs entries also consume significant RAM though they are not normally needed (except by developers). Omit these resources from /proc/bus/nubus/ by default and add a kernel parameter to enable them when needed. On the test machine, this saved 300 kB and 10 seconds. Cc: Brad Boyer <flar@allandria.com> Reviewed-by: Brad Boyer <flar@allandria.com> Tested-by: Stan Johnson <userm57@yahoo.com> Signed-off-by: Finn Thain <fthain@linux-m68k.org> Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org> Link: https://lore.kernel.org/r/71ed7fb234a5f7381a50253b0d841a656d53e64c.1684200125.git.fthain@linux-m68k.org Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
This commit is contained in:
parent
b7629ce6f4
commit
72b44f6577
@ -32,6 +32,13 @@
|
||||
|
||||
/* Globals */
|
||||
|
||||
/* The "nubus.populate_procfs" parameter makes slot resources available in
|
||||
* procfs. It's deprecated and disabled by default because procfs is no longer
|
||||
* thought to be suitable for that and some board ROMs make it too expensive.
|
||||
*/
|
||||
bool nubus_populate_procfs;
|
||||
module_param_named(populate_procfs, nubus_populate_procfs, bool, 0);
|
||||
|
||||
LIST_HEAD(nubus_func_rsrcs);
|
||||
|
||||
/* Meaning of "bytelanes":
|
||||
@ -572,9 +579,9 @@ nubus_get_functional_resource(struct nubus_board *board, int slot,
|
||||
nubus_proc_add_rsrc(dir.procdir, &ent);
|
||||
break;
|
||||
default:
|
||||
/* Local/Private resources have their own
|
||||
function */
|
||||
nubus_get_private_resource(fres, dir.procdir, &ent);
|
||||
if (nubus_populate_procfs)
|
||||
nubus_get_private_resource(fres, dir.procdir,
|
||||
&ent);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -55,7 +55,7 @@ struct proc_dir_entry *nubus_proc_add_board(struct nubus_board *board)
|
||||
{
|
||||
char name[2];
|
||||
|
||||
if (!proc_bus_nubus_dir)
|
||||
if (!proc_bus_nubus_dir || !nubus_populate_procfs)
|
||||
return NULL;
|
||||
snprintf(name, sizeof(name), "%x", board->slot);
|
||||
return proc_mkdir(name, proc_bus_nubus_dir);
|
||||
@ -72,7 +72,7 @@ struct proc_dir_entry *nubus_proc_add_rsrc_dir(struct proc_dir_entry *procdir,
|
||||
char name[9];
|
||||
int lanes = board->lanes;
|
||||
|
||||
if (!procdir)
|
||||
if (!procdir || !nubus_populate_procfs)
|
||||
return NULL;
|
||||
snprintf(name, sizeof(name), "%x", ent->type);
|
||||
remove_proc_subtree(name, procdir);
|
||||
@ -157,7 +157,7 @@ void nubus_proc_add_rsrc_mem(struct proc_dir_entry *procdir,
|
||||
char name[9];
|
||||
struct nubus_proc_pde_data *pded;
|
||||
|
||||
if (!procdir)
|
||||
if (!procdir || !nubus_populate_procfs)
|
||||
return;
|
||||
|
||||
snprintf(name, sizeof(name), "%x", ent->type);
|
||||
@ -176,7 +176,7 @@ void nubus_proc_add_rsrc(struct proc_dir_entry *procdir,
|
||||
char name[9];
|
||||
unsigned char *data = (unsigned char *)ent->data;
|
||||
|
||||
if (!procdir)
|
||||
if (!procdir || !nubus_populate_procfs)
|
||||
return;
|
||||
|
||||
snprintf(name, sizeof(name), "%x", ent->type);
|
||||
|
@ -93,6 +93,7 @@ extern struct bus_type nubus_bus_type;
|
||||
|
||||
/* Generic NuBus interface functions, modelled after the PCI interface */
|
||||
#ifdef CONFIG_PROC_FS
|
||||
extern bool nubus_populate_procfs;
|
||||
void nubus_proc_init(void);
|
||||
struct proc_dir_entry *nubus_proc_add_board(struct nubus_board *board);
|
||||
struct proc_dir_entry *nubus_proc_add_rsrc_dir(struct proc_dir_entry *procdir,
|
||||
|
Loading…
Reference in New Issue
Block a user