<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel/linux.git/include/linux/nubus.h, branch v6.6.132</title>
<subtitle>Linux kernel stable tree (mirror)</subtitle>
<id>https://git.radix-linux.su/kernel/linux.git/atom?h=v6.6.132</id>
<link rel='self' href='https://git.radix-linux.su/kernel/linux.git/atom?h=v6.6.132'/>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/'/>
<updated>2023-05-22T11:51:56+00:00</updated>
<entry>
<title>nubus: Don't list slot resources by default</title>
<updated>2023-05-22T11:51:56+00:00</updated>
<author>
<name>Finn Thain</name>
<email>fthain@linux-m68k.org</email>
</author>
<published>2023-05-16T01:22:05+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=72b44f6577f15f37fe964c8dcc42a7c5736e604c'/>
<id>urn:sha1:72b44f6577f15f37fe964c8dcc42a7c5736e604c</id>
<content type='text'>
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 &lt;flar@allandria.com&gt;
Reviewed-by: Brad Boyer &lt;flar@allandria.com&gt;
Tested-by: Stan Johnson &lt;userm57@yahoo.com&gt;
Signed-off-by: Finn Thain &lt;fthain@linux-m68k.org&gt;
Reviewed-by: Geert Uytterhoeven &lt;geert@linux-m68k.org&gt;
Link: https://lore.kernel.org/r/71ed7fb234a5f7381a50253b0d841a656d53e64c.1684200125.git.fthain@linux-m68k.org
Signed-off-by: Geert Uytterhoeven &lt;geert@linux-m68k.org&gt;
</content>
</entry>
<entry>
<title>nubus: Make struct nubus_driver::remove return void</title>
<updated>2021-07-28T13:33:59+00:00</updated>
<author>
<name>Uwe Kleine-König</name>
<email>u.kleine-koenig@pengutronix.de</email>
</author>
<published>2021-07-27T08:08:37+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=b2c943e52705b211d1aa0633c9196150cf30be47'/>
<id>urn:sha1:b2c943e52705b211d1aa0633c9196150cf30be47</id>
<content type='text'>
The nubus core ignores the return value of the remove callback (in
nubus_device_remove()) and all implementers return 0 anyway.

So make it impossible for future drivers to return an unused error code
by changing the remove prototype to return void.

Signed-off-by: Uwe Kleine-König &lt;u.kleine-koenig@pengutronix.de&gt;
Acked-by: Finn Thain &lt;fthain@linux-m68k.org&gt;
Link: https://lore.kernel.org/r/20210727080840.3550927-3-u.kleine-koenig@pengutronix.de
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>nubus: Call bus_register unconditionally</title>
<updated>2018-05-14T14:27:08+00:00</updated>
<author>
<name>Finn Thain</name>
<email>fthain@telegraphics.com.au</email>
</author>
<published>2018-05-09T01:04:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=bdeeed098811b36d1f988521600a89a400830a4b'/>
<id>urn:sha1:bdeeed098811b36d1f988521600a89a400830a4b</id>
<content type='text'>
Loading a NuBus driver module on a non-NuBus machine triggers the
BUG_ON(!drv-&gt;bus-&gt;p) in driver_register(), because bus_register() was
not called, because it is conditional on MACH_IS_MAC.

Fix the crash by calling bus_register() unconditionally. Call it from
a postcore_initcall(), like other busses do.

Hence, the bus type is available for device_register(), which happens
in a subsys initcall, and for driver_register(), which happens in a
device or module initcall.

Cc: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
Reported-by: Michael Schmitz &lt;schmitzmic@gmail.com&gt;
Tested-by: Stan Johnson &lt;userm57@yahoo.com&gt;
Fixes: 7f86c765a6a2 ("nubus: Add support for the driver model")
Signed-off-by: Finn Thain &lt;fthain@telegraphics.com.au&gt;
Reviewed-by: Geert Uytterhoeven &lt;geert@linux-m68k.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>nubus: Add support for the driver model</title>
<updated>2018-01-16T15:47:29+00:00</updated>
<author>
<name>Finn Thain</name>
<email>fthain@telegraphics.com.au</email>
</author>
<published>2018-01-13T22:37:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=7f86c765a6a2bb837c45f11526176125ff50e21f'/>
<id>urn:sha1:7f86c765a6a2bb837c45f11526176125ff50e21f</id>
<content type='text'>
This patch brings basic support for the Linux Driver Model to the
NuBus subsystem.

