Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 39934
b: refs/heads/master
c: 64d9a39
h: refs/heads/master
v: v3
  • Loading branch information
Linus Torvalds committed Oct 19, 2006
1 parent 6b3ef39 commit ee8f365
Show file tree
Hide file tree
Showing 82 changed files with 1,321 additions and 610 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: bd452e6f178a559408c54c2b4ca29191b812d47f
refs/heads/master: 64d9a39ec9ad074384b548c0cead89265c82e166
20 changes: 20 additions & 0 deletions trunk/Documentation/HOWTO
Original file line number Diff line number Diff line change
Expand Up @@ -395,6 +395,26 @@ bugme-janitor mailing list (every change in the bugzilla is mailed here)



Managing bug reports
--------------------

One of the best ways to put into practice your hacking skills is by fixing
bugs reported by other people. Not only you will help to make the kernel
more stable, you'll learn to fix real world problems and you will improve
your skills, and other developers will be aware of your presence. Fixing
bugs is one of the best ways to get merits among other developers, because
not many people like wasting time fixing other people's bugs.

To work in the already reported bug reports, go to http://bugzilla.kernel.org.
If you want to be advised of the future bug reports, you can subscribe to the
bugme-new mailing list (only new bug reports are mailed here) or to the
bugme-janitor mailing list (every change in the bugzilla is mailed here)

http://lists.osdl.org/mailman/listinfo/bugme-new
http://lists.osdl.org/mailman/listinfo/bugme-janitors



Mailing lists
-------------

Expand Down
63 changes: 62 additions & 1 deletion trunk/Documentation/MSI-HOWTO.txt
Original file line number Diff line number Diff line change
Expand Up @@ -470,7 +470,68 @@ LOC: 324553 325068
ERR: 0
MIS: 0

6. FAQ
6. MSI quirks

Several PCI chipsets or devices are known to not support MSI.
The PCI stack provides 3 possible levels of MSI disabling:
* on a single device
* on all devices behind a specific bridge
* globally

6.1. Disabling MSI on a single device

Under some circumstances, it might be required to disable MSI on a
single device, It may be achived by either not calling pci_enable_msi()
or all, or setting the pci_dev->no_msi flag before (most of the time
in a quirk).

6.2. Disabling MSI below a bridge

The vast majority of MSI quirks are required by PCI bridges not
being able to route MSI between busses. In this case, MSI have to be
disabled on all devices behind this bridge. It is achieves by setting
the PCI_BUS_FLAGS_NO_MSI flag in the pci_bus->bus_flags of the bridge
subordinate bus. There is no need to set the same flag on bridges that
are below the broken brigde. When pci_enable_msi() is called to enable
MSI on a device, pci_msi_supported() takes care of checking the NO_MSI
flag in all parent busses of the device.

Some bridges actually support dynamic MSI support enabling/disabling
by changing some bits in their PCI configuration space (especially
the Hypertransport chipsets such as the nVidia nForce and Serverworks
HT2000). It may then be required to update the NO_MSI flag on the
corresponding devices in the sysfs hierarchy. To enable MSI support
on device "0000:00:0e", do:

echo 1 > /sys/bus/pci/devices/0000:00:0e/msi_bus

To disable MSI support, echo 0 instead of 1. Note that it should be
used with caution since changing this value might break interrupts.

6.3. Disabling MSI globally

Some extreme cases may require to disable MSI globally on the system.
For now, the only known case is a Serverworks PCI-X chipsets (MSI are
not supported on several busses that are not all connected to the
chipset in the Linux PCI hierarchy). In the vast majority of other
cases, disabling only behind a specific bridge is enough.

For debugging purpose, the user may also pass pci=nomsi on the kernel
command-line to explicitly disable MSI globally. But, once the appro-
priate quirks are added to the kernel, this option should not be
required anymore.

6.4. Finding why MSI cannot be enabled on a device

Assuming that MSI are not enabled on a device, you should look at
dmesg to find messages that quirks may output when disabling MSI
on some devices, some bridges or even globally.
Then, lspci -t gives the list of bridges above a device. Reading
/sys/bus/pci/devices/0000:00:0e/msi_bus will tell you whether MSI
are enabled (1) or disabled (0). In 0 is found in a single bridge
msi_bus file above the device, MSI cannot be enabled.

7. FAQ

Q1. Are there any limitations on using the MSI?

Expand Down
2 changes: 1 addition & 1 deletion trunk/Documentation/feature-removal-schedule.txt
Original file line number Diff line number Diff line change
Expand Up @@ -255,7 +255,7 @@ Who: Stephen Hemminger <shemminger@osdl.org>


