- 20 Nov, 2002 11 commits
-
-
Patrick Mochel authored
This a multi-pronged attack aimed at exploiting the kobject infrastructure mor. - Remove bus_driver_list, in favor of list in bus_subys. - Remove bus_for_each_* and driver_for_each_dev(). They're not being used by anyone, have questionable locking semantics, and really don't provide that much use, as the function returns once the callback fails, with no indication of where it failed. Forget them, at least for now. - Make sure that we return success from bus_match() if device matches, but doesn't have a probe method. - Remove extraneous get_{device,driver}s from bus routines that are serialized by the bus's rwsem. bus_{add,remove}_{device,driver} all take the rwsem, so there is no way we can get a non-existant object when in those functions. - Use the rwsem in the struct subsystem the bus has embedded in it, and kill the separate one in struct bus_type. - Move bulk of driver_register() into bus_add_driver(), which holds the bus's rwsem during the entirety. this will prevent the driver from being unloaded while it's being registered, and two drivers with the same name getting registered at the same time. - Ditto for driver_unregister() and bus_remove_driver(). - Add driver_release() method for the driver bus driver subsystems. (Explained later) - Use only the refcounts in the buses' kobjects, and kill the one in struct bus_type. - Kill struct bus_type::present and struct device_driver::present. These didn't work out the way we intended them to. The idea was to not let a user obtain a rerference count to the object if it was in the process of being unregistered. All the code paths should be fixed now such that their registration is protected with a semaphore, so no partially initialized objects can be removed, and enough infrastructure is moved to the kobject model so that once the object is publically visible, it should be usable by other sources. - Add a bus_sem to serialize bus registration and unregistration. - Add struct device_driver::unload_sem to prevent unloading of drivers with a positive reference count. The driver model has always had a bug that would allow a driver with a positive reference count to be unloaded. It would decrement the reference count and return, letting the module be unloaded, without accounting for the other users of the object. This has been discussed many times, though never resolved cleanly. This should fix the problem in the simplest manner. struct device_driver gets unload_sem, which is initialized to _locked_. When the reference count for the driver reaches 0, the semaphore is unlocked. driver_unregister() blocks on acquiring this lock before it exits. In the normal case that driver_unregister() drops the last reference to the driver, the lock will be acquired immediately, and the module will unload. In the case that someone else is using the driver object, driver_unregister() will not be able to acquire the lock, since the refcount has not reached 0, and the lock has not been released. This means that rmmod(8) will block while drivers' sysfs files are open. There are no sysfs files for drivers yet, but note this when they do have some.
-
Patrick Mochel authored
- Don't do extra dget() when creating symlink. This is a long-standing bug with a simple and obvious fix. We were doing an extra dget() on the dentry after d_instantiate(). It only gets decremented once on removal, so the dentry was never really going away, and the directory wasn't, either. - Use simple_unlink() instead of sysfs_unlink(). - Use simple_rmdir() instead of our own, unrolled, version. - Remove MODULE_LICENSE(), since it's always in the kernel.
-
Patrick Mochel authored
-
Patrick Mochel authored
into osdl.org:/home/mochel/src/kernel/devel/linux-2.5-kobject
-
Patrick Mochel authored
into osdl.org:/home/mochel/src/kernel/devel/linux-2.5-kobject
-
Ivan Kokshaysky authored
- Use PCI_BUS_NUM_RESOURCES instead of hardcoded `4' in pci_find_parent_resource; - clean up pci_claim_resource() and make it a bit more informative on errors; - pdev_sort_resources() must be __devinit, as it's called from pbus_assign_resources_sorted(), which is __devinit now; - fix one remaining dev->name in debugging printk.
-
Ivan Kokshaysky authored
The detection of subtractive decoding bridges is broken: `class' variable doesn't contain ProgIf byte at this point, I should check `dev->class' instead. This fixes resource allocation problems on certain docking stations.
-
Andries E. Brouwer authored
The dev_t argument of sys_mknod is passed to vfs_mknod, and is then cast to int when foo_mknod is called, and is subsequently very often cast back to dev_t. (For example, minix_mknod() calls minix_set_inode() that takes a dev_t.) This is a cleanup that avoids this back-and-forth casting by giving foo_mknod a prototype with dev_t. In most cases now the dev_t is transmitted untouched until init_special_inode. It also makes the two routines hugetlbfs_get_inode() and shmem_get_inode() static.
-
Rusty Russell authored
Fixes miscalculation of required module size due to alignment issues of first section after common, and also doesn't think that no init section is an allocation failure.
-
Rusty Russell authored
Patch from Adam Richter. I have a nicer solution based on aliases, but it requires coordination with USB, PCI and PCMCIA maintainers, which is taking time. This restores the old code in the meantime: one week without this is too long for people who need it.
-
bk://ppc.bkbits.net/for-linus-ppcLinus Torvalds authored
into home.transmeta.com:/home/torvalds/v2.5/linux
-
- 21 Nov, 2002 4 commits
-
-
Paul Mackerras authored
This removes Rules.make inclusions, makes make clean work properly, removes EXTRA_TARGETS where not needed, and fixes a couple of compile warnings in the boot wrappers where <linux/string.h> wasn't included.
-
Paul Mackerras authored
This solves some mutual inclusion problems.
-
Paul Mackerras authored
Now atomic.h defines the smp_mb__* macros completely itself without needing the smp_mb definition from <asm/system.h>
-
Paul Mackerras authored
-
- 20 Nov, 2002 3 commits
-
-
Rusty Russell authored
-
Linus Torvalds authored
into home.transmeta.com:/home/torvalds/v2.5/linux
-
Arnaldo Carvalho de Melo authored
Also use strsep in ibmmca.c, as strtok is gone from the kernel.
-
- 19 Nov, 2002 22 commits
-
-
bk://linuxusb.bkbits.net/pci-2.5Linus Torvalds authored
into home.transmeta.com:/home/torvalds/v2.5/linux
-
bk://linuxusb.bkbits.net/linus-2.5Linus Torvalds authored
into home.transmeta.com:/home/torvalds/v2.5/linux
-
Zwane Mwaikambo authored
parse_interface allocates the incorrect storage size for additional altsettings (new buffer) leading to a BUG being triggered in mm/slab.c:1453 when we do the memcpy from the old buffer to the new buffer (writing beyond new buffer). Patch appended, tested with an OV511 on an Intel PIIX4
-
Matthew Wilcox authored
Al pointed out that the current name of get_lease is extremely confusing and I agree. This (a) renames it to break_lease and (b) fixes a bug noticed by Dave Hansen which could cause a NULL pointer dereference under high load.
-
Greg Kroah-Hartman authored
into kroah.com:/home/linux/linux/BK/gregkh-2.5
-
Patrick Mochel authored
This makes the driver model core (for devices) exploit the kobject infrastructure more and make the resulting code quite a bit simpler. For one, device_register() mimmicks kobject_register() in that it now only calls device_initialize() and device_add() back to back. Similarly, device_unregister() calls device_del() and put_device() consecutively. device_del() no longer removes and frees the device, it only removes them. It also removes the devices from the global and sibling lists. This was previously done by device_put(), but moved here to be symmetrical with device_add(). The device's parent is now only incremented in device_add() and decremented in device_del(), fixing a bug in which the parent's refcount was incremented twice. Because of these simplifications, the core can easily be converted to use the kobject reference counting infrastructure. get_device() now simply forwards the call to kobject_get() and ditto for put_device(). device_release() is implemented to handle the freeing of devices once their reference count reaches 0. Since we're using the kobject refcounting model, we no longer need the checking or setting of the device state field, so it has been removed. The only users of it were the power routines. In those, it is implicit that we have a valid device, since we've already taken device_sem, and we're walking the list (all modifications are protected by device_sem). struct device::lock, and the helpers to lock/unlock have been removed. No one has ever used them, and no one is likely to use them.
-
Greg Kroah-Hartman authored
- removed a few #ifdefs in the main code - cleaned up the failure logic in initialization.
-
Greg Kroah-Hartman authored
into kroah.com:/home/linux/linux/BK/pci-2.5
-
Greg Kroah-Hartman authored
-
Greg Kroah-Hartman authored
-
Greg Kroah-Hartman authored
-
Chris Wright authored
This removes the code from cap_sysget that fills out the capability set being returned to userspace. The module handles this in a policy specific way. This updates the dummy.c module to fill in return data according to superuser policy, and also disables setting capabilities in superuser policy.
-
Patrick Mochel authored
-
Chris Wright authored
-
Patrick Mochel authored
sysfs has always had a bug that would allow a read-only file to be opened for writing. It has also returned 0 on write when there was no store method defined for the file. This addresses both via sysfs_open_file(). It checks the flags the file was opened with and compares them with the mode of the inode. If the mode does not support the flags passed, -EPERM is returned. If the sysfs_ops for the object does not have the correct method for the flags, -EACCESS is returned. Since all checks happen on open(), the corresponding checks in the read() and write() methods have been removed.
-
Petko Manolov authored
-
Linus Torvalds authored
sending routines don't set it up.
-
Patrick Mochel authored
into osdl.org:/home/mochel/src/kernel/devel/linux-2.5-kobject
-
Linus Torvalds authored
from "write()" is an error condition, and hang retrying. Return EINVAL in sysfs instead.
-
Linus Torvalds authored
into home.transmeta.com:/home/torvalds/v2.5/linux
-
David Woodhouse authored
-
David Woodhouse authored
-