For flexibility, the matching of boards with drivers is left up to the
drivers. This is also the approach taken by NetBSD. A board may have
many functions, and drivers may have to consider many functional
resources and board resources in order to match a device.

This implementation does not bind drivers to resources (nor does it bind
many drivers to the same board). Apple's NuBus declaration ROM design
is flexible enough to allow that, but I don't see a need to support it
as we don't use the "slot zero" resources (in the main logic board ROM).

Eliminate the global nubus_boards linked list by rewriting the procfs
board iterator around bus_for_each_dev(). Hence the nubus device refcount
can be used to determine the lifespan of board objects.

Cc: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
Reviewed-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
Tested-by: Stan Johnson &lt;userm57@yahoo.com&gt;
Signed-off-by: Finn Thain &lt;fthain@telegraphics.com.au&gt;
Signed-off-by: Geert Uytterhoeven &lt;geert@linux-m68k.org&gt;
</content>
</entry>
<entry>
<title>nubus: Adopt standard linked list implementation</title>
<updated>2018-01-16T15:47:29+00:00</updated>
<author>
<name>Finn Thain</name>
<email>fthain@telegraphics.com.au</email>
</author>
<published>2018-01-13T22:37:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=41b848160eabb22957652936b66ccafd95ab5ad8'/>
<id>urn:sha1:41b848160eabb22957652936b66ccafd95ab5ad8</id>
<content type='text'>
This increases code re-use and improves readability.

Cc: "David S. Miller" &lt;davem@davemloft.net&gt;
Cc: Bartlomiej Zolnierkiewicz &lt;b.zolnierkie@samsung.com&gt;
Acked-by: Bartlomiej Zolnierkiewicz &lt;b.zolnierkie@samsung.com&gt;
Tested-by: Stan Johnson &lt;userm57@yahoo.com&gt;
Signed-off-by: Finn Thain &lt;fthain@telegraphics.com.au&gt;
Signed-off-by: Geert Uytterhoeven &lt;geert@linux-m68k.org&gt;
</content>
</entry>
<entry>
<title>nubus: Rename struct nubus_dev</title>
<updated>2018-01-16T15:47:29+00:00</updated>
<author>
<name>Finn Thain</name>
<email>fthain@telegraphics.com.au</email>
</author>
<published>2018-01-13T22:37:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=189e19e8cbb49f5bf483e55bdbd1e56d3d6bcf75'/>
<id>urn:sha1:189e19e8cbb49f5bf483e55bdbd1e56d3d6bcf75</id>
<content type='text'>
It is misleading to call a functional resource a "device". In adopting
the Linux Driver Model, the struct device will be embedded in struct
nubus_board. That will compound the terminlogy problem because drivers
will bind with boards, not with functional resources. Avoid this by
renaming struct nubus_dev as struct nubus_rsrc. "Functional resource"
is the vendor's terminology so this helps avoid confusion.

