From: Yosuke Iwamatsu <y-iwamatsu@ab.jp.nec.com>
To: xen-devel@lists.xensource.com
Subject: [PATCH 3/5] Add lock for lspci_info in pci.py
Date: Fri, 13 Mar 2009 21:06:27 +0900 [thread overview]
Message-ID: <49BA4C43.8010900@ab.jp.nec.com> (raw)
In-Reply-To: <49BA4209.1020702@ab.jp.nec.com>
Add lspci_info_lock to protect lspci_info.
Signed-off-by: Yosuke Iwamatsu <y-iwamatsu@ab.jp.nec.com>
------
diff -r c30742011bb8 tools/python/xen/util/pci.py
--- a/tools/python/xen/util/pci.py Thu Mar 12 18:48:09 2009 +0000
+++ b/tools/python/xen/util/pci.py Fri Mar 13 16:37:17 2009 +0900
@@ -12,6 +12,7 @@
import types
import struct
import time
+import threading
from xen.util import utils
PROC_PCI_PATH = '/proc/bus/pci/devices'
@@ -97,6 +98,7 @@
# Global variable to store information from lspci
lspci_info = None
+lspci_info_lock = threading.RLock()
#Calculate PAGE_SHIFT: number of bits to shift an address to get the page number
PAGE_SIZE = resource.getpagesize()
@@ -174,12 +176,16 @@
return pci_devs
-def create_lspci_info():
+def _create_lspci_info():
+ """Execute 'lspci' command and parse the result.
+ If the command does not exist, lspci_info will be kept blank ({}).
+
+ Expects to be protected by lspci_info_lock.
+ """
global lspci_info
+
lspci_info = {}
- # Execute 'lspci' command and parse the result.
- # If the command does not exist, lspci_info will be kept blank ({}).
for paragraph in os.popen(LSPCI_CMD + ' -vmm').read().split('\n\n'):
device_name = None
device_info = {}
@@ -194,6 +200,14 @@
pass
if device_name is not None:
lspci_info[device_name] = device_info
+
+def create_lspci_info():
+ global lspci_info_lock
+ lspci_info_lock.acquire()
+ try:
+ _create_lspci_info()
+ finally:
+ lspci_info_lock.release()
def save_pci_conf_space(devs_string):
pci_list = []
@@ -911,22 +925,27 @@
Since we cannot obtain these data from sysfs, use 'lspci' command.
"""
global lspci_info
+ global lspci_info_lock
- if lspci_info is None:
- create_lspci_info()
+ lspci_info_lock.acquire()
+ try:
+ if lspci_info is None:
+ _create_lspci_info()
- try:
- device_info = lspci_info[self.name]
- self.revision = int(device_info['Rev'], 16)
- self.vendorname = device_info['Vendor']
- self.devicename = device_info['Device']
- self.classname = device_info['Class']
- self.subvendorname = device_info['SVendor']
- self.subdevicename = device_info['SDevice']
- except KeyError:
- pass
+ try:
+ device_info = lspci_info[self.name]
+ self.revision = int(device_info['Rev'], 16)
+ self.vendorname = device_info['Vendor']
+ self.devicename = device_info['Device']
+ self.classname = device_info['Class']
+ self.subvendorname = device_info['SVendor']
+ self.subdevicename = device_info['SDevice']
+ except KeyError:
+ pass
- return True
+ return True
+ finally:
+ lspci_info_lock.release()
def __str__(self):
str = "PCI Device %s\n" % (self.name)
next prev parent reply other threads:[~2009-03-13 12:06 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <49BA4209.1020702@ab.jp.nec.com>
2009-03-13 12:06 ` [PATCH 1/5] Implement DGRAM (connectionless) type socket listeners Yosuke Iwamatsu
2009-03-13 12:06 ` [PATCH 2/5] Add lock for xen-api class instances in XendAPIStore.py Yosuke Iwamatsu
2009-03-13 12:06 ` Yosuke Iwamatsu [this message]
2009-03-13 12:06 ` [PATCH 4/5] Accept udev events and update physical resource information Yosuke Iwamatsu
2009-03-23 7:05 ` [PATCH 4/5] Accept udev events and update physicalresource information Masaki Kanno
2009-03-24 8:12 ` [PATCH] xend: save the state of PPCIs after hot-plug ([PATCH 4/5] Accept udev events and update physical resource information) Yosuke Iwamatsu
2009-03-25 9:24 ` Masaki Kanno
2009-03-13 12:06 ` [PATCH 5/5] Add udev rules to deliver hw events to xend Yosuke Iwamatsu
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=49BA4C43.8010900@ab.jp.nec.com \
--to=y-iwamatsu@ab.jp.nec.com \
--cc=xen-devel@lists.xensource.com \
/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.