What: PHYSDEVPATH, PHYSDEVBUS, PHYSDEVDRIVER in the uevent environment
When: Oktober 2008
When: October 2008
Why: The stacking of class devices makes these values misleading and
inconsistent.
Class devices should not carry any of these properties, and bus
Expand Down
5 changes: 5 additions & 0 deletions trunk/Documentation/kernel-parameters.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1231,6 +1231,11 @@ and is between 256 and 4096 characters. It is defined in the file
machine check when some devices' config space
is read. But various workarounds are disabled
and some IOMMU drivers will not work.
bfsort Sort PCI devices into breadth-first order.
This sorting is done to get a device
order compatible with older (<= 2.4) kernels.
nobfsort Don't sort PCI devices into breadth-first order.

pcmv= [HW,PCMCIA] BadgePAD 4

pd. [PARIDE]
Expand Down
2 changes: 1 addition & 1 deletion trunk/Documentation/s390/CommonIO
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ Command line parameters

When a device is un-ignored, device recognition and sensing is performed and
the device driver will be notified if possible, so the device will become
available to the system.
available to the system. Note that un-ignoring is performed asynchronously.

You can also add ranges of devices to be ignored by piping to
/proc/cio_ignore; "add <device range>, <device range>, ..." will ignore the
Expand Down
52 changes: 24 additions & 28 deletions trunk/Documentation/s390/cds.txt
Original file line number Diff line number Diff line change
Expand Up @@ -174,14 +174,10 @@ read_dev_chars() - Read Device Characteristics

This routine returns the characteristics for the device specified.

The function is meant to be called with an irq handler in place; that is,
The function is meant to be called with the device already enabled; that is,
at earliest during set_online() processing.

While the request is processed synchronously, the device interrupt
handler is called for final ending status. In case of error situations the
interrupt handler may recover appropriately. The device irq handler can
recognize the corresponding interrupts by the interruption parameter be
0x00524443. The ccw_device must not be locked prior to calling read_dev_chars().
The ccw_device must not be locked prior to calling read_dev_chars().

The function may be called enabled or disabled.

Expand Down Expand Up @@ -410,26 +406,7 @@ individual flag meanings.

Usage Notes :

Prior to call ccw_device_start() the device driver must assure disabled state,
i.e. the I/O mask value in the PSW must be disabled. This can be accomplished
by calling local_save_flags( flags). The current PSW flags are preserved and
can be restored by local_irq_restore( flags) at a later time.

If the device driver violates this rule while running in a uni-processor
environment an interrupt might be presented prior to the ccw_device_start()
routine returning to the device driver main path. In this case we will end in a
deadlock situation as the interrupt handler will try to obtain the irq
lock the device driver still owns (see below) !

The driver must assure to hold the device specific lock. This can be
accomplished by

(i) spin_lock(get_ccwdev_lock(cdev)), or
(ii) spin_lock_irqsave(get_ccwdev_lock(cdev), flags)

Option (i) should be used if the calling routine is running disabled for
I/O interrupts (see above) already. Option (ii) obtains the device gate und
puts the CPU into I/O disabled state by preserving the current PSW flags.
ccw_device_start() must be called disabled and with the ccw device lock held.

The device driver is allowed to issue the next ccw_device_start() call from
within its interrupt handler already. It is not required to schedule a
Expand Down Expand Up @@ -488,7 +465,7 @@ int ccw_device_resume(struct ccw_device *cdev);

cdev - ccw_device the resume operation is requested for

The resume_IO() function returns:
The ccw_device_resume() function returns:

0 - suspended channel program is resumed
-EBUSY - status pending
Expand All @@ -507,6 +484,8 @@ a long-running channel program or the device might require to initially issue
a halt subchannel (HSCH) I/O command. For those purposes the ccw_device_halt()
command is provided.

ccw_device_halt() must be called disabled and with the ccw device lock held.

int ccw_device_halt(struct ccw_device *cdev,
unsigned long intparm);

Expand All @@ -517,7 +496,7 @@ intparm : interruption parameter; value is only used if no I/O

The ccw_device_halt() function returns :

0 - successful completion or request successfully initiated
0 - request successfully initiated
-EBUSY - the device is currently busy, or status pending.
-ENODEV - cdev invalid.
-EINVAL - The device is not operational or the ccw device is not online.
Expand All @@ -533,6 +512,23 @@ can then perform an appropriate action. Prior to interrupt of an outstanding
read to a network device (with or without PCI flag) a ccw_device_halt()
is required to end the pending operation.

ccw_device_clear() - Terminage I/O Request Processing