Cc: "David S. Miller" &lt;davem@davemloft.net&gt;
Cc: Bartlomiej Zolnierkiewicz &lt;b.zolnierkie@samsung.com&gt;
Acked-by: Bartlomiej Zolnierkiewicz &lt;b.zolnierkie@samsung.com&gt;
Tested-by: Stan Johnson &lt;userm57@yahoo.com&gt;
Signed-off-by: Finn Thain &lt;fthain@telegraphics.com.au&gt;
Signed-off-by: Geert Uytterhoeven &lt;geert@linux-m68k.org&gt;
</content>
</entry>
<entry>
<title>nubus: Rework /proc/bus/nubus/s/ implementation</title>
<updated>2018-01-16T15:47:29+00:00</updated>
<author>
<name>Finn Thain</name>
<email>fthain@telegraphics.com.au</email>
</author>
<published>2018-01-13T22:37:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=2f7dd07ecadac6bdc3d55c217d65efa2834ba1cb'/>
<id>urn:sha1:2f7dd07ecadac6bdc3d55c217d65efa2834ba1cb</id>
<content type='text'>
The /proc/bus/nubus/s/ directory tree for any slot s is missing a lot
of information. The struct file_operations methods have long been left
unimplemented (hence the familiar compile-time warning, "Need to set
some I/O handlers here").

Slot resources have a complex structure which varies depending on board
function. The logic for interpreting these ROM data structures is found
in nubus.c. Let's not duplicate that logic in proc.c.

Create the /proc/bus/nubus/s/ inodes while scanning slot s. During
descent through slot resource subdirectories, call the new
nubus_proc_add_foo() functions to create the procfs inodes.

Also add a new function, nubus_seq_write_rsrc_mem(), to write the
contents of a particular slot resource to a given seq_file. This is
used by the procfs file_operations methods, to finally give userspace
access to slot ROM information, such as the available video modes.

Tested-by: Stan Johnson &lt;userm57@yahoo.com&gt;
Signed-off-by: Finn Thain &lt;fthain@telegraphics.com.au&gt;
Signed-off-by: Geert Uytterhoeven &lt;geert@linux-m68k.org&gt;
</content>
</entry>
<entry>
<title>nubus: Clean up whitespace</title>
<updated>2018-01-16T15:47:29+00:00</updated>
<author>
<name>Finn Thain</name>
<email>fthain@telegraphics.com.au</email>
</author>
<published>2018-01-13T22:37:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=4bccc4b629de3af24308a24c41aff6270a6404aa'/>
<id>urn:sha1:4bccc4b629de3af24308a24c41aff6270a6404aa</id>
<content type='text'>
Tested-by: Stan Johnson &lt;userm57@yahoo.com&gt;
Signed-off-by: Finn Thain &lt;fthain@telegraphics.com.au&gt;
Signed-off-by: Geert Uytterhoeven &lt;geert@linux-m68k.org&gt;
</content>
</entry>
<entry>
<title>nubus: Remove redundant code</title>
<updated>2018-01-16T15:47:29+00:00</updated>
<author>
<name>Finn Thain</name>
<email>fthain@telegraphics.com.au</email>
</author>
<published>2018-01-13T22:37:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=9f97977deb22e602f91047a105b961ffb36adc2b'/>
<id>urn:sha1:9f97977deb22e602f91047a105b961ffb36adc2b</id>
<content type='text'>
Eliminate unused values from struct nubus_dev to save wasted memory
(a Radius PrecisionColor 24X card has about 95 functional resources
and up to six such cards may be fitted). Also remove redundant static
variable initialization, an unreachable !MACH_IS_MAC conditional,
the unused nubus_find_device() function, the bogus get_nubus_list()
prototype and the pointless card_present temporary variable.

Tested-by: Stan Johnson &lt;userm57@yahoo.com&gt;
Signed-off-by: Finn Thain &lt;fthain@telegraphics.com.au&gt;
Signed-off-by: Geert Uytterhoeven &lt;geert@linux-m68k.org&gt;
</content>
</entry>
<entry>
<title>nubus: Call proc_mkdir() not more than once per slot directory</title>
<updated>2018-01-16T15:47:29+00:00</updated>
<author>
<name>Finn Thain</name>
<email>fthain@telegraphics.com.au</email>
</author>
<published>2018-01-13T22:37:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=6c8b89ea55c9d53979e2be7977e945edba100359'/>
<id>urn:sha1:6c8b89ea55c9d53979e2be7977e945edba100359</id>
<content type='text'>
This patch fixes the following WARNING.

proc_dir_entry 'nubus/a' already registered
Modules linked in:
CPU: 0 PID: 1 Comm: swapper Tainted: G        W       4.13.0-00036-gd57552077387 #1
Stack from 01c1bd9c:
        01c1bd9c 003c2c8b 01c1bdc0 0001b0fe 00000000 00322f4a 01c43a20 01c43b0c
        01c8c420 01c1bde8 0001b1b8 003a4ac3 00000148 000faa26 00000009 00000000
        01c1bde0 003a4b6c 01c1bdfc 01c1be20 000faa26 003a4ac3 00000148 003a4b6c
        01c43a71 01c8c471 01c10000 00326430 0043d00c 00000005 01c71a00 0020bce0
        00322964 01c1be38 000fac04 01c43a20 01c8c420 01c1bee0 01c8c420 01c1be50
        000fac4c 01c1bee0 00000000 01c43a20 00000000 01c1bee8 0020bd26 01c1bee0
Call Trace: [&lt;0001b0fe&gt;] __warn+0xae/0xde
 [&lt;00322f4a&gt;] memcmp+0x0/0x5c
 [&lt;0001b1b8&gt;] warn_slowpath_fmt+0x2e/0x36
 [&lt;000faa26&gt;] proc_register+0xbe/0xd8
 [&lt;000faa26&gt;] proc_register+0xbe/0xd8
 [&lt;00326430&gt;] sprintf+0x0/0x20
 [&lt;0020bce0&gt;] nubus_proc_attach_device+0x0/0x1b8
 [&lt;00322964&gt;] strcpy+0x0/0x22
 [&lt;000fac04&gt;] proc_mkdir_data+0x64/0x96
 [&lt;000fac4c&gt;] proc_mkdir+0x16/0x1c
 [&lt;0020bd26&gt;] nubus_proc_attach_device+0x46/0x1b8
 [&lt;0020bce0&gt;] nubus_proc_attach_device+0x0/0x1b8
 [&lt;00322964&gt;] strcpy+0x0/0x22
 [&lt;00001ba6&gt;] kernel_pg_dir+0xba6/0x1000
 [&lt;004339a2&gt;] proc_bus_nubus_add_devices+0x1a/0x2e
 [&lt;000faa40&gt;] proc_create_data+0x0/0xf2
 [&lt;0003297c&gt;] parse_args+0x0/0x2d4
 [&lt;00433a08&gt;] nubus_proc_init+0x52/0x5a
 [&lt;00433944&gt;] nubus_init+0x0/0x44
 [&lt;00433982&gt;] nubus_init+0x3e/0x44
 [&lt;000020dc&gt;] do_one_initcall+0x38/0x196
 [&lt;000020a4&gt;] do_one_initcall+0x0/0x196
 [&lt;0003297c&gt;] parse_args+0x0/0x2d4
 [&lt;00322964&gt;] strcpy+0x0/0x22
 [&lt;00040004&gt;] __up_read+0xe/0x40
 [&lt;004231d4&gt;] repair_env_string+0x0/0x7a
 [&lt;0042312e&gt;] kernel_init_freeable+0xee/0x194
 [&lt;00423146&gt;] kernel_init_freeable+0x106/0x194
 [&lt;00433944&gt;] nubus_init+0x0/0x44
 [&lt;000a6000&gt;] kfree+0x0/0x156
 [&lt;0032768c&gt;] kernel_init+0x0/0xda
 [&lt;00327698&gt;] kernel_init+0xc/0xda
 [&lt;0032768c&gt;] kernel_init+0x0/0xda
 [&lt;00002a90&gt;] ret_from_kernel_thread+0xc/0x14
---[ end trace 14a6d619908ea253 ]---
------------[ cut here ]------------

This gets repeated with each additional functional reasource.

The problem here is the call to proc_mkdir() when the directory already
exists. Each nubus_board gets a directory, such as /proc/bus/nubus/s/
where s is the hex slot number. Therefore, store the 'procdir' pointer
in struct nubus_board instead of struct nubus_dev.

Tested-by: Stan Johnson &lt;userm57@yahoo.com&gt;
Signed-off-by: Finn Thain &lt;fthain@telegraphics.com.au&gt;
Signed-off-by: Geert Uytterhoeven &lt;geert@linux-m68k.org&gt;
</content>
</entry>
</feed>
