public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 2.6.9-rc2-mm2] Create new function to see if pci dev is present
@ 2004-09-23 22:26 Hanna Linder
  2004-09-23 22:50 ` Greg KH
  2004-09-24 19:02 ` Christoph Hellwig
  0 siblings, 2 replies; 10+ messages in thread
From: Hanna Linder @ 2004-09-23 22:26 UTC (permalink / raw)
  To: linux-kernel; +Cc: greg, hannal, kernel-janitors, davej, hpa


Greg asked in a previous janitors thread:
"What we need is a simple "Is this pci device present right now" type
function, to solve the mess that logic like this needs."

OK. How about this one? It uses pci_get_device but instead of returning
the dev it returns 1 if the device is present and 0 if it isnt. This take the
burdon off the driver from having to know when to use pci_dev_put or
not and should be cleaner for future maintenance work.

Ive tested it with two patches that will follow.

Hanna Linder
IBM Linux Technology Center

Signed-off-by: Hanna Linder <hannal@us.ibm.com>
----

diff -Nrup linux-2.6.9-rc2-mm2cln/drivers/pci/search.c linux-2.6.9-rc2-mm2patch/drivers/pci/search.c
--- linux-2.6.9-rc2-mm2cln/drivers/pci/search.c	2004-09-23 11:49:04.000000000 -0700
+++ linux-2.6.9-rc2-mm2patch/drivers/pci/search.c	2004-09-23 15:03:58.000000000 -0700
@@ -271,6 +271,30 @@ pci_get_device(unsigned int vendor, unsi
 	return pci_get_subsys(vendor, device, PCI_ANY_ID, PCI_ANY_ID, from);
 }
 
+/**
+ * pci_dev_present - Returns 1 if device is present, 0 if device is not.
+ * @vendor: PCI vendor id to match, or %PCI_ANY_ID to match all vendor ids
+ * @device: PCI device id to match, or %PCI_ANY_ID to match all device ids
+ * @from: Previous PCI device found in search, or %NULL for new search.
+ *
+ * If pci_get_device returns a pci_dev pointer then the device exists and the
+ * reference count is decremented before returning 1. If pci_get_device
+ * returns %NULL then 0 is returned to indicate the device was not
+ * present. Obvious fact: You do not have a reference to the device so if
+ * it is removed from the system before this function returns the value
+ * will be stale. 
+ */
+int 
+pci_dev_present(unsigned int vendor, unsigned int device, struct pci_dev *from)
+{
+	struct pci_dev *dev;
+	dev = pci_get_device(vendor, device, from);
+	if (dev){
+		pci_dev_put(dev);
+		return 1;
+	}
+	return 0;
+}
 
 /**
  * pci_find_device_reverse - begin or continue searching for a PCI device by vendor/device id
@@ -352,3 +376,5 @@ EXPORT_SYMBOL(pci_get_device);
 EXPORT_SYMBOL(pci_get_subsys);
 EXPORT_SYMBOL(pci_get_slot);
 EXPORT_SYMBOL(pci_get_class);
+EXPORT_SYMBOL(pci_dev_present);
+
diff -Nrup linux-2.6.9-rc2-mm2cln/include/linux/pci.h linux-2.6.9-rc2-mm2patch/include/linux/pci.h
--- linux-2.6.9-rc2-mm2cln/include/linux/pci.h	2004-09-23 11:49:27.000000000 -0700
+++ linux-2.6.9-rc2-mm2patch/include/linux/pci.h	2004-09-23 15:03:01.000000000 -0700
@@ -733,6 +733,8 @@ struct pci_dev *pci_get_subsys (unsigned
 struct pci_dev *pci_get_slot (struct pci_bus *bus, unsigned int devfn);
 struct pci_dev *pci_get_class (unsigned int class, struct pci_dev *from);
 
+int pci_dev_present(unsigned int vendor, unsigned int device, struct pci_dev *from);
+
 int pci_bus_read_config_byte (struct pci_bus *bus, unsigned int devfn, int where, u8 *val);
 int pci_bus_read_config_word (struct pci_bus *bus, unsigned int devfn, int where, u16 *val);
 int pci_bus_read_config_dword (struct pci_bus *bus, unsigned int devfn, int where, u32 *val);
@@ -900,6 +902,9 @@ unsigned int ss_vendor, unsigned int ss_
 static inline struct pci_dev *pci_get_class(unsigned int class, struct pci_dev *from)
 { return NULL; }
 
+static inline int pci_dev_present(unsigned int vendor, unsigned int device, struct pci_dev *from)
+{return -1; }
+
 static inline void pci_set_master(struct pci_dev *dev) { }
 static inline int pci_enable_device(struct pci_dev *dev) { return -EIO; }
 static inline void pci_disable_device(struct pci_dev *dev) { }






^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2004-09-28 17:33 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-09-23 22:26 [PATCH 2.6.9-rc2-mm2] Create new function to see if pci dev is present Hanna Linder
2004-09-23 22:50 ` Greg KH
2004-09-24 19:02 ` Christoph Hellwig
2004-09-24 21:19   ` Greg KH
2004-09-24 21:00     ` Alan Cox
2004-09-26 14:10       ` Greg KH
2004-09-28 17:24         ` Greg KH
2004-09-28 17:25           ` Greg KH
2004-09-28 17:26           ` Greg KH
2004-09-24 21:26     ` [PATCH 2.6.9-rc2-mm2] " H. Peter Anvin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox