2023-03-22 00:58:58

by Finn Thain

[permalink] [raw]
Subject: [PATCH] nubus: Avoid scanning "private" card resources

Some Nubus cards have many ROM 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 the "private" resources from
/proc/bus/nubus/ by default and add a kernel parameter to enable them
when needed. On the test machine, this saved 196 KiB and 5 seconds.

Tested-by: Stan Johnson <[email protected]>
Signed-off-by: Finn Thain <[email protected]>
---
drivers/nubus/nubus.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/drivers/nubus/nubus.c b/drivers/nubus/nubus.c
index f70ba58dbc55..777099b8e818 100644
--- a/drivers/nubus/nubus.c
+++ b/drivers/nubus/nubus.c
@@ -34,6 +34,9 @@

LIST_HEAD(nubus_func_rsrcs);

+bool all_func_rsrcs;
+module_param(all_func_rsrcs, bool, 0444);
+
/* Meaning of "bytelanes":

The card ROM may appear on any or all bytes of each long word in
@@ -572,9 +575,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 (all_func_rsrcs)
+ nubus_get_private_resource(fres, dir.procdir,
+ &ent);
}
}

--
2.37.5


2023-03-22 06:54:24

by Finn Thain

[permalink] [raw]
Subject: Re: [PATCH] nubus: Avoid scanning "private" card resources


On Wed, 22 Mar 2023, Finn Thain wrote:

> Some Nubus cards have many ROM 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 the "private" resources from
> /proc/bus/nubus/ by default and add a kernel parameter to enable them
> when needed. On the test machine, this saved 196 KiB and 5 seconds.
>

This patch is nice and short but I suspect it can be improved upon. If the
procfs entries are only needed for debugging then I should probably omit
all of them by default, and save even more time and RAM. So I think I'll
revise this patch.

> Tested-by: Stan Johnson <[email protected]>
> Signed-off-by: Finn Thain <[email protected]>
> ---
> drivers/nubus/nubus.c | 9 ++++++---
> 1 file changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/nubus/nubus.c b/drivers/nubus/nubus.c
> index f70ba58dbc55..777099b8e818 100644
> --- a/drivers/nubus/nubus.c
> +++ b/drivers/nubus/nubus.c
> @@ -34,6 +34,9 @@
>
> LIST_HEAD(nubus_func_rsrcs);
>
> +bool all_func_rsrcs;
> +module_param(all_func_rsrcs, bool, 0444);
> +
> /* Meaning of "bytelanes":
>
> The card ROM may appear on any or all bytes of each long word in
> @@ -572,9 +575,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 (all_func_rsrcs)
> + nubus_get_private_resource(fres, dir.procdir,
> + &ent);
> }
> }
>
>