#
351242 |
|
19-Aug-2019 |
jhb |
MFC 349616: Fix description of debug.obsolete_panic.
|
#
348753 |
|
06-Jun-2019 |
jhb |
MFC 348543: Warn about deprecated features on all major OS versions.
Approved by: re (gjb)
|
#
346383 |
|
19-Apr-2019 |
kib |
MFC r345965: Add DEV_RESET /dev/devctl2 ioctl.
|
#
346381 |
|
19-Apr-2019 |
kib |
MFC r345960: Provide newbus infrastructure for initiating device reset.
|
#
345793 |
|
02-Apr-2019 |
mw |
MFC r344676: Prevent detaching driver if the attach is not finished
Submitted by: Rafal Kozik <rk@semihalf.com> Obtained from: Semihalf Sponsored by: Amazon, Inc.
|
#
337121 |
|
02-Aug-2018 |
avg |
MFC r335934: remove unneeded inclusion of sys/interrupt.h from several files
|
#
335658 |
|
26-Jun-2018 |
avg |
MFC r333268: for bus suspend, detach and shutdown iterate children in reverse order
|
#
331747 |
|
29-Mar-2018 |
brooks |
MFC r328522:
Create deprecation management functions.
gone_in(majar, msg); If we're running in FreeBSD major, tell the user this code may be deleted soon. If we're running in FreeBSD major - 1, the the user is deprecated and will be gone in major. Otherwise say nothing.
gone_in_dev(dev, major, msg) Just like gone_in, except use device_printf.
New tunable / sysctl debug.oboslete_panic: 0 - don't panic, 1 - panic in major or newer , 2 - panic in major - 1 or newer default: 0
if NO_OBSOLETE_CODE is defined, then both of these turn into compile time errors when building for major. Add options NO_OBSOLETE_CODE to kernel build system.
This lets us tag code that's going away so users know it will be gone, as well as automatically manage things.
Differential Review: https://reviews.freebsd.org/D13818
|
#
327626 |
|
06-Jan-2018 |
ian |
MFC r324413, r324415
r324413: Restore the ability to deregister an eventhandler from within the callback.
When the EVENTHANDLER(9) subsystem was created, it was a documented feature that an eventhandler callback function could safely deregister itself. In r200652 that feature was inadvertantly broken by adding drain-wait logic to eventhandler_deregister(), so that it would be safe to unload a module upon return from deregistering its event handlers.
There are now 145 callers of EVENTHANDLER_DEREGISTER(), and it's likely many of them are depending on the drain-wait logic that has been in place for 8 years. So instead of creating a separate eventhandler_drain() and adding it to some or all of those 145 call sites, this creates a separate eventhandler_drain_nowait() function for the specific purpose of deregistering a callback from within the running callback.
Differential Revision: https://reviews.freebsd.org/D12561
r324415: Add eventhandler notifications for newbus device attach/detach.
The detach case is slightly complicated by the fact that some in-kernel consumers may want to know before a device detaches (so they can release related resources, stop using the device, etc), but the detach can fail. So there are pre- and post-detach notifications for those consumers who need to handle all cases.
A couple salient comments from the review, they amount to some helpful documentation about these events, but there's currently no good place for such documentation...
Note that in the current newbus locking model, DETACH_BEGIN and DETACH_COMPLETE/FAILED sequence of event handler invocation might interweave with other attach/detach events arbitrarily. The handlers should be prepared for such situations.
Also should note that detach may be called after the parent bus knows the hardware has left the building. In-kernel consumers have to be prepared to cope with this race.
Differential Revision: https://reviews.freebsd.org/D12557
|
#
308401 |
|
07-Nov-2016 |
hselasky |
MFC r307518: Fix device delete child function.
When detaching device trees parent devices must be detached prior to detaching its children. This is because parent devices can have pointers to the child devices in their softcs which are not invalidated by device_delete_child(). This can cause use after free issues and panic().
Device drivers implementing trees, must ensure its detach function detaches or deletes all its children before returning.
While at it remove now redundant device_detach() calls before device_delete_child() and device_delete_children(), mostly in the USB controller drivers.
Tested by: Jan Henrik Sylvester <me@janh.de> Reviewed by: jhb Differential Revision: https://reviews.freebsd.org/D8070
|
#
308333 |
|
05-Nov-2016 |
mmel |
MFC r304459,r305527:
r304459: INTRNG: Rework handling with resources. Partially revert r301453. - Read interrupt properties at bus enumeration time and store it into global mapping table. - At bus_activate_resource() time, given mapping entry is resolved and connected to real interrupt source. A copy of mapping entry is attached to given resource. - At bus_setup_intr() time, mapping entry stored in resource is used for delivery of requested interrupt configuration. - For MSI/MSIX interrupts, mapping entry is created within pci_alloc_msi()/pci_alloc_msix() call. - For legacy PCI interrupts, mapping entry must be created within pcib_route_interrupt() by pcib driver itself. r305527: Fix MIPS INTRNG (both FDT and non-FDT) behaviour broken by r304459
|
#
306535 |
|
30-Sep-2016 |
jhb |
MFC 305751: Make device_quiet() an attachment property.
In particular, reset the DF_QUIET flag when detaching from a device so that a driver that marks a device quiet doesn't dictate policy for a different driver that may claim the device in the future.
Sponsored by: Chelsio Communications
|
#
306533 |
|
30-Sep-2016 |
jhb |
MFC 305034: Implement 'devctl clear driver' to undo a previous 'set driver'.
Add a new 'clear driver' command for devctl along with the accompanying ioctl and devctl_clear_driver() library routine to reset a device to use a wildcard devclass instead of a fixed devclass. This can be used to undo a previous 'set driver' command. After the device's name has been reset to permit wildcard names, it is reprobed so that it can attach to newly-available (to it) device drivers.
Sponsored by: Chelsio Communications
|
#
302408 |
|
07-Jul-2016 |
gjb |
Copy head@r302406 to stable/11 as part of the 11.0-RELEASE cycle. Prune svn:mergeinfo from the new branch, as nothing has been merged here.
Additional commits post-branch will follow.
Approved by: re (implicit) Sponsored by: The FreeBSD Foundation |
#
301451 |
|
05-Jun-2016 |
skra |
(1) Add a new bus method to get a mapping data for an interrupt.
BUS_MAP_INTR() is used to get an interrupt mapping data according to provided hints. The hints could be modified afterwards, but only if mapping data was allocated. This method is intended to be called before BUS_ALLOC_RESOURCE().
An interrupt mapping data describes an interrupt - hardware number, type, configuration, cpu binding, and whatever is needed to setup it.
(2) Introduce a method which allows storing of an additional data in struct resource to be available for bus drivers. This method is convenient in two ways: - there is no need to rework existing bus drivers as they can simply be extended to provide an additional data, - there is no need to modify any existing bus methods as struct resource is already passed to them as argument and thus stored data is simply accessible by other bus drivers. For now, implement this method only for INTRNG.
This is motivated by needs of modern SOCs where hardware initialization is not straightforward and resources descriptions are complex, opaque for everyone but provider, and may vary from SOC to SOC. Typical situation is that one bus driver can fetch a resource description for its child device, but it's opaque for this driver. Another bus driver knows a provider for this kind of resource and can pass this resource description to it. In fact, something like device IVARS would be perfect for that if implemented generally enough. Unfortunatelly, IVARS are usable only by their owners now. Only owner knows its IVARS layout, thus other bus drivers are not able to use them.
Differential Revision: https://reviews.freebsd.org/D6632
|
#
300317 |
|
20-May-2016 |
jhb |
Add new bus methods for mapping resources.
Add a pair of bus methods that can be used to "map" resources for direct CPU access using bus_space(9). bus_map_resource() creates a mapping and bus_unmap_resource() releases a previously created mapping. Mappings are described by 'struct resource_map' object. Pointers to these objects can be passed as the first argument to the bus_space wrapper API used for bus resources.
Drivers that wish to map all of a resource using default settings (for example, using uncacheable memory attributes) do not need to change. However, drivers that wish to use non-default settings can now do so without jumping through hoops.
First, an RF_UNMAPPED flag is added to request that a resource is not implicitly mapped with the default settings when it is activated. This permits other activation steps (such as enabling I/O or memory decoding in a device's PCI command register) to be taken without creating a mapping. Right now the AGP drivers don't set RF_ACTIVE to avoid using up a large amount of KVA to map the AGP aperture on 32-bit platforms. Once RF_UNMAPPED is supported on all platforms that support AGP this can be changed to using RF_UNMAPPED with RF_ACTIVE instead.
Second, bus_map_resource accepts an optional structure that defines additional settings for a given mapping.
For example, a driver can now request to map only a subset of a resource instead of the entire range. The AGP driver could also use this to only map the first page of the aperture (IIRC, it calls pmap_mapdev() directly to map the first page currently). I will also eventually change the PCI-PCI bridge driver to request mappings of the subset of the I/O window resource on its parent side to create mappings for child devices rather than passing child resources directly up to nexus to be mapped. This also permits bridges that do address translation to request suitable mappings from a resource on the "upper" side of the bus when mapping resources on the "lower" side of the bus.
Another attribute that can be specified is an alternate memory attribute for memory-mapped resources. This can be used to request a Write-Combining mapping of a PCI BAR in an MI fashion. (Currently the drivers that do this call pmap_change_attr() directly for x86 only.)
Note that this commit only adds the MI framework. Each platform needs to add support for handling RF_UNMAPPED and thew new bus_map/unmap_resource methods. Generally speaking, any drivers that are calling rman_set_bustag() and rman_set_bushandle() need to be updated.
Discussed on: arch Reviewed by: cem Differential Revision: https://reviews.freebsd.org/D5237
|
#
300095 |
|
17-May-2016 |
imp |
Don't forget to quote \ characters with \.
|
#
299286 |
|
09-May-2016 |
jhb |
Add a new bus method to fetch device-specific CPU sets.
bus_get_cpus() returns a specified set of CPUs for a device. It accepts an enum for the second parameter that indicates the type of cpuset to request. Currently two valus are supported:
- LOCAL_CPUS (on x86 this returns all the CPUs in the package closest to the device when DEVICE_NUMA is enabled) - INTR_CPUS (like LOCAL_CPUS but only returns 1 SMT thread for each core)
For systems that do not support NUMA (or if it is not enabled in the kernel config), LOCAL_CPUS fails with EINVAL. INTR_CPUS is mapped to 'all_cpus' by default. The idea is that INTR_CPUS should always return a valid set.
Device drivers which want to use per-CPU interrupts should start using INTR_CPUS instead of simply assigning interrupts to all available CPUs. In the future we may wish to add tunables to control the policy of INTR_CPUS (e.g. should it be local-only or global, should it ignore SMT threads or not).
The x86 nexus driver exposes the internal set of interrupt CPUs from the the x86 interrupt code via INTR_CPUS.
The ACPI bus driver and PCI bridge drivers use _PXM to return a suitable LOCAL_CPUS set when _PXM exists and DEVICE_NUMA is enabled. They also and the global INTR_CPUS set from the nexus driver with the per-domain set from _PXM to generate a local INTR_CPUS set for child devices.
Compared to the r298933, this version uses 'struct _cpuset' in <sys/bus.h> instead of 'cpuset_t' to avoid requiring <sys/param.h> (<sys/_cpuset.h> still requires <sys/param.h> for MAXCPU even though <sys/_bitset.h> does not after recent changes).
|
#
299095 |
|
04-May-2016 |
adrian |
s/struct device */device_t/g
Submitted by: kmacy
|
#
298951 |
|
02-May-2016 |
jhb |
Revert bus_get_cpus() for now.
I really thought I had run this through the tinderbox before committing, but many places need <sys/types.h> -> <sys/param.h> for <sys/bus.h> now.
|
#
298933 |
|
02-May-2016 |
jhb |
Add a new bus method to fetch device-specific CPU sets.
bus_get_cpus() returns a specified set of CPUs for a device. It accepts an enum for the second parameter that indicates the type of cpuset to request. Currently two valus are supported:
- LOCAL_CPUS (on x86 this returns all the CPUs in the package closest to the device when DEVICE_NUMA is enabled) - INTR_CPUS (like LOCAL_CPUS but only returns 1 SMT thread for each core)
For systems that do not support NUMA (or if it is not enabled in the kernel config), LOCAL_CPUS fails with EINVAL. INTR_CPUS is mapped to 'all_cpus' by default. The idea is that INTR_CPUS should always return a valid set.
Device drivers which want to use per-CPU interrupts should start using INTR_CPUS instead of simply assigning interrupts to all available CPUs. In the future we may wish to add tunables to control the policy of INTR_CPUS (e.g. should it be local-only or global, should it ignore SMT threads or not).
The x86 nexus driver exposes the internal set of interrupt CPUs from the the x86 interrupt code via INTR_CPUS.
The ACPI bus driver and PCI bridge drivers use _PXM to return a suitable LOCAL_CPUS set when _PXM exists and DEVICE_NUMA is enabled. They also and the global INTR_CPUS set from the nexus driver with the per-domain set from _PXM to generate a local INTR_CPUS set for child devices.
Reviewed by: wblock (manpage) Differential Revision: https://reviews.freebsd.org/D5519
|
#
298819 |
|
29-Apr-2016 |
pfg |
sys/kern: spelling fixes in comments.
No functional change.
|
#
298712 |
|
27-Apr-2016 |
jhb |
Add a bus_null_rescan() method that always fails with an error.
Use this in place of kobj_error_method to disable BUS_RESCAN() on PCI drivers that do not use the "standard" scanning algorithm.
|
#
298709 |
|
27-Apr-2016 |
jhb |
Add 'devctl delete' that calls device_delete_child().
'devctl delete' can be used to delete a device that is no longer present. As an anti-foot-shooting measure, 'delete' will not delete a device unless it's parent bus says it is no longer present. This can be overridden by passing the force ('-f') flag.
Note that this command should be used with care. If a device is deleted that is actually present it can't be resurrected unless the parent bus device's driver supports rescans.
Differential Revision: https://reviews.freebsd.org/D6019
|
#
298707 |
|
27-Apr-2016 |
jhb |
Add a new rescan method to the bus interface.
The BUS_RESCAN() method rescans a single bus device checking for devices that have been added or removed from the bus. A new 'rescan' command is added to devctl(8) to trigger a rescan.
Differential Revision: https://reviews.freebsd.org/D6016
|
#
297776 |
|
10-Apr-2016 |
jhb |
Add a function to lookup a device_t object by name.
This just walks the global list of devices looking for one with the requested name. The one use case outside of devctl2's implementation is for DDB commands that wish to lookup devices by name.
|
#
297365 |
|
28-Mar-2016 |
imp |
Move pccard_safe_quote() up to subr_bus.c and rename to devctl_safe_quote() so it can be used more generally.
|
#
296336 |
|
03-Mar-2016 |
jhibbits |
Replace all resource occurrences of '0UL/~0UL' with '0/~0'.
Summary: The idea behind this is '~0ul' is well-defined, and casting to uintmax_t, on a 32-bit platform, will leave the upper 32 bits as 0. The maximum range of a resource is 0xFFF.... (all bits of the full type set). By dropping the 'ul' suffix, C type promotion rules apply, and the sign extension of ~0 on 32 bit platforms gets it to a type-independent 'unsigned max'.
Reviewed By: cem Sponsored by: Alex Perez/Inertial Computing Differential Revision: https://reviews.freebsd.org/D5255
|
#
295832 |
|
19-Feb-2016 |
jhibbits |
Introduce a RMAN_IS_DEFAULT_RANGE() macro, and use it.
This simplifies checking for default resource range for bus_alloc_resource(), and improves readability.
This is part of, and related to, the migration of rman_res_t from u_long to uintmax_t.
Discussed with: jhb Suggested by: marcel
|
#
295762 |
|
18-Feb-2016 |
zbb |
Fix build for i386 and arm64 after r295755
- Take bus_space_tag_t type into consideration when returning default, zero value. - Include missing rman.h required by ofw_pci.h
|
#
295755 |
|
18-Feb-2016 |
zbb |
Introduce bus_get_bus_tag() method
Provide bus_get_bus_tag() for sparc64, powerpc, arm, arm64 and mips nexus and its children in order to return a platform specific default tag.
This is required to ensure generic correctness of the bus_space tag. It is especially needed for arches where child bus tag does not match the parent bus tag. This solves the problem with ppc architecture where the PCI bus tag differs from parent bus tag which is big-endian.
This commit is a part of the following patch: https://reviews.freebsd.org/D4879
Submitted by: Marcin Mazurek <mma@semihalf.com> Obtained from: Semihalf Sponsored by: Annapurna Labs Reviewed by: jhibbits, mmel Differential Revision: https://reviews.freebsd.org/D4879
|
#
294883 |
|
27-Jan-2016 |
jhibbits |
Convert rman to use rman_res_t instead of u_long
Summary: Migrate to using the semi-opaque type rman_res_t to specify rman resources. For now, this is still compatible with u_long.
This is step one in migrating rman to use uintmax_t for resources instead of u_long.
Going forward, this could feasibly be used to specify architecture-specific definitions of resource ranges, rather than baking a specific integer type into the API.
This change has been broken out to facilitate MFC'ing drivers back to 10 without breaking ABI.
Reviewed By: jhb Sponsored by: Alex Perez/Inertial Computing Differential Revision: https://reviews.freebsd.org/D5075
|
#
284959 |
|
30-Jun-2015 |
markm |
Huge cleanup of random(4) code.
* GENERAL - Update copyright. - Make kernel options for RANDOM_YARROW and RANDOM_DUMMY. Set neither to ON, which means we want Fortuna - If there is no 'device random' in the kernel, there will be NO random(4) device in the kernel, and the KERN_ARND sysctl will return nothing. With RANDOM_DUMMY there will be a random(4) that always blocks. - Repair kern.arandom (KERN_ARND sysctl). The old version went through arc4random(9) and was a bit weird. - Adjust arc4random stirring a bit - the existing code looks a little suspect. - Fix the nasty pre- and post-read overloading by providing explictit functions to do these tasks. - Redo read_random(9) so as to duplicate random(4)'s read internals. This makes it a first-class citizen rather than a hack. - Move stuff out of locked regions when it does not need to be there. - Trim RANDOM_DEBUG printfs. Some are excess to requirement, some behind boot verbose. - Use SYSINIT to sequence the startup. - Fix init/deinit sysctl stuff. - Make relevant sysctls also tunables. - Add different harvesting "styles" to allow for different requirements (direct, queue, fast). - Add harvesting of FFS atime events. This needs to be checked for weighing down the FS code. - Add harvesting of slab allocator events. This needs to be checked for weighing down the allocator code. - Fix the random(9) manpage. - Loadable modules are not present for now. These will be re-engineered when the dust settles. - Use macros for locks. - Fix comments.
* src/share/man/... - Update the man pages.
* src/etc/... - The startup/shutdown work is done in D2924.
* src/UPDATING - Add UPDATING announcement.
* src/sys/dev/random/build.sh - Add copyright. - Add libz for unit tests.
* src/sys/dev/random/dummy.c - Remove; no longer needed. Functionality incorporated into randomdev.*.
* live_entropy_sources.c live_entropy_sources.h - Remove; content moved. - move content to randomdev.[ch] and optimise.
* src/sys/dev/random/random_adaptors.c src/sys/dev/random/random_adaptors.h - Remove; plugability is no longer used. Compile-time algorithm selection is the way to go.
* src/sys/dev/random/random_harvestq.c src/sys/dev/random/random_harvestq.h - Add early (re)boot-time randomness caching.
* src/sys/dev/random/randomdev_soft.c src/sys/dev/random/randomdev_soft.h - Remove; no longer needed.
* src/sys/dev/random/uint128.h - Provide a fake uint128_t; if a real one ever arrived, we can use that instead. All that is needed here is N=0, N++, N==0, and some localised trickery is used to manufacture a 128-bit 0ULLL.
* src/sys/dev/random/unit_test.c src/sys/dev/random/unit_test.h - Improve unit tests; previously the testing human needed clairvoyance; now the test will do a basic check of compressibility. Clairvoyant talent is still a good idea. - This is still a long way off a proper unit test.
* src/sys/dev/random/fortuna.c src/sys/dev/random/fortuna.h - Improve messy union to just uint128_t. - Remove unneeded 'static struct fortuna_start_cache'. - Tighten up up arithmetic. - Provide a method to allow eternal junk to be introduced; harden it against blatant by compress/hashing. - Assert that locks are held correctly. - Fix the nasty pre- and post-read overloading by providing explictit functions to do these tasks. - Turn into self-sufficient module (no longer requires randomdev_soft.[ch])
* src/sys/dev/random/yarrow.c src/sys/dev/random/yarrow.h - Improve messy union to just uint128_t. - Remove unneeded 'staic struct start_cache'. - Tighten up up arithmetic. - Provide a method to allow eternal junk to be introduced; harden it against blatant by compress/hashing. - Assert that locks are held correctly. - Fix the nasty pre- and post-read overloading by providing explictit functions to do these tasks. - Turn into self-sufficient module (no longer requires randomdev_soft.[ch]) - Fix some magic numbers elsewhere used as FAST and SLOW.
Differential Revision: https://reviews.freebsd.org/D2025 Reviewed by: vsevolod,delphij,rwatson,trasz,jmg Approved by: so (delphij)
|
#
281559 |
|
15-Apr-2015 |
neel |
Fix handling of BUS_PROBE_NOWILDCARD in 'device_probe_child()'.
Device probe value of BUS_PROBE_NOWILDCARD should be treated specially only if the device has a fixed devclass. Otherwise it should be interpreted just as if the driver doesn't want to claim the device.
Prior to this change a device that was not claimed explicitly by its driver would remain "attached" to the driver that returned BUS_PROBE_NOWILDCARD. This would bump up the reference on 'driver->refs' and its 'dev->ops' would point to the 'driver->ops'. When the driver is subsequently unloaded the 'dev->ops->cls' is left pointing to freed memory.
This fixes an easily reproducible #GP fault caused by loading and unloading vmm.ko multiple times.
Differential Revision: https://reviews.freebsd.org/D2294 Reviewed by: imp, jhb Discussed with: rstone Reported by: Leon Dang (ldang@nahannisys.com) MFC after: 2 weeks
|
#
280006 |
|
14-Mar-2015 |
ian |
Use SYSCTL_OUT_STR() to return strings.
PR: 195668
|
#
279868 |
|
10-Mar-2015 |
rstone |
Fix SR-IOV passthrough devices to allow ppt to attach
A late change to the SR-IOV infrastructure broke passthrough of VFs. device_set_devclass() was being used to try to force the ppt driver to attach to the device, but this didn't work because the DF_FIXEDCLASS flag wasn't being set on the device, so the ppt driver probe routine would not match when it returned BUS_NOWILDCARD. Fix this by adding a new device function that both sets the devclass and sets the DF_FIXEDCLASS flag, and use that to force the ppt driver to attach to VFs.
Differential Revision: https://reviews.freebsd.org/D2041 Reviewed by: jhb MFC after: 3 weeks
|
#
278320 |
|
06-Feb-2015 |
jhb |
Add a new device control utility for new-bus devices called devctl. This allows the user to request administrative changes to individual devices such as attach or detaching drivers or disabling and re-enabling devices. - Add a new /dev/devctl2 character device which uses ioctls for device requests. The ioctls use a common 'struct devreq' which is somewhat similar to 'struct ifreq'. - The ioctls identify the device to operate on via a string. This string can either by the device's name, or it can be a bus-specific address. (For unattached devices, a bus address is the only way to locate a device.) Bus drivers register an eventhandler to claim unrecognized device names that the driver recognizes as a valid address. Two buses currently support addresses: ACPI recognizes any device in the ACPI namespace via its full path starting with "\" and the PCI bus driver recognizes an address specification of 'pci[<domain>:]<bus>:<slot>:<func>' (identical to the PCI selector strings supported by pciconf). - To make it easier to cut and paste, change the PnP location string in the PCI bus driver to output a full PCI selector string rather than 'slot=<slot> function=<func>'. - Add a devctl(3) interface in libdevctl which provides a wrapper around the ioctls and is the preferred interface for other userland code. - Add a devctl(8) program which is a simple wrapper around the requests supported by devctl(3). - Add a device_is_suspended() function to check DF_SUSPENDED. - Add a resource_unset_value() function that can be used to remove a hint from the kernel environment. This is used to clear a hint.<driver>.<unit>.disabled hint when re-enabling a boot-time disabled device.
Reviewed by: imp (parts) Requested by: imp (changing PCI location string) Relnotes: yes
|
#
278299 |
|
05-Feb-2015 |
jhb |
Expose the constants for internal new-bus device flags to userland. The flag value is already exposed via dv_flags, just not the meaning of the flags themselves. Use these constants to annotate devices that are disabled or suspended in devinfo output.
|
#
278296 |
|
05-Feb-2015 |
jhb |
Set and clear the DF_SUSPENDED flag on the child device being manipulated rather than on the parent.
|
#
276725 |
|
05-Jan-2015 |
jhb |
Trim trailing whitespace.
|
#
275460 |
|
03-Dec-2014 |
jhb |
Revert device_getenv_int() for now as it duplicates resource_int_value(). We should perhaps implement a device_getenv_*() and device_setenv_*() API as a convenience wrapper on top of resource_*_value() and resource_set_*().
|
#
275136 |
|
26-Nov-2014 |
alfred |
Make igb and ixgbe check tunables at probe time.
This allows one to make a kernel module to tune the number of queues before the driver loads.
This is needed so that a module at SI_SUB_CPU can set tunables for these drivers to take. Otherwise getenv is called too early by the TUNABLE macros.
Reviewed by: smh Phabric: https://reviews.freebsd.org/D1149
|
#
274976 |
|
24-Nov-2014 |
jhb |
Add a bus_get_domain() wrapper around BUS_GET_DOMAIN(). Use this to add a new per-device '%domain' sysctl node that returns the NUMA domain a device is associated with if it is associated with one.
Note that this API is still a WIP and might change before 11.0 actually ships.
Differential Revision: https://reviews.freebsd.org/D930 Reviewed by: kib, adrian
|
#
273872 |
|
30-Oct-2014 |
markm |
This is the much-discussed major upgrade to the random(4) device, known to you all as /dev/random.
This code has had an extensive rewrite and a good series of reviews, both by the author and other parties. This means a lot of code has been simplified. Pluggable structures for high-rate entropy generators are available, and it is most definitely not the case that /dev/random can be driven by only a hardware souce any more. This has been designed out of the device. Hardware sources are stirred into the CSPRNG (Yarrow, Fortuna) like any other entropy source. Pluggable modules may be written by third parties for additional sources.
The harvesting structures and consequently the locking have been simplified. Entropy harvesting is done in a more general way (the documentation for this will follow). There is some GREAT entropy to be had in the UMA allocator, but it is disabled for now as messing with that is likely to annoy many people.
The venerable (but effective) Yarrow algorithm, which is no longer supported by its authors now has an alternative, Fortuna. For now, Yarrow is retained as the default algorithm, but this may be changed using a kernel option. It is intended to make Fortuna the default algorithm for 11.0. Interested parties are encouraged to read ISBN 978-0-470-47424-2 "Cryptography Engineering" By Ferguson, Schneier and Kohno for Fortuna's gory details. Heck, read it anyway.
Many thanks to Arthur Mesh who did early grunt work, and who got caught in the crossfire rather more than he deserved to.
My thanks also to folks who helped me thresh this out on whiteboards and in the odd "Hallway track", or otherwise.
My Nomex pants are on. Let the feedback commence!
Reviewed by: trasz,des(partial),imp(partial?),rwatson(partial?) Approved by: so(des)
|
#
272799 |
|
09-Oct-2014 |
adrian |
Add a bus method to fetch the VM domain for the given device/bus.
* Add a bus_if.m method - get_domain() - returning the VM domain or ENOENT if the device isn't in a VM domain; * Add bus methods to print out the domain of the device if appropriate; * Add code in srat.c to save the PXM -> VM domain mapping that's done and expose a function to translate VM domain -> PXM; * Add ACPI and ACPI PCI methods to check if the bus has a _PXM attribute and if so map it to the VM domain; * (.. yes, this works recursively.) * Have the pci bus glue print out the device VM domain if present.
Note: this is just the plumbing to start enumerating information - it doesn't at all modify behaviour.
Differential Revision: D906 Reviewed by: jhb Sponsored by: Norse Corp
|
#
272182 |
|
26-Sep-2014 |
jhb |
Don't panic if a resource is allocated twice. Instead, print a warning and fail the allocation request. Allocations of "reserved" resources such as PCI BARs already fail the request instead of panic'ing in this case.
MFC after: 1 week
|
#
272013 |
|
23-Sep-2014 |
jhibbits |
Stage one of multipass suspend/resume
Summary: Add the beginnings of multipass suspend/resume, by introducing BUS_SUSPEND_CHILD/BUS_RESUME_CHILD, and move the PCI driver to this.
Reviewers: jhb
Reviewed By: jhb
Differential Revision: https://reviews.freebsd.org/D590
|
#
268570 |
|
12-Jul-2014 |
mjg |
Clear nonblock and async on devctl close instaed of open.
This is a purely cosmetic change.
|
#
267992 |
|
28-Jun-2014 |
hselasky |
Pull in r267961 and r267973 again. Fix for issues reported will follow.
|
#
267985 |
|
27-Jun-2014 |
gjb |
Revert r267961, r267973:
These changes prevent sysctl(8) from returning proper output, such as:
1) no output from sysctl(8) 2) erroneously returning ENOMEM with tools like truss(1) or uname(1) truss: can not get etype: Cannot allocate memory
|
#
267961 |
|
27-Jun-2014 |
hselasky |
Extend the meaning of the CTLFLAG_TUN flag to automatically check if there is an environment variable which shall initialize the SYSCTL during early boot. This works for all SYSCTL types both statically and dynamically created ones, except for the SYSCTL NODE type and SYSCTLs which belong to VNETs. A new flag, CTLFLAG_NOFETCH, has been added to be used in the case a tunable sysctl has a custom initialisation function allowing the sysctl to still be marked as a tunable. The kernel SYSCTL API is mostly the same, with a few exceptions for some special operations like iterating childrens of a static/extern SYSCTL node. This operation should probably be made into a factored out common macro, hence some device drivers use this. The reason for changing the SYSCTL API was the need for a SYSCTL parent OID pointer and not only the SYSCTL parent OID list pointer in order to quickly generate the sysctl path. The motivation behind this patch is to avoid parameter loading cludges inside the OFED driver subsystem. Instead of adding special code to the OFED driver subsystem to post-load tunables into dynamically created sysctls, we generalize this in the kernel.
Other changes: - Corrected a possibly incorrect sysctl name from "hw.cbb.intr_mask" to "hw.pcic.intr_mask". - Removed redundant TUNABLE statements throughout the kernel. - Some minor code rewrites in connection to removing not needed TUNABLE statements. - Added a missing SYSCTL_DECL(). - Wrapped two very long lines. - Avoid malloc()/free() inside sysctl string handling, in case it is called to initialize a sysctl from a tunable, hence malloc()/free() is not ready when sysctls from the sysctl dataset are registered. - Bumped FreeBSD version to indicate SYSCTL API change.
MFC after: 2 weeks Sponsored by: Mellanox Technologies
|
#
265060 |
|
28-Apr-2014 |
brooks |
Revert r263754, re-adding support for hw.bus.devctl_disable. Breaking old devd's and thus hosts that get IP addresses from DHCP was too much of a POLA violation.
The sysctl may be removed again after r263758 has been merged to at least stable/9 and stable/10, and releases have been cut from those branches.
Discussed with: mjg Reported by: theraven, rwatson
|
#
264310 |
|
10-Apr-2014 |
davidxu |
Add kqueue support for devctl.
Reviewed by: kib,mjg
|
#
264114 |
|
04-Apr-2014 |
davidxu |
Fix SIGIO delivery. Use fsetown() to handle file descriptor owner ioctl and use pgsigio() to send SIGIO.
Submitted by: truckman Reviewed by: mjg
|
#
263755 |
|
25-Mar-2014 |
mjg |
Document a known problem with handling the process intended to receive SIGIO in /dev/devctl.
Suggested by: adrian MFC after: 6 days
|
#
263754 |
|
25-Mar-2014 |
mjg |
Remove long obsolete sysctl hw.bus.devctl_disable.
Suggested by: imp Relnotes: yes
|
#
263753 |
|
25-Mar-2014 |
mjg |
Remove lockless check in devopen, while correct it does not make much sense.
Suggested by: imp MFC after: 6 days
|
#
263704 |
|
25-Mar-2014 |
mjg |
Make /dev/devctl mpsafe.
MFC after: 1 week
|
#
256377 |
|
12-Oct-2013 |
markm |
Merge from project branch. Uninteresting commits are trimmed.
Refactor of /dev/random device. Main points include:
* Userland seeding is no longer used. This auto-seeds at boot time on PC/Desktop setups; this may need some tweeking and intelligence from those folks setting up embedded boxes, but the work is believed to be minimal.
* An entropy cache is written to /entropy (even during installation) and the kernel uses this at next boot.
* An entropy file written to /boot/entropy can be loaded by loader(8)
* Hardware sources such as rdrand are fed into Yarrow, and are no longer available raw.
------------------------------------------------------------------------ r256240 | des | 2013-10-09 21:14:16 +0100 (Wed, 09 Oct 2013) | 4 lines
Add a RANDOM_RWFILE option and hide the entropy cache code behind it. Rename YARROW_RNG and FORTUNA_RNG to RANDOM_YARROW and RANDOM_FORTUNA. Add the RANDOM_* options to LINT.
------------------------------------------------------------------------ r256239 | des | 2013-10-09 21:12:59 +0100 (Wed, 09 Oct 2013) | 2 lines
Define RANDOM_PURE_RNDTEST for rndtest(4).
------------------------------------------------------------------------ r256204 | des | 2013-10-09 18:51:38 +0100 (Wed, 09 Oct 2013) | 2 lines
staticize struct random_hardware_source
------------------------------------------------------------------------ r256203 | markm | 2013-10-09 18:50:36 +0100 (Wed, 09 Oct 2013) | 2 lines
Wrap some policy-rich code in 'if NOTYET' until we can thresh out what it really needs to do.
------------------------------------------------------------------------ r256184 | des | 2013-10-09 10:13:12 +0100 (Wed, 09 Oct 2013) | 2 lines
Re-add /dev/urandom for compatibility purposes.
------------------------------------------------------------------------ r256182 | des | 2013-10-09 10:11:14 +0100 (Wed, 09 Oct 2013) | 3 lines
Add missing include guards and move the existing ones out of the implementation namespace.
------------------------------------------------------------------------ r256168 | markm | 2013-10-08 23:14:07 +0100 (Tue, 08 Oct 2013) | 10 lines
Fix some just-noticed problems:
o Allow this to work with "nodevice random" by fixing where the MALLOC pool is defined.
o Fix the explicit reseed code. This was correct as submitted, but in the project branch doesn't need to set the "seeded" bit as this is done correctly in the "unblock" function.
o Remove some debug ifdeffing.
o Adjust comments.
------------------------------------------------------------------------ r256159 | markm | 2013-10-08 19:48:11 +0100 (Tue, 08 Oct 2013) | 6 lines
Time to eat crow for me.
I replaced the sx_* locks that Arthur used with regular mutexes; this turned out the be the wrong thing to do as the locks need to be sleepable. Revert this folly.
# Submitted by: Arthur Mesh <arthurmesh@gmail.com> (In original diff)
------------------------------------------------------------------------ r256138 | des | 2013-10-08 12:05:26 +0100 (Tue, 08 Oct 2013) | 10 lines
Add YARROW_RNG and FORTUNA_RNG to sys/conf/options.
Add a SYSINIT that forces a reseed during proc0 setup, which happens fairly late in the boot process.
Add a RANDOM_DEBUG option which enables some debugging printf()s.
Add a new RANDOM_ATTACH entropy source which harvests entropy from the get_cyclecount() delta across each call to a device attach method.
------------------------------------------------------------------------ r256135 | markm | 2013-10-08 07:54:52 +0100 (Tue, 08 Oct 2013) | 8 lines
Debugging. My attempt at EVENTHANDLER(multiuser) was a failure; use EVENTHANDLER(mountroot) instead.
This means we can't count on /var being present, so something will need to be done about harvesting /var/db/entropy/... .
Some policy now needs to be sorted out, and a pre-sync cache needs to be written, but apart from that we are now ready to go.
Over to review.
------------------------------------------------------------------------ r256094 | markm | 2013-10-06 23:45:02 +0100 (Sun, 06 Oct 2013) | 8 lines
Snapshot.
Looking pretty good; this mostly works now. New code includes:
* Read cached entropy at startup, both from files and from loader(8) preloaded entropy. Failures are soft, but announced. Untested.
* Use EVENTHANDLER to do above just before we go multiuser. Untested.
------------------------------------------------------------------------ r256088 | markm | 2013-10-06 14:01:42 +0100 (Sun, 06 Oct 2013) | 2 lines
Fix up the man page for random(4). This mainly removes no-longer-relevant details about HW RNGs, reseeding explicitly and user-supplied entropy.
------------------------------------------------------------------------ r256087 | markm | 2013-10-06 13:43:42 +0100 (Sun, 06 Oct 2013) | 6 lines
As userland writing to /dev/random is no more, remove the "better than nothing" bootstrap mode.
Add SWI harvesting to the mix.
My box seeds Yarrow by itself in a few seconds! YMMV; more to follow.
------------------------------------------------------------------------ r256086 | markm | 2013-10-06 13:40:32 +0100 (Sun, 06 Oct 2013) | 11 lines
Debug run. This now works, except that the "live" sources haven't been tested. With all sources turned on, this unlocks itself in a couple of seconds! That is no my box, and there is no guarantee that this will be the case everywhere.
* Cut debug prints.
* Use the same locks/mutexes all the way through.
* Be a tad more conservative about entropy estimates.
------------------------------------------------------------------------ r256084 | markm | 2013-10-06 13:35:29 +0100 (Sun, 06 Oct 2013) | 5 lines
Don't use the "real" assembler mnemonics; older compilers may not understand them (like when building CURRENT on 9.x).
# Submitted by: Konstantin Belousov <kostikbel@gmail.com>
------------------------------------------------------------------------ r256081 | markm | 2013-10-06 10:55:28 +0100 (Sun, 06 Oct 2013) | 12 lines
SNAPSHOT.
Simplify the malloc pools; We only need one for this device.
Simplify the harvest queue.
Marginally improve the entropy pool hashing, making it a bit faster in the process.
Connect up the hardware "live" source harvesting. This is simplistic for now, and will need to be made rate-adaptive.
All of the above passes a compile test but needs to be debugged.
------------------------------------------------------------------------ r256042 | markm | 2013-10-04 07:55:06 +0100 (Fri, 04 Oct 2013) | 25 lines
Snapshot. This passes the build test, but has not yet been finished or debugged.
Contains:
* Refactor the hardware RNG CPU instruction sources to feed into the software mixer. This is unfinished. The actual harvesting needs to be sorted out. Modified by me (see below).
* Remove 'frac' parameter from random_harvest(). This was never used and adds extra code for no good reason.
* Remove device write entropy harvesting. This provided a weak attack vector, was not very good at bootstrapping the device. To follow will be a replacement explicit reseed knob.
* Separate out all the RANDOM_PURE sources into separate harvest entities. This adds some secuity in the case where more than one is present.
* Review all the code and fix anything obviously messy or inconsistent. Address som review concerns while I'm here, like rename the pseudo-rng to 'dummy'.
# Submitted by: Arthur Mesh <arthurmesh@gmail.com> (the first item)
------------------------------------------------------------------------ r255319 | markm | 2013-09-06 18:51:52 +0100 (Fri, 06 Sep 2013) | 4 lines
Yarrow wants entropy estimations to be conservative; the usual idea is that if you are certain you have N bits of entropy, you declare N/2.
------------------------------------------------------------------------ r255075 | markm | 2013-08-30 18:47:53 +0100 (Fri, 30 Aug 2013) | 4 lines
Remove short-lived idea; thread to harvest (eg) RDRAND enropy into the usual harvest queues. It was a nifty idea, but too heavyweight.
# Submitted by: Arthur Mesh <arthurmesh@gmail.com>
------------------------------------------------------------------------ r255071 | markm | 2013-08-30 12:42:57 +0100 (Fri, 30 Aug 2013) | 4 lines
Separate out the Software RNG entropy harvesting queue and thread into its own files.
# Submitted by: Arthur Mesh <arthurmesh@gmail.com>
------------------------------------------------------------------------ r254934 | markm | 2013-08-26 20:07:03 +0100 (Mon, 26 Aug 2013) | 2 lines
Remove the short-lived namei experiment.
------------------------------------------------------------------------ r254928 | markm | 2013-08-26 19:35:21 +0100 (Mon, 26 Aug 2013) | 2 lines
Snapshot; Do some running repairs on entropy harvesting. More needs to follow.
------------------------------------------------------------------------ r254927 | markm | 2013-08-26 19:29:51 +0100 (Mon, 26 Aug 2013) | 15 lines
Snapshot of current work;
1) Clean up namespace; only use "Yarrow" where it is Yarrow-specific or close enough to the Yarrow algorithm. For the rest use a neutral name.
2) Tidy up headers; put private stuff in private places. More could be done here.
3) Streamline the hashing/encryption; no need for a 256-bit counter; 128 bits will last for long enough.
There are bits of debug code lying around; these will be removed at a later stage.
------------------------------------------------------------------------ r254784 | markm | 2013-08-24 14:54:56 +0100 (Sat, 24 Aug 2013) | 39 lines
1) example (partially humorous random_adaptor, that I call "EXAMPLE") * It's not meant to be used in a real system, it's there to show how the basics of how to create interfaces for random_adaptors. Perhaps it should belong in a manual page
2) Move probe.c's functionality in to random_adaptors.c * rename random_ident_hardware() to random_adaptor_choose()
3) Introduce a new way to choose (or select) random_adaptors via tunable "rngs_want" It's a list of comma separated names of adaptors, ordered by preferences. I.e.: rngs_want="yarrow,rdrand"
Such setting would cause yarrow to be preferred to rdrand. If neither of them are available (or registered), then system will default to something reasonable (currently yarrow). If yarrow is not present, then we fall back to the adaptor that's first on the list of registered adaptors.
4) Introduce a way where RNGs can play a role of entropy source. This is mostly useful for HW rngs.
The way I envision this is that every HW RNG will use this functionality by default. Functionality to disable this is also present. I have an example of how to use this in random_adaptor_example.c (see modload event, and init function)
5) fix kern.random.adaptors from kern.random.adaptors: yarrowpanicblock to kern.random.adaptors: yarrow,panic,block
6) add kern.random.active_adaptor to indicate currently selected adaptor: root@freebsd04:~ # sysctl kern.random.active_adaptor kern.random.active_adaptor: yarrow
# Submitted by: Arthur Mesh <arthurmesh@gmail.com>
Submitted by: Dag-Erling Smørgrav <des@FreeBSD.org>, Arthur Mesh <arthurmesh@gmail.com> Reviewed by: des@FreeBSD.org Approved by: re (delphij) Approved by: secteam (des,delphij)
|
#
254100 |
|
08-Aug-2013 |
rstone |
Allow drivers to return BUS_PROBE_NOWILDCARD from their attach routine to match devices where the driver class was fixed but the unit number was wildcarded. This better matches the documented behaviour in DEVICE_PROBE(9).
Reviewed by: imp
|
#
253346 |
|
14-Jul-2013 |
rodrigc |
PR: 168520 170096 Submitted by: adrian, zec
Fix multiple kernel panics when VIMAGE is enabled in the kernel. These fixes are based on patches submitted by Adrian Chadd and Marko Zec.
(1) Set curthread->td_vnet to vnet0 in device_probe_and_attach() just before calling device_attach(). This fixes multiple VIMAGE related kernel panics when trying to attach Bluetooth or USB Ethernet devices because curthread->td_vnet is NULL.
(2) Set curthread->td_vnet in if_detach(). This fixes kernel panics when detaching networking interfaces, especially USB Ethernet devices.
(3) Use VNET_DOMAIN_SET() in ng_btsocket.c
(4) In ng_unref_node() set curthread->td_vnet. This fixes kernel panics when detaching Netgraph nodes.
|
#
252315 |
|
27-Jun-2013 |
jhb |
Make detaching drivers from PCI devices more robust. While here, fix a bug where a PCI device would be powered down if it failed to probe, but not when its driver was detached (e.g. via kldunload). - Add a new helper method resource_list_release_active() which forcefully releases any active resources of a specified type from a resource list. - Add a bus_child_detached method for the PCI bus driver which forces any active resources to be released (and whines to the console if it finds any) and then powers the device down. - Call pci_child_detached() if we fail to probe a device when a driver is kldloaded. This isn't perfect but can avoid leaking resources from a probe() routine in the kldload case.
Reviewed by: imp, brooks MFC after: 1 month
|
#
245845 |
|
23-Jan-2013 |
jhb |
Fix a typo.
|
#
241119 |
|
02-Oct-2012 |
eadler |
Provide a generic way to disable devices at boot time
PR: kern/119202 Requested by: peterj Reviewed by: sbruno, jhb Approved by: cperciva MFC after: 1 week
|
#
239512 |
|
21-Aug-2012 |
jhb |
Add a BUS_CHILD_DELETED() method that a bus can hook to allow it to cleanup any bus-specific state (such as ivars) when a child device is deleted.
Requested by: kan MFC after: 1 month
|
#
239299 |
|
15-Aug-2012 |
hselasky |
Revert r239178 and implement two new functions, namely "device_free_softc()" and "device_claim_softc()", to allow USB serial drivers refcounting the softc. These functions are used to grab the softc from auto-free and to free the softc back to the correct malloc type, respectivly.
Discussed with: jhb MFC after: 2 weeks
|
#
239178 |
|
10-Aug-2012 |
hselasky |
Add new device method to free the automatically allocated softc structure which is returned by device_get_softc(). This method can be used to easily implement softc refcounting. This can be desirable when the softc has memory references which are controlled by userspace handles for example.
This solves the problem of blocking the caller of device_detach() for a non-deterministic time.
Discussed with: kib, ed MFC after: 2 weeks
|
#
235978 |
|
25-May-2012 |
avg |
device_add_child: protect against child device with no driver but fixed unit number
This combination doesn't make sense, unit numbers should be hardwired only in context of a known driver. The wildcard devices should have wildcard unit numbers.
Reviewed by: jhb MFC after: 2 weeks
|
#
234152 |
|
11-Apr-2012 |
jhb |
Allow device_busy() and device_unbusy() to be invoked while a device is being attached. This is implemented by adding a new DS_ATTACHING state while a device's DEVICE_ATTACH() method is being invoked. A driver is required to not fail an attach of a busy device. The device's state will be promoted to DS_BUSY rather than DS_ACTIVE() if the device was marked busy during DEVICE_ATTACH().
Reviewed by: kib MFC after: 1 week
|
#
232265 |
|
28-Feb-2012 |
jhb |
Properly clear a device's devclass if DEVICE_ATTACH() fails if the device does not have a fixed devclass.
Reviewed by: imp MFC after: 2 weeks
|
#
232218 |
|
27-Feb-2012 |
jhb |
Clear the a device's description string anytime it's driver changes. Descriptions are specific to drivers and we don't change drivers on attached devices. This fixes a few places where we were not clearing the description when detaching a driver (e.g. with device_attach() failed). While here, fix a few other nits: - Remove spurious call to remove a device's driver from devclass_driver_deleted(). device_detach() removes it already. - Fix a typo.
|
#
230125 |
|
15-Jan-2012 |
eadler |
- Fix undefined behavior when device_get_name is null - Make error message more informative
PR: kern/149800 Submitted by: olgeni Approved by: cperciva MFC after: 1 week
|
#
228211 |
|
02-Dec-2011 |
marius |
It doesn't make much sense to check whether child is NULL after already having dereferenced it. We either should generally check the device_t's supplied to bus functions before using them (which we seem to virtually never do) or just assume that they are not NULL. While at it make this code fit 78 columns.
Found with: Coverity Prevent(tm) CID: 4230
|
#
228209 |
|
02-Dec-2011 |
marius |
- In device_probe_child(9) check the return value of device_set_driver(9) when actually setting a driver as especially ENOMEM is fatal in these cases. - Annotate other calls to device_set_devclass(9) and device_set_driver(9) without the return value being checked and that are okay to fail.
Reviewed by: yongari (slightly earlier version)
|
#
227849 |
|
22-Nov-2011 |
hselasky |
Rename device_delete_all_children() into device_delete_children().
Suggested by: jhb @ and marius @ MFC after: 1 week
|
#
227847 |
|
22-Nov-2011 |
hselasky |
Style change.
Suggested by: jhb @ and marius @ MFC after: 1 week
|
#
227701 |
|
19-Nov-2011 |
hselasky |
Move the device_delete_all_children() function from usb_util.c to kern/subr_bus.c. Simplify this function so that it no longer depends on malloc() to execute. Identify a few other places where it makes sense to use device_delete_all_children().
MFC after: 1 week
|
#
226175 |
|
09-Oct-2011 |
marius |
In device_get_children() avoid malloc(0) in order to increase portability to other operating systems.
PR: 154287
|
#
225617 |
|
16-Sep-2011 |
kmacy |
In order to maximize the re-usability of kernel code in user space this patch modifies makesyscalls.sh to prefix all of the non-compatibility calls (e.g. not linux_, freebsd32_) with sys_ and updates the kernel entry points and all places in the code that use them. It also fixes an additional name space collision between the kernel function psignal and the libc function of the same name by renaming the kernel psignal kern_psignal(). By introducing this change now we will ease future MFCs that change syscalls.
Reviewed by: rwatson Approved by: re (bz)
|
#
221231 |
|
29-Apr-2011 |
jhb |
Add a new bus method, BUS_ADJUST_RESOURCE() that is intended to be a wrapper around rman_adjust_resource(). Include a generic implementation, bus_generic_adjust_resource() which passes the request up to the parent bus. There is currently no default implementation. A bus_adjust_resource() wrapper is provided for use in drivers.
|
#
219819 |
|
21-Mar-2011 |
jeff |
- Merge changes to the base system to support OFED. These include a wider arg2 for sysctl, updates to vlan code, IFT_INFINIBAND, and other miscellaneous small features.
|
#
219135 |
|
01-Mar-2011 |
jhb |
Similar to 189574, properly handle subclasses of bus drivers when deleting a driver during kldunload. Specifically, recursively walk the tree of subclasses of a given driver attachment's bus device class detaching all instances of that driver for each class and its subclasses.
Reported by: bschmidt Reviewed by: imp MFC after: 1 week
|
#
217555 |
|
18-Jan-2011 |
mdf |
Specify a CTLTYPE_FOO so that a future sysctl(8) change does not need to rely on the format string.
|
#
216952 |
|
04-Jan-2011 |
kib |
Finish r210923, 210926. Mark some devices as eternal.
MFC after: 2 weeks
|
#
216112 |
|
02-Dec-2010 |
imp |
removed tag is '-', not '+'. remove extra return.
|
#
216070 |
|
30-Nov-2010 |
imp |
Remove redundant (and bogus) insertion of pnp info when announcing new and retiring devices. That's already inserted elsewhere.
Submitted by: n_hibma MFC after: 3 days
|
#
215443 |
|
17-Nov-2010 |
jhb |
Add a resource_list_reserved() method that returns true if a resource list entry contains a reserved resource.
|
#
212798 |
|
17-Sep-2010 |
imp |
By popular demand, kill all the non GIANT related interrupt messages. They are confusing and add little value.
Reviewed by: jhb@
|
#
212413 |
|
10-Sep-2010 |
avg |
bus_add_child: change type of order parameter to u_int
This reflects actual type used to store and compare child device orders. Change is mostly done via a Coccinelle (soon to be devel/coccinelle) semantic patch. Verified by LINT+modules kernel builds.
Followup to: r212213 MFC after: 10 days
|
#
212325 |
|
08-Sep-2010 |
avg |
subr_bus: use hexadecimal representation for bit flags
It seems that this format is more custom in our code, and it is more convenient too.
Suggested by: jhb No objection: imp MFC after: 1 week
|
#
212213 |
|
04-Sep-2010 |
avg |
struct device: widen type of flags and order fields to u_int
Also change int -> u_int for order parameter in device_add_child_ordered. There should not be any ABI change as struct device is private to subr_bus.c and the API change should be compatible.
To do: change int -> u_int for order parameter of bus_add_child method and its implementations. The change should also be API compatible, but is a bit more churn.
Suggested by: imp, jhb MFC after: 1 week
|
#
211232 |
|
12-Aug-2010 |
gibbs |
Properly indent a continue statement. No functional changes.
|
#
209390 |
|
21-Jun-2010 |
ed |
Use ISO C99 integer types in sys/kern where possible.
There are only about 100 occurences of the BSD-specific u_int*_t datatypes in sys/kern. The ISO C99 integer types are used here more often.
|
#
209104 |
|
12-Jun-2010 |
kib |
Add modifications of devctl_notify(9) functions that take flags. Use flags to specify M_WAITOK/M_NOWAIT. M_WAITOK allows devctl to sleep for the memory allocation.
As Warner noted, allowing the functions to sleep might cause reordering of the queued notifications.
Reviewed by: imp, jh MFC after: 3 weeks
|
#
208898 |
|
07-Jun-2010 |
mav |
Call BUS_PROBE_NOMATCH() when device detached due to driver unload. This allows bus to power-down device when driver unloaded on-flight.
|
#
206916 |
|
20-Apr-2010 |
imp |
Make sure that we free the passed in data message if we don't actually insert it onto the queue. Also, fix a mtx leak if someone turns off devctl while we're processing a messages.
MFC after: 5 days
|
#
203618 |
|
07-Feb-2010 |
gavin |
Spelling nit
|
#
201287 |
|
30-Dec-2009 |
jhb |
Actually set RLE_ALLOCATED when allocating a reserved resource so that resource_list_release() will later release the resource instead of failing.
|
#
201276 |
|
30-Dec-2009 |
jhb |
- Assert that a reserved resource returned via resource_list_alloc() is not active. - Fix bus_generic_rl_(alloc|release)_resource() to not attempt to fetch a resource list for grandchild devices, but just pass those requests up to the parent directly. This worked by accident previously, but it is better to not let bus drivers try to operate on devices they do not manage.
|
#
200315 |
|
09-Dec-2009 |
jhb |
For some buses, devices may have active resources assigned even though they are not allocated by the device driver. These resources should still appear allocated from the system's perspective so that their assigned ranges are not reused by other resource requests. The PCI bus driver has used a hack to effect this for a while now where it uses rman_set_device() to assign devices to the PCI bus when they are first encountered and later assigns them to the actual device when a driver allocates a BAR. A few downsides of this approach is that it results in somewhat confusing devinfo -r output as well as not being very easily portable to other bus drivers.
This commit adds generic support for "reserved" resources to the resource list API used by many bus drivers to manage the resources of child devices. A resource may be reserved via resource_list_reserve(). This will allocate the resource from the bus' parent without activating it. resource_list_alloc() recognizes an attempt to allocate a reserved resource. When this happens it activates the resource (if requested) and then returns the reserved resource. Similarly, when a reserved resource is released via resource_list_release(), it is deactivated (if it is active) and the resource is then marked reserved again, but is left allocated from the bus' parent. To completely remove a reserved resource, a bus driver may use resource_list_unreserve(). A bus driver may use resource_list_busy() to determine if a reserved resource is allocated by a child device or if it can be unreserved.
The PCI bus driver has been changed to use this framework instead of abusing rman_set_device() to keep track of reserved vs allocated resources.
Submitted by: imp (an older version many moons ago) MFC after: 1 month
|
#
199209 |
|
11-Nov-2009 |
attilio |
The building the dev nameunit string, in devclass_add_device() is based on the assumption that the unit linked with the device is invariant but that can change when calling devclass_alloc_unit() (because -1 is passed or, more simply, because the unit choosen is beyond the table limits). This results in a completely bogus string building.
Fix this by reserving the necessary room for all the possible characters printable by a positive integer (we do not allow for negative unit number).
Reported by: Sandvine Incorporated Reviewed by: emaste Sponsored by: Sandvine Incorporated MFC: 1 week
|
#
198411 |
|
23-Oct-2009 |
jhb |
- Fix several off-by-one errors when using MAXCOMLEN. The p_comm[] and td_name[] arrays are actually MAXCOMLEN + 1 in size and a few places that created shadow copies of these arrays were just using MAXCOMLEN. - Prefer using sizeof() of an array type to explicit constants for the array length in a few places. - Ensure that all of p_comm[] and td_name[] is always zero'd during execve() to guard against any possible information leaks. Previously trailing garbage in p_comm[] could be leaked to userland in ktrace record headers via td_name[].
Reviewed by: bde
|
#
198367 |
|
22-Oct-2009 |
jhb |
Set the devclass_t pointer specified in the DRIVER_MODULE() macro sooner so it is always valid when a driver's identify routine is called. Previously, new-bus would attempt to create the devclass for a newly loaded driver in two separate places, once in devclass_add_driver(), and again after devclass_add_driver() returned in driver_module_handler(). Only the second lookup attempted to set a device class' parent and set the devclass_t pointer specified in the DRIVER_MODULE() macro. However, by the time it was executed, the driver was already added to existing instances of the parent driver at which point in time the new driver's identify routine would have been invoked. The fix is to merge the two attempts and only create the devclass once in devclass_add_driver() including setting the devclass_t pointer passed to DRIVER_MODULE() before the driver is added to any existing bus devices.
Reported by: avg Reviewed by: imp MFC after: 2 weeks
|
#
198134 |
|
15-Oct-2009 |
jhb |
Add a facility for associating optional descriptions with active interrupt handlers. This is primarily intended as a way to allow devices that use multiple interrupts (e.g. MSI) to meaningfully distinguish the various interrupt handlers. - Add a new BUS_DESCRIBE_INTR() method to the bus interface to associate a description with an active interrupt handler setup by BUS_SETUP_INTR. It has a default method (bus_generic_describe_intr()) which simply passes the request up to the parent device. - Add a bus_describe_intr() wrapper around BUS_DESCRIBE_INTR() that supports printf(9) style formatting using var args. - Reserve MAXCOMLEN bytes in the intr_handler structure to hold the name of an interrupt handler and copy the name passed to intr_event_add_handler() into that buffer instead of just saving the pointer to the name. - Add a new intr_event_describe_handler() which appends a description string to an interrupt handler's name. - Implement support for interrupt descriptions on amd64 and i386 by having the nexus(4) driver supply a custom bus_describe_intr method that invokes a new intr_describe() MD routine which in turn looks up the associated interrupt event and invokes intr_event_describe_handler().
Requested by: many Reviewed by: scottl MFC after: 2 weeks
|
#
197462 |
|
24-Sep-2009 |
mav |
Do not call BUS_DRIVER_ADDED() for detached buses (attach failed) on driver load. This fixes crash on atapicam module load on systems, where some ata channels (usually ata1) was probed, but failed to attach.
Reviewed by: jhb, imp Tested by: many
|
#
197165 |
|
13-Sep-2009 |
attilio |
Revert r196779 in order to implement a different scheme for newbus locking methodology.
Requested by: imp
|
#
196779 |
|
03-Sep-2009 |
attilio |
Add intermediate states for attaching and detaching that will be reused by the enhached newbus locking once it is checked in. This change can be easilly MFCed to STABLE_8 at the appropriate moment.
Reviewed by: jhb, scottl Tested by: Giovanni Trematerra <giovanni dot trematerra at gmail dot com>
|
#
196529 |
|
25-Aug-2009 |
imp |
Rather than havnig enabled/disabled, implement a max queue depth. While usually not an issue, this firewalls bugs in the code that may run us out of memory.
Fix a memory exhaustion in the case where devctl was disabled, but the link was bouncing. The check to queue was in the wrong place.
Implement a new sysctl hw.bus.devctl_queue to control the depth. Make compatibility hacks for hw.bus.devctl_disable to ease transition.
Reviewed by: emaste@ Approved by: re@ (kib) MFC after: asap
|
#
196403 |
|
20-Aug-2009 |
jhb |
Temporarily revert the new-bus locking for 8.0 release. It will be reintroduced after HEAD is reopened for commits by re@.
Approved by: re (kib), attilio
|
#
196276 |
|
16-Aug-2009 |
ed |
Fix small style regression introduced by the MPSAFE newbus code.
Approved by: re (rwatson)
|
#
196037 |
|
02-Aug-2009 |
attilio |
Make the newbus subsystem Giant free by adding the new newbus sxlock. The newbus lock is responsible for protecting newbus internIal structures, device states and devclass flags. It is necessary to hold it when all such datas are accessed. For the other operations, softc locking should ensure enough protection to avoid races.
Newbus lock is automatically held when virtual operations on the device and bus are invoked when loading the driver or when the suspend/resume take place. For other 'spourious' operations trying to access/modify the newbus topology, newbus lock needs to be automatically acquired and dropped.
For the moment Giant is also acquired in some key point (modules subsystem) in order to avoid problems before the 8.0 release as module handlers could make assumptions about it. This Giant locking should go just after the release happens.
Please keep in mind that the public interface can be expanded in order to provide more support, if there are really necessities at some point and also some bugs could arise as long as the patch needs a bit of further testing.
Bump __FreeBSD_version in order to reflect the newbus lock introduction.
Reviewed by: ed, hps, jhb, imp, mav, scottl No answer by: ariff, thompsa, yongari Tested by: pho, G. Trematerra <giovanni dot trematerra at gmail dot com>, Brandon Gooch <jamesbrandongooch at gmail dot com> Sponsored by: Yahoo! Incorporated Approved by: re (ksmith)
|
#
193874 |
|
09-Jun-2009 |
imp |
We can actually remove devclass_find_driver.
|
#
193871 |
|
09-Jun-2009 |
imp |
As discussed on arch@, restire devclass_{add,delete,find,quiesce}_driver. They aren't needed or used and complicate locking newbus.
|
#
193833 |
|
09-Jun-2009 |
jhb |
Add support for multiple passes of the device tree during the boot-time probe. The current device order is unchanged. This commit just adds the infrastructure and ABI changes so that it is easier to merge later changes into 8.x. - Driver attachments now have an associated pass level. Attachments are not allowed to probe or attach to drivers until the system-wide pass level is >= the attachment's pass level. By default driver attachments use the "last" pass level (BUS_PASS_DEFAULT). Driver's that wish to probe during an earlier pass use EARLY_DRIVER_MODULE() instead of DRIVER_MODULE() which accepts the pass level as an additional parameter. - A new method BUS_NEW_PASS has been added to the bus interface. This method is invoked when the system-wide pass level is changed to kick off a rescan of the device tree so that drivers that have just been made "eligible" can probe and attach. - The bus_generic_new_pass() function provides a default implementation of BUS_NEW_PASS(). It first allows drivers that were just made eligible for this pass to identify new child devices. Then it propogates the rescan to child devices that already have an attached driver by invoking their BUS_NEW_PASS() method. It also reprobes devices without a driver. - BUS_PROBE_NOMATCH() is only invoked for devices that do not have an attached driver after being scanned during the final pass. - The bus_set_pass() function is used during boot to raise the pass level. Currently it is only called once during root_bus_configure() to raise the pass level to BUS_PASS_DEFAULT. This has the effect of probing all devices in a single pass identical to previous behavior.
Reviewed by: imp Approved by: re (kib)
|
#
192449 |
|
20-May-2009 |
jhb |
Fix a typo.
|
#
192443 |
|
20-May-2009 |
imp |
We no longer need to use d_thread_t for portability here, switch to struct thread *.
|
#
190417 |
|
25-Mar-2009 |
jhb |
When looking up the parent devclass of a new devclass, create the parent devclass if it doesn't already exist.
|
#
190305 |
|
22-Mar-2009 |
kan |
Add safety check that does not allow empty strings to be queued to the devctl notification queue. Empty strings cause devctl read call to return 0 and result in devd exiting prematurely.
The actual offender (ugen notes for root hubs) will be fixed by separate commit.
|
#
189684 |
|
11-Mar-2009 |
imp |
Minor nits notice by jhb@
|
#
189574 |
|
09-Mar-2009 |
imp |
Fix a long-standing bug in newbus. It was introduced when subclassing was introduced. If you have a bus, say cardbus, that is derived from a base-bus (say PCI), then ordinarily all PCI drivers would attach to cardbus devices. However, there had been one exception: kldload wouldn't work.
The problem is in devclass_add_driver. In this routine, all we did was call to the pci device's BUS_DRIVER_ADDED routine. However, since cardbus bus instances had a different devclass, none of them were called.
The solution is to call all subclass devclasses, recursively down the tree, of the class that was loaded. Since we don't have a 'children class' pointer, we search the whole list of devclasses for a class whose parent matches. Since just done a kldload time, this isn't as bad as it sounds. In addition, we short-circuit the whole process by marking those classes with subclasses with a flag. We'll likely have to reevaluate this method the number of devclasses with subclasses gets large.
This means we can remove the "cardbus" lines from all the PCI drivers since we have no cardbus specific attach device attachments in the tree.
# Also: minor tweak to an error message
|
#
188476 |
|
11-Feb-2009 |
imp |
o Use NULL in pereference to 0 in pointer contexts. o Use newly minted KOBJMETHOD_END as appropriate o fix prototype for root_setup_intr.
|
#
188464 |
|
10-Feb-2009 |
mav |
Check for device_set_devclass() errors and skip driver probe/attach if any. Attach call without devclass set crashes the system.
On resume AHCI driver sometimes tries to create duplicate adX device. It is surely his own problem, but IMHO it is not a reason to crash here. Other reasons are also possible.
|
#
188037 |
|
02-Feb-2009 |
imp |
Declare bus_data_devices to be static: it isn't used elsewhere. Use NULL in a couple of places rather than 0 in the context of pointers to be consistent with the rest of the file.
|
#
185059 |
|
18-Nov-2008 |
jhb |
Allow device hints to wire the unit numbers of devices. - An "at" hint now reserves a device name. - A new BUS_HINT_DEVICE_UNIT method is added to the bus interface. When determining the unit number of a device, this method is invoked to let the bus driver specify the unit of a device given a specific devclass. This is the only way a device can be given a name reserved via an "at" hint. - Implement BUS_HINT_DEVICE_UNIT() for the acpi(4) and isa(4) bus drivers. Both of these busses implement this by comparing the resources for a given hint device with the resources enumerated by ACPI/PnPBIOS and wire a unit if the hint resources are a subset of the "real" resources. - Use bus_hinted_children() for adding hinted devices on isa(4) busses now instead of doing it by hand. - Remove the unit kludging from sio(4) as it is no longer necessary.
Prodding from: peter, imp OK'd by: marcel MFC after: 1 month
|
#
184942 |
|
13-Nov-2008 |
n_hibma |
Silence detach messages if the device has marked itself quiet (u3g).
MFC after: 3 weeks
|
#
183750 |
|
10-Oct-2008 |
imp |
Close, but not eliminate, a race condition. It is one that properly designed drivers would never hit, but was exposed in diving into another problem...
When expanding the devclass array, free the old memory after updating the pointer to the new memory. For the following single race case, this helps:
allocate new memory copy to new memory free old memory <interrupt> read pointer to freed memory update pointer to new memory
Now we do allocate new memory copy to new memory update pointer to new memory free old memory
Which closes this problem, but doesn't even begin to address the multicpu races, which all should be covered by Giant at the moment, but likely aren't completely.
Note: reviewers were ok with this fix, but suggested the use case wasn't one we wanted to encourage.
Reviewed by: jhb, scottl.
|
#
179893 |
|
20-Jun-2008 |
imp |
Split out the probing magic of device_probe_and_attach into device_probe() so that it can be used by busses that may wish to do additional processing between probe and attach.
Reviewed by: dfr@
|
#
179087 |
|
18-May-2008 |
rpaulo |
devctl_process_running(): Check for devsoftc.inuse == 1 instead of devsoftc.async_proc != NULL because the latter might not be true sometimes. This way /etc/rc.suspend gets executed.
Reviwed by: njl Submitted by: Mitsuru IWASAKI <iwasaki at jp.FreeBSD.org> Tested also by: Andreas Wetzel <mickey242 at gmx.net> MFC after: 1 week
|
#
177467 |
|
20-Mar-2008 |
jhb |
Implement a BUS_BIND_INTR() method in the bus interface to bind an IRQ resource to a CPU. The default method is to pass the request up to the parent similar to BUS_CONFIG_INTR() so that all busses don't have to explicitly implement bus_bind_intr. A bus_bind_intr(9) wrapper routine similar to bus_setup/teardown_intr() is added for device drivers to use. Unbinding an interrupt is done by binding it to NOCPU. The IRQ resource must be allocated, but it can happen in any order with respect to bus_setup_intr(). Currently it is only supported on amd64 and i386 via nexus(4) methods that simply call the intr_bind() routine.
Tested by: gallatin
|
#
177008 |
|
09-Mar-2008 |
imp |
Tiny bit of KNF to make bus_setup_intr() look like the rest of this function.
|
#
176965 |
|
09-Mar-2008 |
imp |
Any driver that relies on its parent to set the devclass has no way to know if has siblings that need an actual probe. Introduce a specail return value called BUS_PROBE_NOOWILDCARD. If the driver returns this, the probe is only successful for devices that have had a specific devclass set for them.
Reviewed by: current@, jhb@, grehan@
|
#
175726 |
|
27-Jan-2008 |
iwasaki |
Add devctl_process_running() so that power management system driver can check whether devd(8) is running.
MFC after: 1 week
|
#
174794 |
|
19-Dec-2007 |
imp |
When devclass_get_maxunit is passed a NULL, return -1 to indicate that there's nothing allocated at all yet.
|
#
174114 |
|
30-Nov-2007 |
peter |
Deal with the possibility of device_set_unit() being called when attaching the associated devinfo sysctl tree.
|
#
171613 |
|
27-Jul-2007 |
rwatson |
First in a series of changes to remove the now-unused Giant compatibility framework for non-MPSAFE network protocols:
- Remove debug_mpsafenet variable, sysctl, and tunable. - Remove NET_NEEDS_GIANT() and associate SYSINITSs used by it to force debug.mpsafenet=0 if non-MPSAFE protocols are compiled into the kernel. - Remove logic to automatically flag interrupt handlers as non-MPSAFE if debug.mpsafenet is set for an INTR_TYPE_NET handler. - Remove logic to automatically flag netisr handlers as non-MPSAFE if debug.mpsafenet is set. - Remove references in a few subsystems, including NFS and Cronyx drivers, which keyed off debug_mpsafenet to determine various aspects of their own locking behavior. - Convert NET_LOCK_GIANT(), NET_UNLOCK_GIANT(), and NET_ASSERT_GIANT into no-op's, as their entire behavior was determined by the value in debug_mpsafenet. - Alias NET_CALLOUT_MPSAFE to CALLOUT_MPSAFE.
Many remaining references to NET_.*_GIANT() and NET_CALLOUT_MPSAFE are still present in subsystems, and will be removed in followup commits.
Reviewed by: bz, jhb Approved by: re (kensmith)
|
#
169908 |
|
23-May-2007 |
sam |
fix comment typo
|
#
167027 |
|
26-Feb-2007 |
jhb |
Use NULL rather than 0 for various pointer constants.
|
#
166901 |
|
23-Feb-2007 |
piso |
o break newbus api: add a new argument of type driver_filter_t to bus_setup_intr()
o add an int return code to all fast handlers
o retire INTR_FAST/IH_FAST
For more info: http://docs.freebsd.org/cgi/getmsg.cgi?fetch=465712+0+current/freebsd-current
Reviewed by: many Approved by: re@
|
#
162227 |
|
11-Sep-2006 |
jhb |
Add a default method for BUS_ADD_CHILD() that just calls device_add_child_ordered(). Previously, a device driver that wanted to add a new child device in its identify routine had to know if the parent driver had a custom bus_add_child method and use BUS_ADD_CHILD() in that case, otherwise use device_add_child(). Getting it wrong in either direction would result in panics or failure to add the child device. Now, BUS_ADD_CHILD() always works isolating child drivers from having to know intimate details about the parent driver.
Discussed with: imp MFC after: 1 week
|
#
161928 |
|
02-Sep-2006 |
jmg |
add a newbus method for obtaining the bus's bus_dma_tag_t... This is required by arches like sparc64 (not yet implemented) and sun4v where there are seperate IOMMU's for each PCI bus... For all other arches, it will end up returning NULL, which makes it a no-op...
Convert a few drivers (the ones we've been working w/ on sun4v) to the new convection... Eventually all drivers will need to replace the parent tag of NULL, w/ bus_get_dma_tag(dev), though dev is usually different for each driver, and will require hand inspection...
Reviewed by: scottl (earlier version)
|
#
160964 |
|
04-Aug-2006 |
yar |
Commit the results of the typo hunt by Darren Pilgrim. This change affects documentation and comments only, no real code involved.
PR: misc/101245 Submitted by: Darren Pilgrim <darren pilgrim bitfreak org> Tested by: md5(1) MFC after: 1 week
|
#
160186 |
|
08-Jul-2006 |
imp |
Create bus_enumerate_hinted_children. This routine will allow drivers to use the hinted child system. Bus drivers that use this need to implmenet the bus_hinted_child method, where they actually add the child to their bus, as they see fit. The bus is repsonsible for getting the attribtues for the child, adding it in the right order, etc. ISA hinting will be updated to use this method.
MFC After: 3 days
|
#
159842 |
|
21-Jun-2006 |
jhb |
Whoops, revert accidental commit.
|
#
159841 |
|
21-Jun-2006 |
jhb |
Fix two comments and a style fix.
|
#
157888 |
|
19-Apr-2006 |
jmg |
const'ify resource_spec to note that we won't be changing anything while releasing resources... also, NULL out the resources as we free them...
|
#
154662 |
|
21-Jan-2006 |
njl |
Add a devd(8) event that is sent after the system resumes. This can be used by utilities to reset moused(8), for example. The syntax is:
!system=kern subsystem=power type=resume
Note that it would be nice to have notification of suspend, but it's more difficult since there would have to be a method of doing request/ack to userland and automatically timing out if no response. apm(4) has a similar mechanism.
MFC after: 2 weeks
|
#
154598 |
|
20-Jan-2006 |
jhb |
When loading a driver that is a subclass of another driver don't set the devclass's parent pointer if the two drivers share the same devclass. This can happen if the drivers use the same new-bus name. For example, we currently have 3 drivers that use the name "pci": the generic PCI bus driver, the ACPI PCI bus driver, and the OpenFirmware PCI bus driver. If the ACPI PCI bus driver was defined as a subclass of the generic PCI bus driver, then without this check the "pci" devclass would point to itself as its parent and device_probe_child() would spin forever when it encountered the first PCI device that did have a matching driver.
Reviewed by: dfr, imp, new-bus@
|
#
154342 |
|
14-Jan-2006 |
phk |
Correct STAILQ usage in purge of resourcelist.
Found with: Coverity Prevent(tm)
|
#
150950 |
|
04-Oct-2005 |
imp |
When data passed into devctl_notify is NULL, don't print (null). Instead don't print anything at all.
# this fixes a problem that I noticed with devd.pipe not terminating lines # with \n correctly sometimes.
|
#
150521 |
|
24-Sep-2005 |
phk |
Add two convenience functions for device drivers: bus_alloc_resources() and bus_free_resources(). These functions take a list of resources and handle them all in one go. A flag makes it possible to mark a resource as optional.
A typical device driver can save 10-30 lines of code by using these.
Usage examples will follow RSN.
MFC: A good idea, eventually.
|
#
150265 |
|
17-Sep-2005 |
imp |
MFp4: Expose device_probe_child()
|
#
147156 |
|
09-Jun-2005 |
imp |
Simplify the code a bit after the bzero().
|
#
146432 |
|
20-May-2005 |
njl |
Document that the returned pointer should be freed even if the number of items returned is 0.
|
#
145953 |
|
06-May-2005 |
cperciva |
If we are going to 1. Copy a NULL-terminated string into a fixed-length buffer, and 2. copyout that buffer to userland, we really ought to 0. Zero the entire buffer first.
Security: FreeBSD-SA-05:08.kmem
|
#
144952 |
|
12-Apr-2005 |
imp |
resource_list_purge: release the resources in this list, and purge the elements of this list (eg, reset it).
Man page to follow
|
#
144926 |
|
12-Apr-2005 |
imp |
Return the resource created/found in resource_list_add to avoid an extra resouce_list_find in some places.
Suggested by: sam Found by: Coventry Analysis tool.
|
#
144628 |
|
04-Apr-2005 |
njl |
Document that devclass_get_maxunit(9) returns one greater than the current highest unit.
Reviewed by: dfr MFC after: 2 weeks
|
#
144626 |
|
04-Apr-2005 |
njl |
Add devclass_get_drivers(9) which provides an array of pointers to driver instances in a given devclass. This is useful for systems that want to call code in driver static methods, similar to device_identify().
Reviewed by: dfr MFC after: 2 weeks
|
#
144609 |
|
03-Apr-2005 |
njl |
maxunit is actually one higher than the greatest currently-allocated unit in a devclass. All the other uses of maxunit are correct and this one was safe since it checks the return value of devclass_get_device(), which would always say that the highest unit device doesn't exist.
Reviewed by: dfr MFC after: 3 days
|
#
144443 |
|
31-Mar-2005 |
jhb |
- Denote a few places where kobj class references are manipulated without holding the appropriate lock. - Add a comment explaining why we bump a driver's kobj class reference when loading a module.
|
#
144071 |
|
24-Mar-2005 |
phk |
Move implementation of hw.bus.rman sysctl to subr_rman.c so that subr_bus.c doesn't need to peek inside struct resource.
OK from: imp
|
#
143785 |
|
18-Mar-2005 |
imp |
Use STAILQ in preference to SLIST for the resources. Insert new resources last in the list rather than first.
This makes the resouces print in the 4.x order rather than the 5.x order (eg fdc0 at 0x3f0-0x3f5,0x3f7 is 4.x, but 0x3f7,0x3f0-0x3f5 is 5.x). This also means that the pci code will once again print the resources in BAR ascending order.
|
#
142705 |
|
27-Feb-2005 |
phk |
Use dynamic major number allocation.
|
#
142272 |
|
22-Feb-2005 |
sam |
kill dead code
Noticed by: Coverity Prevent analysis tool
|
#
141532 |
|
08-Feb-2005 |
njl |
Maxunit is inclusive so fix off-by-one in previous commit.
|
#
141531 |
|
08-Feb-2005 |
njl |
Update device_find_child(9) to return the first matching child if unit is set to -1.
Reviewed by: dfr, imp
|
#
140985 |
|
29-Jan-2005 |
rwatson |
Correct a minr whitespace inconsistency introduced in revision 1.159: add a tab between #define and DF_REBID instead of a space.
|
#
140466 |
|
19-Jan-2005 |
imp |
Introduce bus_free_resource. It is a convenience function which wraps bus_release_resource by grabbing the rid from the resource.
|
#
139507 |
|
31-Dec-2004 |
imp |
Implement device_quiesce. This method means 'you are about to be unloaded, cleanup, or return ebusy of that's inconvenient.' The default module hanlder for newbus will now call this when we get a MOD_QUIESCE event, but in the future may call this at other times.
This shouldn't change any actual behavior until drivers start to use it.
|
#
138533 |
|
08-Dec-2004 |
njl |
Add the devclass_get_count(9) function and man page. It gets a count of the number of devices in a devclass and is a subset of devclass_get_devices(9).
Reviewed by: imp, dfr
|
#
138402 |
|
05-Dec-2004 |
obrien |
When panicing in device_unbusy(), actually tell what device has the issue.
|
#
138384 |
|
05-Dec-2004 |
imp |
Start to add GIANT_REQUIRED; macros in places where giant is required and that I've verified things seem to basically work. I was able to boot and hot plug usb devices. Please let me know if this causes problems for anybody.
The push down of giant has proceeded to the point that this will start to matter more and more.
|
#
137147 |
|
03-Nov-2004 |
phk |
Don't print the singularly unhelpful message:
unknown: not probled (disabled)
During verbose boot.
|
#
136513 |
|
14-Oct-2004 |
njl |
Update flags patch for the !ISA case.
* Get flags first, in case there is no devclass. * Reset flags after each probe in case the next driver has no hints so it doesn't inherit the old ones. * Set them again before the winning probe.
Tested ok both with and without ACPI for ISA device flags.
Reviewed by: imp MFC after: 1 day
|
#
136473 |
|
13-Oct-2004 |
njl |
Set flags for devices before probing them. In the non-ISA case, flags set via hints were not getting passed to the child.
PR: kern/72489 MFC after: 1 day
|
#
134512 |
|
30-Aug-2004 |
imp |
Fix BUS_DEBUG case
|
#
134490 |
|
29-Aug-2004 |
imp |
Initial support (disabled) for rebidding devices. I've been running this in my tree for a while and in its disabled state there are no issues. It isn't enabled yet because some drivers (in acpi) have side effects in their probe routines that need to be resolved in some manner before this can be turned on. The consensus at the last developer's summit was to provide a static method for each driver class that will return characteristics of the driver, one of which is if can be reprobed idempotently.
|
#
134489 |
|
29-Aug-2004 |
imp |
MFp4: Merge in the patches, submitted long ago by someone whose email address I've lost, that move the location information to the atttach routine as well. While one could use devinfo to get this data, that is difficult and error prone and subject to races for short lived devices.
Would make a good MT5 candidate.
|
#
134239 |
|
24-Aug-2004 |
imp |
Set the description to NULL in the right detach routine. This should keep dangling pointers to strings in loaded modules from hanging around after the drivers are unloaded.
|
#
132354 |
|
18-Jul-2004 |
dfr |
Add doxygen doc comments for most of newbus and the BUS interface.
|
#
132199 |
|
15-Jul-2004 |
phk |
Do a pass over all modules in the kernel and make them return EOPNOTSUPP for unknown events.
A number of modules return EINVAL in this instance, and I have left those alone for now and instead taught MOD_QUIESCE to accept this as "didn't do anything".
|
#
131344 |
|
30-Jun-2004 |
imp |
Hide struct resource and struct rman. You must define __RMAN_RESOURCE_VISIBLE to see inside these now.
Reviewed by: dfr, njl (not njr)
|
#
131304 |
|
30-Jun-2004 |
imp |
Include more information about the device in the devadded and devremoved events. This reduces the races around these events. We now include the pnp info in both. This lets one do more interesting thigns with devd on device insertion.
Submitted by: Bernd Walter
|
#
131222 |
|
28-Jun-2004 |
imp |
Turns out that jhb didn't really like this. And nate pointed out that it wasn't a good idea to have the test for NULL on only a limited subset. Go back because I'm not sure adding NULL to all the others is a good idea.
|
#
131217 |
|
28-Jun-2004 |
imp |
Allow dev to be NULL and assume that a device is not alive or not attached.
Reviewed by: njl(?) and jhb
|
#
130585 |
|
16-Jun-2004 |
phk |
Do the dreaded s/dev_t/struct cdev */ Bump __FreeBSD_version accordingly.
|
#
130121 |
|
05-Jun-2004 |
mux |
When we don't have any meaningful value to print for the device sysctl tree, output an empty string instead of "?". This is already what happened with DEVICE_SYSCTL_LOCATION and DEVICE_SYSCTL_PNPINFO. This makes the output of "sysctl dev" much nicer (it won't display those empty sysctls).
Reviewed by: des
|
#
130063 |
|
04-Jun-2004 |
des |
Add a devclass level to the dev sysctl tree, in order to support per- class variables in addition to per-device variables. In plain English, this means that dev.foo0.bar is now called dev.foo.0.bar, and it is possible to to have dev.foo.bar as well.
|
#
130018 |
|
02-Jun-2004 |
mux |
As discussed on arch@, flatten the device sysctl tree to make it more convenient to deal with. The notion of hierarchy is however preserved by adding a new %parent node.
|
#
129753 |
|
26-May-2004 |
pjd |
Sysctl hw.bus.devctl_disable shouldn't be writtable from inside a jail.
Approved by: imp
|
#
129711 |
|
25-May-2004 |
des |
As previously threatened, give each device its own sysctl context and subtree (under the new dev top-level node). This should greatly simplify drivers which need per-device sysctl variables (such as ndis).
|
#
127702 |
|
01-Apr-2004 |
scottl |
Don't print out 'GIANT-LOCKED' for INTR_FAST drivers.
|
#
127375 |
|
24-Mar-2004 |
imp |
Conform to local file sytle and prefer (a && (b & flag)).
|
#
127324 |
|
22-Mar-2004 |
obrien |
Change the !MPSAFE boot string to something that doesn't potentially scare users that the kernel won't run on MP systems.
|
#
127319 |
|
22-Mar-2004 |
obrien |
Rather than display which interrupts are MPSAFE, display those that aren't. This way we can take stock of the work to be done. boot -v will note those interrupts that are MPSAFE.
|
#
126198 |
|
24-Feb-2004 |
des |
Whitespace cleanup
|
#
126080 |
|
21-Feb-2004 |
phk |
Device megapatch 4/6:
Introduce d_version field in struct cdevsw, this must always be initialized to D_VERSION.
Flip sense of D_NOGIANT flag to D_NEEDGIANT, this involves removing four D_NOGIANT flags and adding 145 D_NEEDGIANT flags.
|
#
122152 |
|
05-Nov-2003 |
sam |
o make debug_mpsafenet globally visible o move it from subr_bus.c to netisr.c where it more properly belongs o add NET_PICKUP_GIANT and NET_DROP_GIANT macros that will be used to grab Giant as needed when MPSAFE operation is enabled
Supported by: FreeBSD Foundation
|
#
122096 |
|
05-Nov-2003 |
imp |
Minor style(9) nit
|
#
122020 |
|
04-Nov-2003 |
sam |
disable MPSAFE network drivers; we aren't ready yet`
|
#
121696 |
|
29-Oct-2003 |
sam |
Add a temporary mechanism to disble INTR_MPSAFE from network interface drivers. This is prepatory to running more parts of the network system w/o Giant.
|
#
121489 |
|
24-Oct-2003 |
imp |
Convenience functions to generate notifications from the kernel. The ACPI code will start using these shortly.
Reviewed by: njl
|
#
121129 |
|
16-Oct-2003 |
dfr |
* Add multiple inheritance to kobj. Each class can have zero or more base classes and if a method is not found in a given class, its base classes are searched (in the order they were declared). This search is recursive, i.e. a method may be define in a base class of a base class. * Change the kobj method lookup algorithm to one which is SMP-safe. This relies only on the constraint that an observer of a sequence of writes of pointer-sized values will see exactly one of those values, not a mixture of two or more values. This assumption holds for all processors which FreeBSD supports. * Add locking to kobj class initialisation. * Add a simpler form of 'inheritance' for devclasses. Each devclass can have a parent devclass. Searches for drivers continue up the chain of devclasses until either a matching driver is found or a devclass is reached which has no parent. This can allow, for instance, pci drivers to match cardbus devices (assuming that cardbus declares pci as its parent devclass). * Increment __FreeBSD_version.
This preserves the driver API entirely except for one minor feature used by the ISA compatibility shims. A workaround for ISA compatibility will be committed separately. The kobj and newbus ABI has changed - all modules must be recompiled.
|
#
121082 |
|
14-Oct-2003 |
imp |
With DIAGNOSTICS, sometimes we get weird crashes when some driver accesses softc after it is freed. Use a different malloc type for softc than the rest of the bus code to make it more clear when these things happen that it is the driver that's at fault, not the bus code.
Suggested by: sam and/or phk (I think)
|
#
119967 |
|
10-Sep-2003 |
marcel |
Introduce BUS_CONFIG_INTR(). The method allows devices to tell parents about interrupt trigger mode and interrupt polarity. This allows ACPI for example to pass interrupt resource information up the hierarchy. The default implementation of the method therefore is to pass the request to the parent.
Reviewed by: jhb, njl
|
#
119788 |
|
05-Sep-2003 |
sam |
Print a message at boot for interrupt handlers created with INTR_MPSAFE and/or INTR_FAST. This belongs elsehwere and perhaps under bootverbose; I'm committing it for now as it's uesful to know which drivers have been converted and which have not.
|
#
116182 |
|
10-Jun-2003 |
obrien |
Use __FBSDID().
|
#
114293 |
|
30-Apr-2003 |
markm |
Fix some easy, global, lint warnings. In most cases, this means making some local variables static. In a couple of cases, this means removing an unused variable.
|
#
113808 |
|
21-Apr-2003 |
imp |
Create a new function, device_is_attached(), that is like device_is_alive() that tells us if the device has successfully attached. device_is_alive just tells us that the device has successfully probed.
|
#
113789 |
|
21-Apr-2003 |
imp |
Fix /dev/devctl's implementation of poll. We should only be setting the poll bits when there's actually something in the queue. Otherwise, select always returned '2' when there were no items to be read, and '3' when there were. This would preclude being able to read in a threaded (libc_r) program, as well as checking to see if there were pending events or not.
|
#
112990 |
|
02-Apr-2003 |
jhb |
Lock the process before sending it a SIGIO. Not doing so is a panic(2) implementation with INVARIANTS.
|
#
112176 |
|
13-Mar-2003 |
alfred |
Make sure we actually have a dev before dereferencing in case someone botches and sends us a NULL pointer. The other code in this file seems to expect it to be able to handle it behaving this way.
|
#
111815 |
|
03-Mar-2003 |
phk |
Gigacommit to improve device-driver source compatibility between branches:
Initialize struct cdevsw using C99 sparse initializtion and remove all initializations to default values.
This patch is automatically generated and has been tested by compiling LINT with all the fields in struct cdevsw in reverse order on alpha, sparc64 and i386.
Approved by: re(scottl)
|
#
109505 |
|
18-Jan-2003 |
imp |
Fix comment about what we do when there are no listeners.
|
#
109306 |
|
15-Jan-2003 |
davidxu |
Don't forget to disconnect object from class.
|
#
109064 |
|
10-Jan-2003 |
davidxu |
Don't record thread pointer, it's not permanent in process life cycle, use process pointer instead.
|
#
108533 |
|
01-Jan-2003 |
schweikh |
Correct typos, mostly s/ a / an / where appropriate. Some whitespace cleanup, especially in troff files.
|
#
108526 |
|
01-Jan-2003 |
imp |
Use 0600 for permissions for /dev/devctl until it is cloneable. Use UID_ROOT and GID_WHEEL rather than 0.
Prompted by: rwatson
|
#
107398 |
|
29-Nov-2002 |
imp |
devd kernel improvements: 1) Record all device events when devctl is enabled, rather than just when devd has devctl open. This is necessary to prevent races between when a device arrives, and when devd starts. 2) Add hw.bus.devctl_disable to disable devctl, this can also be set as a tunable. 3) Fix async support. Reset nonblocking and async_td in open. remove async flags. 4) Free all memory when devctl is disabled.
Approved by: re (blanket)
|
#
106596 |
|
07-Nov-2002 |
jhb |
Use %z to quiet a warning.
|
#
105166 |
|
15-Oct-2002 |
phk |
Use ; not , as statement separator in PDEBUG() macro.
Ignoring a NULL dev in device_set_ivars() sounds wrong, KASSERT it to non-NULL instead.
Do the same for device_get_ivars() for reasons of symmetry, though it probably would have yielded a panic anyway, this gives more precise diagnostics.
Absentmindedly nodded OK to by: jhb
|
#
104644 |
|
07-Oct-2002 |
imp |
Introducing /dev/devctl. This device reports events in the configuration device hierarchy. Device arrival, departure and not matched are presently reported. This will be the basis for devd, which I still need to polish a little more before I commit it. If you don't use /dev/devctl, it will be a noop.
|
#
104643 |
|
07-Oct-2002 |
imp |
Two minor bugfixes: o Allow the bus_debug variable to be set via the bus.debug tunable. o Return pnpinfo and location info via the devinfo interface to userland. devinfo(8) needs to be updated to print it.
|
#
104608 |
|
07-Oct-2002 |
imp |
Add wrappers around the newly created bus_child_pnpinfo_str and bus_child_location_str.
|
#
104605 |
|
07-Oct-2002 |
imp |
Minor string handling cleanup that I've had in my tree for a while:
Don't use snprintf where strlcpy() will do the job. Also, a NUL is '\0' not 0 in our style (C doesn't care), so spell it like. Remove useless {} and () in the general area of this change.
|
#
104603 |
|
07-Oct-2002 |
imp |
Don't need to NUL terminate after snprintf
|
#
104365 |
|
02-Oct-2002 |
phk |
Absorb <sys/bus_private.h> into kern/subr_bus.c to prevent misunderstandings.
Suggested by: bde Approved by: dfr
|
#
104115 |
|
28-Sep-2002 |
phk |
Move includ of <sys/bus_priate.h> later to get semantic identity of device_t the same throughout kernel.
This is a very fine point of C which fortunatly does not make any difference in normal circumstances but which due to the pervasiveness of device_t in the kernel can make a lint barf a lot.
|
#
103329 |
|
14-Sep-2002 |
imp |
Add additional information returned to userland by the device querying functions. We add pnpinfo, locationinfo, devflags (the newbus flags on the device), flags (the flags that device_get_flags returns) and state to the list of things we return.
pnpinfo and locationinfo are place holders at the moment that will be filled in by the device's parent (optionally). Userland programs will likely use this information from time to time and take appropriate actions.
Improvements to devinfo to follow.
|
#
103247 |
|
12-Sep-2002 |
bde |
Fixed style bugs in resource_list_add_next().
|
#
103215 |
|
11-Sep-2002 |
bde |
Include <vm/uma.h> instead of depending on namespace pollution in <sys/malloc.h>.
Sorted includes as much as possible. Removed banal comment(s) attached to includes.
|
#
100421 |
|
21-Jul-2002 |
imp |
Add bus_child_present and the child_present method to bus_if.m
|
#
95316 |
|
23-Apr-2002 |
phk |
Don't call malloc(9) to allocate zero bytes softc data for devices.
|
#
93365 |
|
29-Mar-2002 |
mdodd |
Add resource_list_add_next() which returns the RID for the resource added.
|
#
91739 |
|
06-Mar-2002 |
bde |
Don't (blindly) truncate the unit number to 4 digits when formatting the string returned by device_get_nameunit().
|
#
91308 |
|
26-Feb-2002 |
bde |
Fixed 3 regressions in rev.1.99 (clobbering of the English fix in rev.1.98, and 2 unformattings).
|
#
91298 |
|
26-Feb-2002 |
sos |
Hide "bla bla exists, skipping it" behind bootverbose.
|
#
88585 |
|
28-Dec-2001 |
bde |
Fixed an apparent typo ("-" before ":") and an English error (comma splice) in the "already exists" message.
Fixed some minor style bugs (KNFization to "return (foo)" had rotted in 2 out of 177 cases).
|
#
88373 |
|
21-Dec-2001 |
tmm |
Add a generic __BUS_ACCESSOR macro to construct ivar accessor functions, and a generic resource_list_print_type() function to print all resouces of a certain type in a resource list. Use ulmin()/ulmax() instead of min()/max() in two places to handle u_longs correctly.
|
#
87594 |
|
10-Dec-2001 |
obrien |
Update to C99, s/__FUNCTION__/__func__/.
|
#
86114 |
|
05-Nov-2001 |
arr |
o No need to set values to 0 when we utilize M_ZERO
Approved by: peter
|
#
85887 |
|
02-Nov-2001 |
imp |
Don't hide the failure to allocate device behind boot verbose. It is still telling us of real problems so should remain until it stops doing that.
Submitted by: OGAWA Takaya <t-ogawa@triaez.kaisei.org>
|
#
85800 |
|
01-Nov-2001 |
ache |
Add new interface function int devclass_find_free_unit(devclass_t dc, int unit); which return first free unit in given class starting from 'unit'.
|
#
85646 |
|
28-Oct-2001 |
ache |
1) In devclass_alloc_unit(), skip duplicated wired devices (i.e. with fixed number) instead of allocating next free unit for them. If someone needs fixed place, he must specify it correctly. "Allocating next" is especially bad because leads to double device detection and to "repeat make_dev panic" as result. This can happens if the same devices present somewhere on PCI bus, hints and ACPI. Making them present in one place only not always possible, "sc" f.e. can't be removed from hints, it results to no console at all.
2) In make_device(), detect when devclass_add_device() fails, free dev and return. I.e. add missing error checking. This part needed to finish fix in 1), but must be done this way in anycase, with old variant too.
|
#
79709 |
|
14-Jul-2001 |
peter |
Move the hints gunk to a seperate file. It isn't really part of the newbus structure (no more than subr_rman.c is anyway).
|
#
79696 |
|
13-Jul-2001 |
peter |
Go back to having either static OR dynamic hints, with fallback support. Trying to fix the merged set where dynamic overrode static was getting more and more complicated by the day.
This should fix the duplicate atkbd, psm, fd* etc in GENERIC. (which paniced the alpha, but not the i386)
|
#
78135 |
|
12-Jun-2001 |
peter |
Hints overhaul: - Replace some very poorly thought out API hacks that should have been fixed a long while ago. - Provide some much more flexible search functions (resource_find_*()) - Use strings for storage instead of an outgrowth of the rather inconvenient temporary ioconf table from config(). We already had a fallback to using strings before malloc/vm was running anyway.
|
#
70804 |
|
08-Jan-2001 |
n_hibma |
Unset the devclass if the attach fails and the devclass was not set to begin with.
Reviewed by: dfr
|
#
70682 |
|
05-Jan-2001 |
imp |
Make this file conform mostly to style(9): o Use 8 space hard tabs o Eliminate trailing white space (while I'm here, just in a couple of places) o wrap mostly at 80 columns (printf literal strings being the notable exception) o use return (foo) consistantly o use 0 vs NULL more consistantly o use queue(3) xxx_FOREACH macros where appropriate (some places used it before, others didn't). o use BSD line continuation parameters
Pendants will likely notice minor style(9) violations, but for the most part the file now looks much much closer to style(9) and is mostly self-consistant.
Approved in principle by: dfr Reviewed by: md5 (no changes to the .o)
|
#
69781 |
|
08-Dec-2000 |
dwmalone |
Convert more malloc+bzero to malloc+M_ZERO.
Submitted by: josh@zipperup.org Submitted by: Robert Drehmel <robd@gmx.net>
|
#
69774 |
|
08-Dec-2000 |
phk |
Staticize some malloc M_ instances.
|
#
69294 |
|
28-Nov-2000 |
mdodd |
Alter the return value and arguments of the GET_RESOURCE_LIST bus method. Alter consumers of this method to conform to the new convention. Minor cosmetic adjustments to bus.h.
This isn't of concern as this interface isn't in use yet.
|
#
68727 |
|
14-Nov-2000 |
mckusick |
In preparation for deprecating CIRCLEQ macros in favor of TAILQ macros which provide the same functionality and are a bit more efficient, convert use of CIRCLEQ's in resource manager to TAILQ's.
Approved by: Garrett Wollman <wollman@khavrinen.lcs.mit.edu>
|
#
68522 |
|
09-Nov-2000 |
msmith |
Implement a trivial but effective interface for obtaining the kernel's device tree and resource manager contents. This is the kernel side of the upcoming libdevinfo, which will expose this information to userspace applications in a trivial fashion.
Remove the now-obsolete DEVICE_SYSCTLS code.
|
#
67278 |
|
18-Oct-2000 |
mdodd |
Add new bus method 'GET_RESOURCE_LIST' and appropriate generic implementation.
Add bus_generic_rl_{get,set,delete,release,alloc}_resource() functions which provide generic operations for devices using resource list style resource management.
This should simplify a number of bus drivers. Further commits to follow.
|
#
66014 |
|
17-Sep-2000 |
mdodd |
Initialize 'hints_loaded' to 0.
This allows static hints to work properly.
|
#
65456 |
|
04-Sep-2000 |
peter |
When we are picking the next available unit number, specifically say what we picked. Otherwise it is anybody's guess as to where the device ended up.
|
#
65172 |
|
28-Aug-2000 |
dfr |
* Remove a bogus call to kobj_init() from make_device(). * Add a non-empty implementation of root_print_child().
|
#
65092 |
|
25-Aug-2000 |
peter |
If the config program found a hints file and included it as a fallback, then treat it as such. This isn't perfect, but should do for things like GENERIC. When in fallback mode, they will be used if there are NO other hints.
|
#
63979 |
|
28-Jul-2000 |
peter |
Fix a const related warning.
|
#
63378 |
|
18-Jul-2000 |
peter |
Patch up some bogons in the resource_find() vs resource_find_hard() interfaces. The original resource_find() returned a pointer to an internal resource table entry. resource_find_hard() dereferences the actual passed in value (oops!) - effectively trashing random memory due to the pointer being passed in with a random initial value.
Submitted by: bde
|
#
62573 |
|
04-Jul-2000 |
phk |
Previous commit changing SYSCTL_HANDLER_ARGS violated KNF.
Pointed out by: bde
|
#
62466 |
|
03-Jul-2000 |
phk |
Add device_set_softc() which does the obvious.
Not objected to by: dfr
|
#
62454 |
|
03-Jul-2000 |
phk |
Style police catches up with rev 1.26 of src/sys/sys/sysctl.h:
Sanitize SYSCTL_HANDLER_ARGS so that simplistic tools can grog our sources:
-sysctl_vm_zone SYSCTL_HANDLER_ARGS +sysctl_vm_zone (SYSCTL_HANDLER_ARGS)
|
#
62113 |
|
26-Jun-2000 |
peter |
Some changes and fixes from Bruce: Use strtoul(), not strtol() in the hints decoder so that 'flags 0xa0ffa0ff' is not truncated to 0x7fffffff. Use a stack buffer instead of a static 100 byte bss buffer. Use \0 for the NUL character. Remove some ``excessive'' parens.
|
#
61701 |
|
15-Jun-2000 |
peter |
As a bit of a gross hack, allow earlier access to both the static and dynamic hints. This allows the resource_XXX_value() calls to work before malloc() has started. This gets the serial console working as well as a few other things.
|
#
61700 |
|
15-Jun-2000 |
peter |
Fix a stray debug output. change if (1 || bootverbose) to if (bootverbose)
|
#
61640 |
|
13-Jun-2000 |
peter |
Borrow phk's axe and apply the next stage of config(8)'s evolution.
Use Warner Losh's "hint" driver to decode ascii strings to fill the resource table at boot time.
config(8) no longer generates an ioconf.c table - ie: the configuration no longer has to be compiled into the kernel. You can reconfigure your isa devices with the likes of this at loader(8) time: set hint.ed.0.port=0x320
userconfig will be rewritten to use this style interface one day and will move to /boot/userconfig.4th or something like that.
It is still possible to statically compile in a set of hints into a kernel if you do not wish to use loader(8). See the "hints" directive in GENERIC as an example.
All device wiring has been moved out of config(8). There is a set of helper scripts (see i386/conf/gethints.pl, and the same for alpha and pc98) that extract the 'at isa? port foo irq bar' from the old files and produces a hints file. If you install this file as /boot/device.hints (and update /boot/defaults/loader.conf - You can do a build/install in sys/boot) then loader will load it automatically for you. You can also compile in the hints directly with: hints "device.hints" as well.
There are a few things that I'm not too happy with yet. Under this scheme, things like LINT would no longer be useful as "documentation" of settings. I have renamed this file to 'NOTES' and stored the example hints strings in it. However... this is not something that config(8) understands, so there is a script that extracts the build-specific data from the documentation file (NOTES) to produce a LINT that can be config'ed and built. A stack of man4 pages will need updating. :-/
Also, since there is no longer a difference between 'device' and 'pseudo-device' I collapsed the two together, and the resulting 'device' takes a 'number of units' for devices that still have it statically allocated. eg: 'device fe 4' will compile the fe driver with NFE set to 4. You can then set hints for 4 units (0 - 3). Also note that 'device fe0' will be interpreted as "zero units of 'fe'" which would be bad, so there is a config warning for this. This is only needed for old drivers that still have static limits on numbers of units. All the statically limited drivers that I could find were marked.
Please exercise EXTREME CAUTION when transitioning!
Moral support by: phk, msmith, dfr, asmodai, imp, and others
|
#
61544 |
|
11-Jun-2000 |
bde |
Fixed allocation of unit numbers. Allocate the amount of space actually required (rounded up a little) instead of twice the previous amount (or a fixed amount for the first allocation).
The bug caused memory corruption when a new unit number for a devclass was more than about twice the previous maximum one (or more than 3 for the first one), so it corrupted memory (which happened to be the atkbdc port resource list) in the reporter's configuration with sio unit numbers { 0, 25, 1, 2, ... }.
Reviewed by: dfr Reported by: Leonid Lukiyanets <stalwar78@hotmail.com>
|
#
60953 |
|
26-May-2000 |
sos |
If devclass_alloc_unit() is called with a wired unit #, and this is buzy, only search upwards for a free slot to use..
This broke unit numbering on ATA systems where PCI attached controllers come before the mainboard ones...
Reviewed by: dfr
|
#
60938 |
|
26-May-2000 |
jake |
Back out the previous change to the queue(3) interface. It was not discussed and should probably not happen.
Requested by: msmith and others
|
#
60833 |
|
23-May-2000 |
jake |
Change the way that the queue(3) structures are declared; don't assume that the type argument to *_HEAD and *_ENTRY is a struct.
Suggested by: phk Reviewed by: phk Approved by: mdodd
|
#
59925 |
|
03-May-2000 |
paul |
If BUS_DEBUG is defined then create a sysctl, debug.bus_debug, that is used to control whether the debug messages are output at runtime. It defaults to on so that if you define BUS_DEBUG in your kernel then you get all the debugging info when you boot.
It's very useful for disabling all the debugging info when you're developing a loadable device driver and you're doing lots of loads and unloads but don't always want to see all the debugging info.
|
#
59820 |
|
01-May-2000 |
dfr |
* Move the driver_t::refs field to kobj_t to replace kobj_t::instances. * Back out a couple of workarounds for the confusion between kobj_t::instances and driver_t::refs.
|
#
59752 |
|
29-Apr-2000 |
peter |
The newer module dependency code exposes an apparent bug in the bus/driver/kobj system. I am not 100% sure that this is the correct fix, but it is harmless and does seem to solve the problem. At worst, it could cause a tiny memory leak at unload time - this is better than a free(NULL) and subsequent panic. I'm waiting for comments from Doug about this. This may yet be backed out and fixed differently.
The change itself is to increment the reference count on drivers in one case where it appears to have been missed. When everything is unloaded, kobj_class_free() was being called twice in some cases, and panicing the second time.
|
#
59489 |
|
22-Apr-2000 |
dfr |
Make sure the driver's ops table has been initialised before calling static methods.
|
#
59316 |
|
17-Apr-2000 |
dfr |
Fix LINT.
|
#
59312 |
|
17-Apr-2000 |
imp |
Issue a detached message after detaching the device.
Not Objected to by: new-bus@
|
#
59093 |
|
08-Apr-2000 |
dfr |
* Factor out the object system from new-bus so that it can be used by non-device code. * Re-implement the method dispatch to improve efficiency. The new system takes about 40ns for a method dispatch on a 300Mhz PII which is only 10ns slower than a direct function call on the same hardware.
This changes the new-bus ABI slightly so make sure you re-compile any driver modules which you use.
|
#
58884 |
|
01-Apr-2000 |
imp |
device_set_unit() DO NOT USE THIS. This was approved before 4.0 release for inclusion into the release, but bde talked me out of committing the module that needs this until after the release. It is after the release now. :-)
|
#
58136 |
|
16-Mar-2000 |
n_hibma |
Instead of using the next unit available, use the first unit available. This avoids the unit number from going up indefinitely when diconnecting and connecting 2 devices alternately.
Noticed by: nsayer (quite a while ago)
And stop calling DEVICE_NOMATCH at probe repeatedly. This stops the message on the PCI VGA board from being printed when loading a PCI driver.
|
#
57614 |
|
29-Feb-2000 |
dfr |
If a driver probe fails, unset it from the device. This fixes a problem with certain multiport cards.
Approved by: jkh
|
#
57356 |
|
20-Feb-2000 |
sos |
Hide the "devclass_alloc_unit: %s%d already exists, using next available..." behind bootverbose
Approved by: jkh
|
#
57244 |
|
15-Feb-2000 |
joerg |
Hide the boring ``not probed (disabled)'' messages behind `bootverbose'. This unspams the boot messages, concentrating on the drivers that have actually been probed.
This basically resurrects revision 1.106 from old /sys/i386/isa/isa.c.
Reviewed by: jkh, dfr
|
#
55091 |
|
24-Dec-1999 |
dfr |
* Set the devclass of a device before calling the probe method. This allows device_printf() etc. to print something intelligible. * Allow device_set_devclass(dev, 0) for clearing the devclass.
|
#
54074 |
|
03-Dec-1999 |
mjacob |
correct incomplete last change
|
#
54073 |
|
03-Dec-1999 |
mdodd |
Remove the 'ivars' arguement to device_add_child() and device_add_child_ordered(). 'ivars' may now be set using the device_set_ivars() function.
This makes it easier for us to change how arbitrary data structures are associated with a device_t. Eventually we won't be modifying device_t to add additional pointers for ivars, softc data etc.
Despite my best efforts I've probably forgotten something so let me know if this breaks anything. I've been running with this change for months and its been quite involved actually isolating all the changes from the rest of the local changes in my tree.
Reviewed by: peter, dfr
|
#
54031 |
|
02-Dec-1999 |
n_hibma |
Remove check for attached state.
sc = devclass_get_softc(devclass, unit);
doesn't return NULL during attach anymore, and produces the sc, identical to (for devclass_get_unit(devclass, unit) != NULL that is):
sc = device_get_softc(devclass_get_unit(devclass, unit));
Reviewed-by: dfr
|
#
53938 |
|
30-Nov-1999 |
mdodd |
Reduce code duplication.
Hopefully this clears up some confusion about the nature of devclass_get_softc() vs. device_get_softc() as well.
The check against DS_ATTACHED remains as this is not a change that modifies functionality.
Reviewed by: Peter "in principle" Wemm
|
#
53331 |
|
18-Nov-1999 |
peter |
'const'ify a bunch of pointers in the resource_*() functions for accessing the config hint tables. This fixes a few warnings elsewhere (eg: fd).
|
#
52174 |
|
12-Oct-1999 |
dfr |
* Add struct resource_list* argument to resource_list_alloc and resource_list_release. This removes the dependancy on the layout of ivars.
* Move set_resource, get_resource and delete_resource from isa_if.m to bus_if.m.
* Simplify driver code by providing wrappers to those methods:
bus_set_resource(dev, type, rid, start, count); bus_get_resource(dev, type, rid, startp, countp); bus_get_resource_start(dev, type, rid); bus_get_resource_count(dev, type, rid); bus_delete_resource(dev, type, rid);
* Delete isa_get_rsrc and use bus_get_resource_start instead.
* Fix a stupid typo in isa_alloc_resource reported by Takahashi Yoshihiro <nyan@FreeBSD.org>.
* Print a diagnostic message if we can't assign resources to a PnP device.
* Change device_print_prettyname() so that it doesn't print "(no driver assigned)-1" for anonymous devices.
|
#
52128 |
|
11-Oct-1999 |
peter |
Trim unused options (or #ifdef for undoc options).
Submitted by: phk
|
#
52045 |
|
09-Oct-1999 |
imp |
Call DEVICE_IDENIFY in bus_generic_driver_added to allow devices to add nodes to the tree. Also, default to bus_generic_driver_added for the BUS_DRIVER_ADDED method.
This allows newbus busses to be kldload'd.
Reviewed by: dfr
|
#
51133 |
|
10-Sep-1999 |
phk |
Create and use a dedicated malloc type for bus related stuff.
Reviewed by: dfr
|
#
51052 |
|
07-Sep-1999 |
dfr |
Change isa_get/set_flags() to device_get/set_flags().
|
#
50477 |
|
27-Aug-1999 |
peter |
$Id$ -> $FreeBSD$
|
#
49921 |
|
16-Aug-1999 |
n_hibma |
Change calling of chained event handler from always after the attach/detach to 1) MOD_LOAD before attach 2) MOD_UNLOAD after detach
The driver specific event handler can now be used to function as driver specific init/deinit function (compare to device specific init/deinit functions: attach & detach).
|
#
49775 |
|
14-Aug-1999 |
n_hibma |
add debugging message in unregister_method
|
#
49773 |
|
14-Aug-1999 |
n_hibma |
Minor spelling glitch
|
#
49706 |
|
14-Aug-1999 |
wpaul |
Grrrr. Fix a really lame bug that I tripped over while testing my miibus stuff: unregister_methods() is horribly broken. The idea, if I'm not mistaken, is that the refcount on a method is decremented, and only when it reaches zero is the method freed. However desc->method is set to NULL unconditionally regardless of the refcount, which means the method pointer is trashed the first time the method is deallocated. The obvious detrimental effect is that memory is leaked. The not so obvious effect is that when you call unregister_method() the second time on the same method, you get a NULL pointer dereference and a panic.
Now I can successfully unload network device drivers and the miibus module without crashing the system.
*sigh*
|
#
49645 |
|
11-Aug-1999 |
peter |
Make subr_bus.c actually compile with -DBUS_DEBUG
|
#
49640 |
|
11-Aug-1999 |
peter |
Zap some stray references to DRIVER_TYPE_foo in the BUS_DEBUG case, as discovered by Bill Paul.
|
#
49198 |
|
28-Jul-1999 |
mdodd |
Fix a typo. Back out a few lines that I haven't dealt with properly yet.
Snickered at by: Mike Smith
|
#
49195 |
|
28-Jul-1999 |
mdodd |
Alter the behavior of sys/kern/subr_bus.c:device_print_child()
- device_print_child() either lets the BUS_PRINT_CHILD method produce the entire device announcement message or it prints "foo0: not found\n"
Alter sys/kern/subr_bus.c:bus_generic_print_child() to take on the previous behavior of device_print_child() (printing the "foo0: <FooDevice 1.1>" bit of the announce message.)
Provide bus_print_child_header() and bus_print_child_footer() to actually print the output for bus_generic_print_child(). These functions should be used whenever possible (unless you can just use bus_generic_print_child())
The BUS_PRINT_CHILD method now returns int instead of void.
Modify everything else that defines or uses a BUS_PRINT_CHILD method to comply with the above changes.
- Devices are 'on' a bus, not 'at' it. - If a custom BUS_PRINT_CHILD method does the same thing as bus_generic_print_child(), use bus_generic_print_child() - Use device_get_nameunit() instead of both device_get_name() and device_get_unit() - All BUS_PRINT_CHILD methods return the number of characters output.
Reviewed by: dfr, peter
|
#
49047 |
|
24-Jul-1999 |
dfr |
This makes the in kernel printf routines conform to the documented behavior of their userland counterparts with respect to return values.
Submitted by: Matthew N. Dodd <winter@jurai.net>
|
#
48754 |
|
11-Jul-1999 |
dfr |
Add a hook for a bus to detect child devices which didn't find drivers. This allows the bus to print an informative message about unknown devices.
Submitted by: Matthew N. Dodd <winter@jurai.net>
|
#
47608 |
|
30-May-1999 |
dfr |
* Add a function devclass_create() which looks up the named devclass and creates it if it doesn't exist. * Rename resource_list_remove() to resource_list_delete() for consistency.
|
#
47578 |
|
28-May-1999 |
dfr |
* Change device_add_child_after() to device_add_child_ordered() which is easier to use and more flexible. * Change BUS_ADD_CHILD to take an order argument instead of a place. * Define a partial ordering for isa devices so that sensitive devices are probed before non-sensitive ones.
|
#
47537 |
|
27-May-1999 |
dfr |
Fix an embarrasing typo in device_add_child_after(). I can't understand how this hasn't caused problems before.
Submitted by: Kazutaka YOKOTA <yokota@zodiac.mech.utsunomiya-u.ac.jp>
|
#
47397 |
|
22-May-1999 |
dfr |
Add some helper functions to make it easier to write a driver for a bus which needs to manage resources for its children.
|
#
47391 |
|
22-May-1999 |
peter |
Add seatbelt like in previous function..
|
#
47355 |
|
21-May-1999 |
dfr |
Silently return NULL from devclass_get_device if dc == NULL. The caller should be handling NULL returns already.
Submitted by: Andrew Gallatin <gallatin@cs.duke.edu>
|
#
47178 |
|
14-May-1999 |
dfr |
* Define a new static method DEVICE_IDENTIFY which is called to add device instances to a parent bus. * Define a new method BUS_ADD_CHILD which can be called from DEVICE_IDENTIFY to add new instances. * Add a generic implementation of DEVICE_PROBE which calls DEVICE_IDENTIFY for each driver attached to the parent's devclass. * Move the hint-based isa probe from the isa driver to a new isahint driver which can be shared between i386 and alpha.
|
#
47167 |
|
14-May-1999 |
dfr |
Adjust method dispatch to ensure that default methods are called properly.
|
#
46913 |
|
10-May-1999 |
dfr |
* Augment the interface language to allow arbitrary C code to be 'passed through' to the C compiler. * Allow the interface to specify a default implementation for methods. * Allow 'static' methods which are not device specific. * Add a simple scheme for probe routines to return a priority value. To make life simple, priority values are negative numbers (positive numbers are standard errno codes) with zero being the highest priority. The driver which returns the highest priority will be chosen for the device.
|
#
46743 |
|
08-May-1999 |
dfr |
Move the declaration of the interrupt type from the driver structure to the BUS_SETUP_INTR call.
|
#
46710 |
|
08-May-1999 |
peter |
Change resource_set_*() to be more useful. BTW; resource_find() is a bit odd, it looks like the wildcard stuff isn't right.
|
#
45837 |
|
19-Apr-1999 |
peter |
GC some stray debugging printf()s...
|
#
45720 |
|
16-Apr-1999 |
peter |
Bring the 'new-bus' to the i386. This extensively changes the way the i386 platform boots, it is no longer ISA-centric, and is fully dynamic. Most old drivers compile and run without modification via 'compatability shims' to enable a smoother transition. eisa, isapnp and pccard* are not yet using the new resource manager. Once fully converted, all drivers will be loadable, including PCI and ISA.
(Some other changes appear to have snuck in, including a port of Soren's ATA driver to the Alpha. Soren, back this out if you need to.)
This is a checkpoint of work-in-progress, but is quite functional.
The bulk of the work was done over the last few years by Doug Rabson and Garrett Wollman.
Approved by: core
|
#
45107 |
|
29-Mar-1999 |
dfr |
Add some useful functions to the device framework:
* bus_setup_intr() as a wrapper for BUS_SETUP_INTR * bus_teardown_intr() as a wrapper for BUS_TEARDOWN_INTR * device_get_nameunit() which returns e.g. "foo0" for name "foo" and unit 0. * device_set_desc_copy() malloc a copy of the description string. * device_quiet(), device_is_quiet(), device_verbose() suppress probe message.
Add one method to the BUS interface, BUS_CHILD_DETACHED() which is called after the child has been detached to allow the bus to clean up any memory which it allocated on behalf of the child.
I also fixed a bug which corrupted the list of drivers in a devclass if a driver was added to more than one devclass.
|
#
43301 |
|
27-Jan-1999 |
dillon |
Fix warnings in preparation for adding -Wall -Wcast-qual to the kernel compile
|
#
42734 |
|
16-Jan-1999 |
dfr |
A few small improvements to the bus code:
* A function device_printf() to make pretty-printing driver messages easier. * A function device_get_children() to query the children of a device. * Generic implementations of BUS_ALLOC_RESOURCE and BUS_RELEASE_RESOURCE. * Change bus_generic_print_child() so that it is actually useful.
|
#
42497 |
|
10-Jan-1999 |
n_hibma |
Remove warning
|
#
41694 |
|
12-Dec-1998 |
n_hibma |
When no driver was found for a device, the message 'not probed' appeared This is odd, especially in the case of USB where the driver is found in several tries: vendor specific, class specific, interface specific. The mouse driver is found at the interface specific level... Reviewed by: Doug Rabson (dfr@freebsd.org)
|
#
41178 |
|
15-Nov-1998 |
dfr |
A couple of minor sanity checks.
Submitted by: Nick Hibma <nick.hibma@jrc.it>
|
#
41153 |
|
14-Nov-1998 |
wollman |
My changes to the new device interface:
- Interface wth the new resource manager. - Allow for multiple drivers implementing a single devclass. - Remove ordering dependencies between header files. - Style cleanup. - Add DEVICE_SUSPEND and DEVICE_RESUME methods. - Move to a single-phase interrupt setup scheme.
Kernel builds on the Alpha are brken until Doug gets a chance to incorporate these changes on that side.
Agreed to in principle by: dfr
|
#
41131 |
|
13-Nov-1998 |
dfr |
A couple of fixes to device_delete_child() to delete all children of the device and to free the device which is being deleted (not its parent - oops).
Submitted by: Nick Hibma <nick.hibma@jrc.it>
|
#
40671 |
|
27-Oct-1998 |
dfr |
Lots of debugging code and some bugfixes.
Submitted by: Nick Hibma <nick.hibma@jrc.it>
|
#
40648 |
|
25-Oct-1998 |
phk |
Nitpicking and dusting performed on a train. Removes trivial warnings about unused variables, labels and other lint.
|
#
39912 |
|
03-Oct-1998 |
dfr |
Don't call DEVICE_DETACH directly, always go through the device_detach() wrapper which checks to make sure the device isn't currently open.
|
#
38860 |
|
05-Sep-1998 |
bde |
Fixed recently perpetrated printf format errors.
|
#
37840 |
|
22-Jul-1998 |
dfr |
Add some very simple support for a compiled in (from config(8)) resource database.
|
#
37592 |
|
12-Jul-1998 |
dfr |
Change interrupt api to be closer to intr_create/intr_connect.
|
#
36972 |
|
14-Jun-1998 |
dfr |
Major changes to the generic device framework for FreeBSD/alpha:
* Eliminate bus_t and make it possible for all devices to have attached children.
* Support dynamically extendable interfaces for drivers to replace both the function pointers in driver_t and bus_ops_t (which has been removed entirely. Two system defined interfaces have been defined, 'device' which is mandatory for all devices and 'bus' which is recommended for all devices which support attached children.
* In addition, the alpha port defines two simple interfaces 'clock' for attaching various real time clocks to the system and 'mcclock' for the many different variations of mc146818 clocks which can be attached to different alpha platforms. This eliminates two more function pointer tables in favour of the generic method dispatch system provided by the device framework.
Future device interfaces may include:
* cdev and bdev interfaces for devfs to use in replacement for specfs and the fixed interfaces bdevsw and cdevsw.
* scsi interface to replace struct scsi_adapter (not sure how this works in CAM but I imagine there is something similar there).
* various tailored interfaces for different bus types such as pci, isa, pccard etc.
|
#
36849 |
|
10-Jun-1998 |
dfr |
Add initial support for the FreeBSD/alpha kernel. This is very much a work in progress and has never booted a real machine. Initial development and testing was done using SimOS (see http://simos.stanford.edu for details). On the SimOS simulator, this port successfully reaches single-user mode and has been tested with loads as high as one copy of /bin/ls :-).
Obtained from: partly from NetBSD/alpha
|