All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC PATCH v3] nubus: Don't list slot resources by default
@ 2023-03-26  3:37 Finn Thain
  2023-04-03  6:18 ` Brad Boyer
  0 siblings, 1 reply; 4+ messages in thread
From: Finn Thain @ 2023-03-26  3:37 UTC (permalink / raw)
  To: Geert Uytterhoeven; +Cc: Brad Boyer, linux-m68k, linux-kernel

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>
Tested-by: Stan Johnson <userm57@yahoo.com>
Signed-off-by: Finn Thain <fthain@linux-m68k.org>
---
 drivers/nubus/nubus.c | 12 +++++++++---
 drivers/nubus/proc.c  |  8 ++++----
 include/linux/nubus.h |  1 +
 3 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/drivers/nubus/nubus.c b/drivers/nubus/nubus.c
index f70ba58dbc55..d2d2b580f646 100644
--- a/drivers/nubus/nubus.c
+++ b/drivers/nubus/nubus.c
@@ -32,6 +32,12 @@
 
 /* Globals */
 
+/* This parameter makes slot resources available in procfs. It's deprecated and
+ * disabled by default as procfs is no longer thought to be suitable for that.
+ */
+bool populate_procfs;
+module_param(populate_procfs, bool, 0);
+
 LIST_HEAD(nubus_func_rsrcs);
 
 /* Meaning of "bytelanes":
@@ -572,9 +578,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 (populate_procfs)
+				nubus_get_private_resource(fres, dir.procdir,
+							   &ent);
 		}
 	}
 
diff --git a/drivers/nubus/proc.c b/drivers/nubus/proc.c
index 2c320a84fd72..1808accb8214 100644
--- a/drivers/nubus/proc.c
+++ b/drivers/nubus/proc.c
@@ -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 || !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 || !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 || !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 || !populate_procfs)
 		return;
 
 	snprintf(name, sizeof(name), "%x", ent->type);
diff --git a/include/linux/nubus.h b/include/linux/nubus.h
index 392fc6c53e96..50c9145808d1 100644
--- a/include/linux/nubus.h
+++ b/include/linux/nubus.h
@@ -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 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,
-- 
2.37.5


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [RFC PATCH v3] nubus: Don't list slot resources by default
  2023-03-26  3:37 [RFC PATCH v3] nubus: Don't list slot resources by default Finn Thain
@ 2023-04-03  6:18 ` Brad Boyer
  2023-04-03 22:50   ` Finn Thain
  0 siblings, 1 reply; 4+ messages in thread
From: Brad Boyer @ 2023-04-03  6:18 UTC (permalink / raw)
  To: Finn Thain; +Cc: Geert Uytterhoeven, linux-m68k, linux-kernel

On Sun, Mar 26, 2023 at 02:37:02PM +1100, Finn Thain wrote:
> diff --git a/drivers/nubus/nubus.c b/drivers/nubus/nubus.c
> index f70ba58dbc55..d2d2b580f646 100644
> --- a/drivers/nubus/nubus.c
> +++ b/drivers/nubus/nubus.c
> @@ -32,6 +32,12 @@
>  
>  /* Globals */
>  
> +/* This parameter makes slot resources available in procfs. It's deprecated and
> + * disabled by default as procfs is no longer thought to be suitable for that.
> + */
> +bool populate_procfs;
> +module_param(populate_procfs, bool, 0);
> +
>  LIST_HEAD(nubus_func_rsrcs);
>  
>  /* Meaning of "bytelanes":

Would it be better to give this option a name that indicates that it
is for nubus only? These are effectively a global namespace. Other
than this, I don't see any issues.

	Brad Boyer
	flar@allandria.com


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [RFC PATCH v3] nubus: Don't list slot resources by default
  2023-04-03  6:18 ` Brad Boyer
@ 2023-04-03 22:50   ` Finn Thain
  2023-04-04 21:16     ` Brad Boyer
  0 siblings, 1 reply; 4+ messages in thread
From: Finn Thain @ 2023-04-03 22:50 UTC (permalink / raw)
  To: Brad Boyer; +Cc: Geert Uytterhoeven, linux-m68k, linux-kernel

On Sun, 2 Apr 2023, Brad Boyer wrote:

> On Sun, Mar 26, 2023 at 02:37:02PM +1100, Finn Thain wrote:
> > diff --git a/drivers/nubus/nubus.c b/drivers/nubus/nubus.c
> > index f70ba58dbc55..d2d2b580f646 100644
> > --- a/drivers/nubus/nubus.c
> > +++ b/drivers/nubus/nubus.c
> > @@ -32,6 +32,12 @@
> >  
> >  /* Globals */
> >  
> > +/* This parameter makes slot resources available in procfs. It's deprecated and
> > + * disabled by default as procfs is no longer thought to be suitable for that.
> > + */
> > +bool populate_procfs;
> > +module_param(populate_procfs, bool, 0);
> > +
> >  LIST_HEAD(nubus_func_rsrcs);
> >  
> >  /* Meaning of "bytelanes":
> 
> Would it be better to give this option a name that indicates that it is 
> for nubus only? These are effectively a global namespace. Other than 
> this, I don't see any issues.
> 

The name of the module here is "nubus", so this parameter is specified as 
"nubus.populate_procfs" in the kernel parameters. Without the "nubus" it 
doesn't work. I should probably add a comment about that.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [RFC PATCH v3] nubus: Don't list slot resources by default
  2023-04-03 22:50   ` Finn Thain
@ 2023-04-04 21:16     ` Brad Boyer
  0 siblings, 0 replies; 4+ messages in thread
From: Brad Boyer @ 2023-04-04 21:16 UTC (permalink / raw)
  To: Finn Thain; +Cc: Geert Uytterhoeven, linux-m68k, linux-kernel

On Tue, Apr 04, 2023 at 08:50:59AM +1000, Finn Thain wrote:
> On Sun, 2 Apr 2023, Brad Boyer wrote:
> > Would it be better to give this option a name that indicates that it is 
> > for nubus only? These are effectively a global namespace. Other than 
> > this, I don't see any issues.
> 
> The name of the module here is "nubus", so this parameter is specified as 
> "nubus.populate_procfs" in the kernel parameters. Without the "nubus" it 
> doesn't work. I should probably add a comment about that.

OK. A comment would be good. Thank you for the clarification. It's been
a while since I needed to use anything like that myself. The code I
deal with on a regular basis is never built-in, so I missed how that
worked these days. Now that I looked at the headers, I see how that
works to add the prefix depending on the build type.

	Brad Boyer
	flar@allandria.com


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2023-04-04 21:17 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-03-26  3:37 [RFC PATCH v3] nubus: Don't list slot resources by default Finn Thain
2023-04-03  6:18 ` Brad Boyer
2023-04-03 22:50   ` Finn Thain
2023-04-04 21:16     ` Brad Boyer

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.