From: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
To: Greg KH <greg@kroah.com>
Cc: Linux Kernel list <linux-kernel@vger.kernel.org>,
linux-ia64@vger.kernel.org, linux-pci@atrey.karlin.mff.cuni.cz
Subject: [PATCH 3/6] PCIERR : interfaces for synchronous I/O error detection
Date: Fri, 24 Mar 2006 07:49:20 +0000 [thread overview]
Message-ID: <4423A480.1080402@jp.fujitsu.com> (raw)
In-Reply-To: <20060322210157.GH12335@kroah.com>
This patch is 2/4 of PCIERR implementation for IA64.
This part describes base of IA64-specific PCIERR, registering
driver and checking status.
Signed-off-by: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
-----
arch/ia64/lib/pcierr_check.c | 53 +++++++++++++++++++++++++++++++++++++++++--
include/asm-ia64/pci.h | 4 ++-
2 files changed, 54 insertions(+), 3 deletions(-)
Index: linux-2.6.16_WORK/arch/ia64/lib/pcierr_check.c
=================================--- linux-2.6.16_WORK.orig/arch/ia64/lib/pcierr_check.c
+++ linux-2.6.16_WORK/arch/ia64/lib/pcierr_check.c
@@ -8,14 +8,63 @@
void pcierr_clear(iocookie *cookie, struct pci_dev *dev);
int pcierr_read(iocookie *cookie);
+LIST_HEAD(pcierr_list); /* all iocookies are listed in this */
+DEFINE_SPINLOCK(pcierr_lock); /* to protect list above */
+
+static int have_error(struct pci_dev *dev);
+
void pcierr_clear(iocookie *cookie, struct pci_dev *dev)
{
- /* register device etc. */
+ unsigned long flag;
+
+ INIT_LIST_HEAD(&(cookie->list));
+
+ cookie->dev = dev;
+
+ spin_lock_irqsave(&pcierr_lock, flag);
+ list_add(&cookie->list, &pcierr_list);
+ spin_unlock_irqrestore(&pcierr_lock, flag);
+
+ cookie->error = 0;
}
int pcierr_read(iocookie *cookie)
{
- /* check error etc. */
+ unsigned long flag;
+ int ret = 0;
+
+ spin_lock_irqsave(&pcierr_lock, flag);
+ if (cookie->error || have_error(cookie->dev))
+ ret = 1;
+ list_del(&cookie->list);
+ spin_unlock_irqrestore(&pcierr_lock, flag);
+
+ return ret;
+}
+
+static int have_error(struct pci_dev *dev)
+{
+ u16 status;
+
+ /* check status */
+ switch (dev->hdr_type) {
+ case PCI_HEADER_TYPE_NORMAL: /* 0 */
+ pci_read_config_word(dev, PCI_STATUS, &status);
+ break;
+ case PCI_HEADER_TYPE_BRIDGE: /* 1 */
+ pci_read_config_word(dev, PCI_SEC_STATUS, &status);
+ break;
+ case PCI_HEADER_TYPE_CARDBUS: /* 2 */
+ return 0; /* FIX ME */
+ default:
+ BUG();
+ }
+
+ if ( (status & PCI_STATUS_REC_TARGET_ABORT)
+ || (status & PCI_STATUS_REC_MASTER_ABORT)
+ || (status & PCI_STATUS_DETECTED_PARITY) )
+ return 1;
+
return 0;
}
Index: linux-2.6.16_WORK/include/asm-ia64/pci.h
=================================--- linux-2.6.16_WORK.orig/include/asm-ia64/pci.h
+++ linux-2.6.16_WORK/include/asm-ia64/pci.h
@@ -175,7 +175,9 @@
/* Enable ia64 pcierr - See arch/ia64/lib/pcierr_check.c */
#define HAVE_ARCH_PCIERR_CHECK
typedef struct {
- int dummy;
+ struct list_head list;
+ struct pci_dev *dev; /* target device */
+ unsigned long error; /* error flag */
} iocookie;
#endif /* CONFIG_PCIERR_CHECK */
WARNING: multiple messages have this Message-ID (diff)
From: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
To: Greg KH <greg@kroah.com>
Cc: Linux Kernel list <linux-kernel@vger.kernel.org>,
linux-ia64@vger.kernel.org, linux-pci@atrey.karlin.mff.cuni.cz
Subject: [PATCH 3/6] PCIERR : interfaces for synchronous I/O error detection on driver (base)
Date: Fri, 24 Mar 2006 16:49:20 +0900 [thread overview]
Message-ID: <4423A480.1080402@jp.fujitsu.com> (raw)
In-Reply-To: <20060322210157.GH12335@kroah.com>
This patch is 2/4 of PCIERR implementation for IA64.
This part describes base of IA64-specific PCIERR, registering
driver and checking status.
Signed-off-by: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
-----
arch/ia64/lib/pcierr_check.c | 53 +++++++++++++++++++++++++++++++++++++++++--
include/asm-ia64/pci.h | 4 ++-
2 files changed, 54 insertions(+), 3 deletions(-)
Index: linux-2.6.16_WORK/arch/ia64/lib/pcierr_check.c
===================================================================
--- linux-2.6.16_WORK.orig/arch/ia64/lib/pcierr_check.c
+++ linux-2.6.16_WORK/arch/ia64/lib/pcierr_check.c
@@ -8,14 +8,63 @@
void pcierr_clear(iocookie *cookie, struct pci_dev *dev);
int pcierr_read(iocookie *cookie);
+LIST_HEAD(pcierr_list); /* all iocookies are listed in this */
+DEFINE_SPINLOCK(pcierr_lock); /* to protect list above */
+
+static int have_error(struct pci_dev *dev);
+
void pcierr_clear(iocookie *cookie, struct pci_dev *dev)
{
- /* register device etc. */
+ unsigned long flag;
+
+ INIT_LIST_HEAD(&(cookie->list));
+
+ cookie->dev = dev;
+
+ spin_lock_irqsave(&pcierr_lock, flag);
+ list_add(&cookie->list, &pcierr_list);
+ spin_unlock_irqrestore(&pcierr_lock, flag);
+
+ cookie->error = 0;
}
int pcierr_read(iocookie *cookie)
{
- /* check error etc. */
+ unsigned long flag;
+ int ret = 0;
+
+ spin_lock_irqsave(&pcierr_lock, flag);
+ if (cookie->error || have_error(cookie->dev))
+ ret = 1;
+ list_del(&cookie->list);
+ spin_unlock_irqrestore(&pcierr_lock, flag);
+
+ return ret;
+}
+
+static int have_error(struct pci_dev *dev)
+{
+ u16 status;
+
+ /* check status */
+ switch (dev->hdr_type) {
+ case PCI_HEADER_TYPE_NORMAL: /* 0 */
+ pci_read_config_word(dev, PCI_STATUS, &status);
+ break;
+ case PCI_HEADER_TYPE_BRIDGE: /* 1 */
+ pci_read_config_word(dev, PCI_SEC_STATUS, &status);
+ break;
+ case PCI_HEADER_TYPE_CARDBUS: /* 2 */
+ return 0; /* FIX ME */
+ default:
+ BUG();
+ }
+
+ if ( (status & PCI_STATUS_REC_TARGET_ABORT)
+ || (status & PCI_STATUS_REC_MASTER_ABORT)
+ || (status & PCI_STATUS_DETECTED_PARITY) )
+ return 1;
+
return 0;
}
Index: linux-2.6.16_WORK/include/asm-ia64/pci.h
===================================================================
--- linux-2.6.16_WORK.orig/include/asm-ia64/pci.h
+++ linux-2.6.16_WORK/include/asm-ia64/pci.h
@@ -175,7 +175,9 @@
/* Enable ia64 pcierr - See arch/ia64/lib/pcierr_check.c */
#define HAVE_ARCH_PCIERR_CHECK
typedef struct {
- int dummy;
+ struct list_head list;
+ struct pci_dev *dev; /* target device */
+ unsigned long error; /* error flag */
} iocookie;
#endif /* CONFIG_PCIERR_CHECK */
next prev parent reply other threads:[~2006-03-24 7:49 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-03-22 8:38 [PATCH] PCIERR : interfaces for synchronous I/O error detection on Hidetoshi Seto
2006-03-22 8:38 ` [PATCH] PCIERR : interfaces for synchronous I/O error detection on driver Hidetoshi Seto
2006-03-22 21:01 ` Greg KH
2006-03-22 21:01 ` Greg KH
2006-03-24 7:47 ` [PATCH 1/6] PCIERR : interfaces for synchronous I/O error detection Hidetoshi Seto
2006-03-24 7:47 ` [PATCH 1/6] PCIERR : interfaces for synchronous I/O error detection on driver Hidetoshi Seto
2006-03-24 23:43 ` Linas Vepstas
2006-03-24 23:43 ` Linas Vepstas
2006-03-27 2:37 ` [PATCH 1/6] PCIERR : interfaces for synchronous I/O error detection Hidetoshi Seto
2006-03-27 2:37 ` [PATCH 1/6] PCIERR : interfaces for synchronous I/O error detection on driver Hidetoshi Seto
2006-03-31 22:01 ` Linas Vepstas
2006-03-31 22:01 ` Linas Vepstas
2006-04-03 4:54 ` [PATCH 1/6] PCIERR : interfaces for synchronous I/O error detection Hidetoshi Seto
2006-04-03 4:54 ` [PATCH 1/6] PCIERR : interfaces for synchronous I/O error detection on driver Hidetoshi Seto
2006-03-24 7:48 ` [PATCH 2/6] PCIERR : interfaces for synchronous I/O error detection Hidetoshi Seto
2006-03-24 7:48 ` [PATCH 2/6] PCIERR : interfaces for synchronous I/O error detection on driver (config) Hidetoshi Seto
2006-03-24 7:49 ` Hidetoshi Seto [this message]
2006-03-24 7:49 ` [PATCH 3/6] PCIERR : interfaces for synchronous I/O error detection on driver (base) Hidetoshi Seto
2006-03-24 7:50 ` [PATCH 4/6] PCIERR : interfaces for synchronous I/O error detection Hidetoshi Seto
2006-03-24 7:50 ` [PATCH 4/6] PCIERR : interfaces for synchronous I/O error detection on driver (mcadrv) Hidetoshi Seto
2006-03-24 7:51 ` [PATCH 5/6] PCIERR : interfaces for synchronous I/O error detection Hidetoshi Seto
2006-03-24 7:51 ` [PATCH 5/6] PCIERR : interfaces for synchronous I/O error detection on driver (poison) Hidetoshi Seto
2006-03-24 7:52 ` [PATCH 6/6] PCIERR : interfaces for synchronous I/O error detection Hidetoshi Seto
2006-03-24 7:52 ` [PATCH 6/6] PCIERR : interfaces for synchronous I/O error detection on driver (sample: Fusion MPT) Hidetoshi Seto
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4423A480.1080402@jp.fujitsu.com \
--to=seto.hidetoshi@jp.fujitsu.com \
--cc=greg@kroah.com \
--cc=linux-ia64@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@atrey.karlin.mff.cuni.cz \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.