* [PATCH] Fix PCI error token awkward value
@ 2006-07-06 22:01 Linas Vepstas
2006-07-06 22:22 ` Andrew Morton
0 siblings, 1 reply; 3+ messages in thread
From: Linas Vepstas @ 2006-07-06 22:01 UTC (permalink / raw)
To: Greg KH, linux-pci; +Cc: Andrew Morton, linux-kernel
The pci channel state token currently has a poor choice of values;
there are two ways of indicating that "everything's OK": 0 and 1.
This is a bit of a burden.
If a devce driver wants to check if the pci channel is in a working
or a disconnected state, the driver writer must perform checks similar
to
if((pdev->error_state != 0) &&
(pdev->error_state != pci_channel_io_normal)) {
whatever();
}
which is rather akward. The first check is needed because
stuct pci_dev is inited to all-zeros. The scond is needed
because the error recovery will set the state to
pci_channel_io_normal (which is not zero).
This patch fixes this awkwardness.
Signed-off-by: Linas Vepstas <linas@austin.ibm.com>
----
include/linux/pci.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Index: linux-2.6.17-mm3/include/linux/pci.h
===================================================================
--- linux-2.6.17-mm3.orig/include/linux/pci.h 2006-06-27 11:39:16.000000000 -0500
+++ linux-2.6.17-mm3/include/linux/pci.h 2006-07-06 15:15:09.000000000 -0500
@@ -85,7 +85,7 @@ typedef unsigned int __bitwise pci_chann
enum pci_channel_state {
/* I/O channel is in normal state */
- pci_channel_io_normal = (__force pci_channel_state_t) 1,
+ pci_channel_io_normal = (__force pci_channel_state_t) 0,
/* I/O to channel is blocked */
pci_channel_io_frozen = (__force pci_channel_state_t) 2,
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] Fix PCI error token awkward value
2006-07-06 22:01 [PATCH] Fix PCI error token awkward value Linas Vepstas
@ 2006-07-06 22:22 ` Andrew Morton
2006-07-06 22:48 ` Linas Vepstas
0 siblings, 1 reply; 3+ messages in thread
From: Andrew Morton @ 2006-07-06 22:22 UTC (permalink / raw)
To: Linas Vepstas; +Cc: greg, linux-pci, linux-kernel
linas@austin.ibm.com (Linas Vepstas) wrote:
>
>
>
> The pci channel state token currently has a poor choice of values;
> there are two ways of indicating that "everything's OK": 0 and 1.
> This is a bit of a burden.
>
> If a devce driver wants to check if the pci channel is in a working
> or a disconnected state, the driver writer must perform checks similar
> to
>
> if((pdev->error_state != 0) &&
> (pdev->error_state != pci_channel_io_normal)) {
> whatever();
> }
>
> which is rather akward. The first check is needed because
> stuct pci_dev is inited to all-zeros. The scond is needed
> because the error recovery will set the state to
> pci_channel_io_normal (which is not zero).
>
> This patch fixes this awkwardness.
>
eww.
>
> Index: linux-2.6.17-mm3/include/linux/pci.h
> ===================================================================
> --- linux-2.6.17-mm3.orig/include/linux/pci.h 2006-06-27 11:39:16.000000000 -0500
> +++ linux-2.6.17-mm3/include/linux/pci.h 2006-07-06 15:15:09.000000000 -0500
> @@ -85,7 +85,7 @@ typedef unsigned int __bitwise pci_chann
>
> enum pci_channel_state {
> /* I/O channel is in normal state */
> - pci_channel_io_normal = (__force pci_channel_state_t) 1,
> + pci_channel_io_normal = (__force pci_channel_state_t) 0,
>
> /* I/O to channel is blocked */
> pci_channel_io_frozen = (__force pci_channel_state_t) 2,
It needs a comment to prevent people from breaking it in the future, and
to help people who are trying to work out why the heck the kernel is
looking for a particular state in something which hasn't been set to that
state.
Also, it's a bit odd that we've gone and left a hole in the enum space.
Wouldn't it be better to sort out our initialisation so we don't actually
need this memset-equals-pci_channel_io_normal trick? pci_scan_device()
looks like a good place..
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] Fix PCI error token awkward value
2006-07-06 22:22 ` Andrew Morton
@ 2006-07-06 22:48 ` Linas Vepstas
0 siblings, 0 replies; 3+ messages in thread
From: Linas Vepstas @ 2006-07-06 22:48 UTC (permalink / raw)
To: Andrew Morton; +Cc: greg, linux-pci, linux-kernel
On Thu, Jul 06, 2006 at 03:22:03PM -0700, Andrew Morton wrote:
>
> Wouldn't it be better to sort out our initialisation so we don't actually
> need this memset-equals-pci_channel_io_normal trick? pci_scan_device()
> looks like a good place..
OK, revised patch below. That's more typical of "application style
coding", where the apps waste a few extra cycles by zeroing a
struct and then immediately initializing struct members to non-zero
values (it seems that CPU designers have noticed that Java does this
a lot). But I thought the kernel philosophy was "everythings zero
its safe to assume everything's zero, don't waste cycles on such
silliness". which is why you got the ewww pach.
--linas
Subject: [PATCH] Initialize struct_pci error state
The pci channel state is currently uninitialized, thus there
are two ways of indicating that "everything's OK": 0 and 1.
This is a bit of a burden.
If a devce driver wants to check if the pci channel is in a working
or a disconnected state, the driver writer must perform checks similar
to
if((pdev->error_state != 0) &&
(pdev->error_state != pci_channel_io_normal)) {
whatever();
}
which is rather akward. The first check is needed because
stuct pci_dev is inited to all-zeros. The scond is needed
because the error recovery will set the state to
pci_channel_io_normal (which is not zero).
This patch fixes this awkwardness.
Signed-off-by: Linas Vepstas <linas@austin.ibm.com>
----
drivers/pci/probe.c | 1 +
1 file changed, 1 insertion(+)
Index: linux-2.6.17-mm3/drivers/pci/probe.c
===================================================================
--- linux-2.6.17-mm3.orig/drivers/pci/probe.c 2006-06-27 11:39:09.000000000 -0500
+++ linux-2.6.17-mm3/drivers/pci/probe.c 2006-07-06 17:28:20.000000000 -0500
@@ -815,6 +815,7 @@ pci_scan_device(struct pci_bus *bus, int
dev->vendor = l & 0xffff;
dev->device = (l >> 16) & 0xffff;
dev->cfg_size = pci_cfg_space_size(dev);
+ dev->error_state = pci_channel_io_normal;
/* Assume 32-bit PCI; let 64-bit PCI cards (which are far rarer)
set this higher, assuming the system even supports it. */
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2006-07-06 22:48 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-07-06 22:01 [PATCH] Fix PCI error token awkward value Linas Vepstas
2006-07-06 22:22 ` Andrew Morton
2006-07-06 22:48 ` Linas Vepstas
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome