mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [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