From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48706) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1W37WR-0001MC-KG for qemu-devel@nongnu.org; Tue, 14 Jan 2014 12:11:33 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1W37WL-0001pF-K8 for qemu-devel@nongnu.org; Tue, 14 Jan 2014 12:11:27 -0500 Received: from mx1.redhat.com ([209.132.183.28]:2751) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1W37WL-0001p7-A8 for qemu-devel@nongnu.org; Tue, 14 Jan 2014 12:11:21 -0500 Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s0EHBKjl019142 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Tue, 14 Jan 2014 12:11:20 -0500 From: Bandan Das Date: Tue, 14 Jan 2014 21:45:43 +0530 Message-Id: <1389716144-31076-2-git-send-email-bsd@redhat.com> In-Reply-To: <1389716144-31076-1-git-send-email-bsd@redhat.com> References: <1389716144-31076-1-git-send-email-bsd@redhat.com> Subject: [Qemu-devel] [PATCH 1/2] vfio: warn if host device rom can't be read List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: alex.williamson@redhat.com If the device rom can't be read, report an error to the user. The guest might try to read the rom contents more than once, so introduce macros that print a message only once and not clutter up the console. This is to alert the user that the device has a bad state that is causing rom read failure or option rom loading has been disabled from the device boot menu (among other reasons). Signed-off-by: Bandan Das --- hw/misc/vfio.c | 7 +++++++ include/qemu/error-report.h | 20 ++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c index 9aecaa8..e5b2826 100644 --- a/hw/misc/vfio.c +++ b/hw/misc/vfio.c @@ -1125,6 +1125,13 @@ static void vfio_pci_load_rom(VFIODevice *vdev) vdev->rom_offset = reg_info.offset; if (!vdev->rom_size) { + error_report_once("vfio-pci: Cannot read device rom at " + "%04x:%02x:%02x.%x\n", + vdev->host.domain, vdev->host.bus, vdev->host.slot, + vdev->host.function); + error_printf_once("Device option ROM contents are probably invalid " + "(check dmesg).\nSkip option ROM probe with rombar=0, " + "or load from file with romfile=\n"); return; } diff --git a/include/qemu/error-report.h b/include/qemu/error-report.h index 3b098a9..7d24e4c 100644 --- a/include/qemu/error-report.h +++ b/include/qemu/error-report.h @@ -43,4 +43,24 @@ void error_report(const char *fmt, ...) GCC_FMT_ATTR(1, 2); const char *error_get_progname(void); extern bool enable_timestamp_msg; +#define error_printf_once(fmt, ...) \ +({ \ + static bool __printf_once; \ + \ + if (!__printf_once) { \ + __printf_once = true; \ + error_printf(fmt, ##__VA_ARGS__); \ + } \ +}) \ + +#define error_report_once(fmt, ...) \ +({ \ + static bool __report_once; \ + \ + if (!__report_once) { \ + __report_once = true; \ + error_report(fmt, ##__VA_ARGS__); \ + } \ +}) \ + #endif -- 1.8.3.1