In order to terminate all I/O processing at the subchannel, the clear subchannel
(CSCH) command is used. It can be issued via ccw_device_clear().

ccw_device_clear() must be called disabled and with the ccw device lock held.

int ccw_device_clear(struct ccw_device *cdev, unsigned long intparm);

cdev: ccw_device the clear operation is requested for
intparm: interruption parameter (see ccw_device_halt())

The ccw_device_clear() function returns:

0 - request successfully initiated
-ENODEV - cdev invalid
-EINVAL - The device is not operational or the ccw device is not online.

Miscellaneous Support Routines

Expand Down
3 changes: 3 additions & 0 deletions trunk/Documentation/s390/driver-model.txt
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,9 @@ status - Can be 'online' or 'offline'.

type - The physical type of the channel path.

shared - Whether the channel path is shared.

cmg - The channel measurement group.

3. System devices
-----------------
Expand Down
4 changes: 2 additions & 2 deletions trunk/MAINTAINERS
Original file line number Diff line number Diff line change
Expand Up @@ -2315,8 +2315,8 @@ T: quilt kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/
S: Supported

PCI HOTPLUG CORE
P: Greg Kroah-Hartman
M: gregkh@suse.de
P: Kristen Carlson Accardi
M: kristen.c.accardi@intel.com
S: Supported

PCI HOTPLUG COMPAQ DRIVER
Expand Down
59 changes: 57 additions & 2 deletions trunk/arch/i386/pci/common.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
unsigned int pci_probe = PCI_PROBE_BIOS | PCI_PROBE_CONF1 | PCI_PROBE_CONF2 |
PCI_PROBE_MMCONF;

int pci_bf_sort;
int pci_routeirq;
int pcibios_last_bus = -1;
unsigned long pirq_table_addr;
Expand Down Expand Up @@ -117,6 +118,20 @@ void __devinit pcibios_fixup_bus(struct pci_bus *b)
pci_read_bridge_bases(b);
}

/*
* Only use DMI information to set this if nothing was passed
* on the kernel command line (which was parsed earlier).
*/

static int __devinit set_bf_sort(struct dmi_system_id *d)
{
if (pci_bf_sort == pci_bf_sort_default) {
pci_bf_sort = pci_dmi_bf;
printk(KERN_INFO "PCI: %s detected, enabling pci=bfsort.\n", d->ident);
}
return 0;
}

/*
* Enable renumbering of PCI bus# ranges to reach all PCI busses (Cardbus)
*/
Expand All @@ -130,11 +145,11 @@ static int __devinit assign_all_busses(struct dmi_system_id *d)
}
#endif

static struct dmi_system_id __devinitdata pciprobe_dmi_table[] = {
#ifdef __i386__
/*
* Laptops which need pci=assign-busses to see Cardbus cards
*/
static struct dmi_system_id __devinitdata pciprobe_dmi_table[] = {
#ifdef __i386__
{
.callback = assign_all_busses,
.ident = "Samsung X20 Laptop",
Expand All @@ -144,6 +159,38 @@ static struct dmi_system_id __devinitdata pciprobe_dmi_table[] = {
},
},
#endif /* __i386__ */
{
.callback = set_bf_sort,
.ident = "Dell PowerEdge 1950",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Dell"),
DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge 1950"),
},
},
{
.callback = set_bf_sort,
.ident = "Dell PowerEdge 1955",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Dell"),
DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge 1955"),
},
},
{
.callback = set_bf_sort,
.ident = "Dell PowerEdge 2900",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Dell"),
DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge 2900"),
},
},
{
.callback = set_bf_sort,
.ident = "Dell PowerEdge 2950",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Dell"),
DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge 2950"),
},
},
{}
};

Expand Down Expand Up @@ -189,6 +236,8 @@ static int __init pcibios_init(void)

pcibios_resource_survey();

if (pci_bf_sort >= pci_force_bf)
pci_sort_breadthfirst();
#ifdef CONFIG_PCI_BIOS
if ((pci_probe & PCI_BIOS_SORT) && !(pci_probe & PCI_NO_SORT))
pcibios_sort();
Expand All @@ -203,6 +252,12 @@ char * __devinit pcibios_setup(char *str)
if (!strcmp(str, "off")) {
pci_probe = 0;
return NULL;
} else if (!strcmp(str, "bfsort")) {
pci_bf_sort = pci_force_bf;
return NULL;
} else if (!strcmp(str, "nobfsort")) {
pci_bf_sort = pci_force_nobf;
return NULL;
}
#ifdef CONFIG_PCI_BIOS
else if (!strcmp(str, "bios")) {
Expand Down
Loading

0 comments on commit ee8f365

Please sign in to comment.