summaryrefslogtreecommitdiffstats
path: root/sys/kern/subr_bus.c
Commit message (Collapse)AuthorAgeFilesLines
* Fix a typo.jhb2013-01-231-1/+1
|
* Provide a generic way to disable devices at boot timeeadler2012-10-021-0/+7
| | | | | | | | PR: kern/119202 Requested by: peterj Reviewed by: sbruno, jhb Approved by: cperciva MFC after: 1 week
* Add a BUS_CHILD_DELETED() method that a bus can hook to allow it to cleanupjhb2012-08-211-0/+2
| | | | | | | any bus-specific state (such as ivars) when a child device is deleted. Requested by: kan MFC after: 1 month
* Revert r239178 and implement two new functions, namelyhselasky2012-08-151-14/+33
| | | | | | | | | | | "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
* Add new device method to free the automaticallyhselasky2012-08-101-4/+14
| | | | | | | | | | | | | | | 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
* device_add_child: protect against child device with no driver but fixed unit ↵avg2012-05-251-0/+2
| | | | | | | | | | | 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
* Allow device_busy() and device_unbusy() to be invoked while a device isjhb2012-04-111-5/+13
| | | | | | | | | | | 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
* Properly clear a device's devclass if DEVICE_ATTACH() fails if the devicejhb2012-02-281-3/+2
| | | | | | | does not have a fixed devclass. Reviewed by: imp MFC after: 2 weeks
* Clear the a device's description string anytime it's driver changes.jhb2012-02-271-3/+2
| | | | | | | | | | 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.
* - Fix undefined behavior when device_get_name is nulleadler2012-01-151-2/+8
| | | | | | | | | - Make error message more informative PR: kern/149800 Submitted by: olgeni Approved by: cperciva MFC after: 1 week
* It doesn't make much sense to check whether child is NULL after alreadymarius2011-12-021-4/+5
| | | | | | | | | | 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
* - In device_probe_child(9) check the return value of device_set_driver(9)marius2011-12-021-11/+15
| | | | | | | | | 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)
* Rename device_delete_all_children() into device_delete_children().hselasky2011-11-221-1/+1
| | | | | Suggested by: jhb @ and marius @ MFC after: 1 week
* Style change.hselasky2011-11-221-2/+2
| | | | | Suggested by: jhb @ and marius @ MFC after: 1 week
* Move the device_delete_all_children() function from usb_util.chselasky2011-11-191-0/+33
| | | | | | | | 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
* In device_get_children() avoid malloc(0) in order to increase portabilitymarius2011-10-091-0/+5
| | | | | | to other operating systems. PR: 154287
* In order to maximize the re-usability of kernel code in user space thiskmacy2011-09-161-1/+1
| | | | | | | | | | | | | 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)
* Add a new bus method, BUS_ADJUST_RESOURCE() that is intended to be ajhb2011-04-291-0/+32
| | | | | | | 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.
* - Merge changes to the base system to support OFED. These includejeff2011-03-211-2/+2
| | | | | a wider arg2 for sysctl, updates to vlan code, IFT_INFINIBAND, and other miscellaneous small features.
* Similar to 189574, properly handle subclasses of bus drivers when deletingjhb2011-03-011-30/+81
| | | | | | | | | | 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
* Specify a CTLTYPE_FOO so that a future sysctl(8) change does not needmdf2011-01-181-6/+6
| | | | to rely on the format string.
* Finish r210923, 210926. Mark some devices as eternal.kib2011-01-041-2/+2
| | | | MFC after: 2 weeks
* removed tag is '-', not '+'.imp2010-12-021-2/+1
| | | | remove extra return.
* Remove redundant (and bogus) insertion of pnp info when announcing newimp2010-11-301-37/+2
| | | | | | | and retiring devices. That's already inserted elsewhere. Submitted by: n_hibma MFC after: 3 days
* Add a resource_list_reserved() method that returns true if a resourcejhb2010-11-171-0/+24
| | | | list entry contains a reserved resource.
* By popular demand, kill all the non GIANT related interrupt messages.imp2010-09-171-9/+0
| | | | | | They are confusing and add little value. Reviewed by: jhb@
* bus_add_child: change type of order parameter to u_intavg2010-09-101-1/+1
| | | | | | | | | | 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
* subr_bus: use hexadecimal representation for bit flagsavg2010-09-081-8/+8
| | | | | | | | | 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
* struct device: widen type of flags and order fields to u_intavg2010-09-041-5/+4
| | | | | | | | | | | | | 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
* Properly indent a continue statement. No functional changes.gibbs2010-08-121-1/+1
|
* Use ISO C99 integer types in sys/kern where possible.ed2010-06-211-3/+3
| | | | | | 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.
* Add modifications of devctl_notify(9) functions that take flags. Usekib2010-06-121-6/+21
| | | | | | | | | | | 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
* Call BUS_PROBE_NOMATCH() when device detached due to driver unload.mav2010-06-071-0/+4
| | | | This allows bus to power-down device when driver unloaded on-flight.
* Make sure that we free the passed in data message if we don't actuallyimp2010-04-201-3/+12
| | | | | | | 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
* Spelling nitgavin2010-02-071-1/+1
|
* Actually set RLE_ALLOCATED when allocating a reserved resource so thatjhb2009-12-301-3/+3
| | | | resource_list_release() will later release the resource instead of failing.
* - Assert that a reserved resource returned via resource_list_alloc() is notjhb2009-12-301-1/+12
| | | | | | | | | 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.
* For some buses, devices may have active resources assigned even though theyjhb2009-12-091-2/+151
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* The building the dev nameunit string, in devclass_add_device() is basedattilio2009-11-121-1/+2
| | | | | | | | | | | | | | | | 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
* - Fix several off-by-one errors when using MAXCOMLEN. The p_comm[] andjhb2009-10-231-1/+1
| | | | | | | | | | | | | 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
* Set the devclass_t pointer specified in the DRIVER_MODULE() macrojhb2009-10-221-24/+14
| | | | | | | | | | | | | | | | | | | | 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
* Add a facility for associating optional descriptions with active interruptjhb2009-10-151-0/+40
| | | | | | | | | | | | | | | | | | | | | | | | | 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
* Do not call BUS_DRIVER_ADDED() for detached buses (attach failed) onmav2009-09-241-1/+1
| | | | | | | | 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
* Revert r196779 in order to implement a different scheme for newbus lockingattilio2009-09-131-18/+2
| | | | | | methodology. Requested by: imp
* Add intermediate states for attaching and detaching that will beattilio2009-09-031-2/+18
| | | | | | | | 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>
* Rather than havnig enabled/disabled, implement a max queue depth.imp2009-08-251-13/+62
| | | | | | | | | | | | | | | 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
* Temporarily revert the new-bus locking for 8.0 release. It will bejhb2009-08-201-81/+6
| | | | | | reintroduced after HEAD is reopened for commits by re@. Approved by: re (kib), attilio
* Fix small style regression introduced by the MPSAFE newbus code.ed2009-08-161-1/+1
| | | | Approved by: re (rwatson)
* Make the newbus subsystem Giant free by adding the new newbus sxlock.attilio2009-08-021-7/+82
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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)
* We can actually remove devclass_find_driver.imp2009-06-101-21/+0
|
OpenPOWER on IntegriCloud