From patchwork Fri Oct 9 06:28:42 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [V5,09/29] pci: clean up of pci_default_read_config. Date: Thu, 08 Oct 2009 20:28:42 -0000 From: Isaku Yamahata X-Patchwork-Id: 35563 Message-Id: <1255069742-15724-10-git-send-email-yamahata@valinux.co.jp> To: qemu-devel@nongnu.org, mst@redhat.com Cc: yamahata@valinux.co.jp This patch cleans up pci_default_read_config() removing ugly length and range check. Suggesed by "Michael S. Tsirkin" Signed-off-by: Isaku Yamahata Acked-by: Michael S. Tsirkin --- hw/pci.c | 26 +++++--------------------- 1 files changed, 5 insertions(+), 21 deletions(-) diff --git a/hw/pci.c b/hw/pci.c index 634899a..755ebad 100644 --- a/hw/pci.c +++ b/hw/pci.c @@ -558,27 +558,11 @@ static void pci_update_mappings(PCIDevice *d) uint32_t pci_default_read_config(PCIDevice *d, uint32_t address, int len) { - uint32_t val; - - switch(len) { - default: - case 4: - if (address <= 0xfc) { - val = pci_get_long(d->config + address); - break; - } - /* fall through */ - case 2: - if (address <= 0xfe) { - val = pci_get_word(d->config + address); - break; - } - /* fall through */ - case 1: - val = pci_get_byte(d->config + address); - break; - } - return val; + uint32_t val = 0; + assert(len == 1 || len == 2 || len == 4); + len = MIN(len, PCI_CONFIG_SPACE_SIZE - address); + memcpy(&val, d->config + address, len); + return le32_to_cpu(val); } void pci_default_write_config(PCIDevice *d, uint32_t addr, uint32_t val, int l)