mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-27 21:40:49 +00:00
Error reporting & miscellaneous patches for 2018-09-24
-----BEGIN PGP SIGNATURE----- iQIcBAABAgAGBQJbqP/iAAoJEDhwtADrkYZTDTQP/jidzPBq+9SbQTkP3/6DNdyq 3amvEA0lNlowGz+VQtTPjG1Sw+wr5PRFFjthueX4EXCgTih9db5Rd6Daiqt9uuh4 ipep7OVTcyMOErHzyosIIwQAte2ERiunpwXOAcahxInJ4XBlxyJAiJTZXHQb1v+u zKa3PpKi3fLcqBs3wKn8AJmp5HLTYOM6/LK870S65Rzx20AbifBH/6yQPkdrMAL2 lw204RasdYCiJo045n6pwZ0mBMT1d33VAmSqPUaeoOWabLCzmbZvcQNwUqtVleh6 5IoAxjFhrixksdg67+HMyFyJH5Nt8SkTeOpqN4D+dpj7y3BLGSUzvV3mBEBSfinm nvyfjVkxX4xRNw4mgm03H2qg5g3FACDQVz+g5uLDAZELlz9POCnOTFJuf/n++u3q zcxOqCg2U99KiyF51PMRu9yPH/zDNNFxmrEY7dFkuAycS3EWk+VK63pXnNUkx3xe 0T8uZA4Cvhn84hLNDFyX/DzILKFb0bRSUw6zAhUYb44oD6roFlp8rgTauNECa9CO GcgvJKXyk6mMDEHkSKSWy51doVEn0vqqzEc9w6/QPwxsXNMUWXEQAv/BVaK7To/J JlSxC/C/jda4pt6zDFks6grac8AT6LBIFUrp6HpF84gSldEF4OuFbJhg9iuTyarz ea5pvvZGJHQvnLATg5kK =2oaJ -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/armbru/tags/pull-error-2018-09-24' into staging Error reporting & miscellaneous patches for 2018-09-24 # gpg: Signature made Mon 24 Sep 2018 16:16:50 BST # gpg: using RSA key 3870B400EB918653 # gpg: Good signature from "Markus Armbruster <armbru@redhat.com>" # gpg: aka "Markus Armbruster <armbru@pond.sub.org>" # Primary key fingerprint: 354B C8B3 D7EB 2A6B 6867 4E5F 3870 B400 EB91 8653 * remotes/armbru/tags/pull-error-2018-09-24: MAINTAINERS: Fix F: patterns that don't match anything Drop "qemu:" prefix from error_report() arguments qemu-error: make use of {error, warn}_report_once_cond qemu-error: add {error, warn}_report_once_cond Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
2f831d0498
10
MAINTAINERS
10
MAINTAINERS
@ -889,12 +889,11 @@ Sun4m
|
||||
M: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
|
||||
S: Maintained
|
||||
F: hw/sparc/sun4m.c
|
||||
F: hw/sparc/sun4m_iommu.c
|
||||
F: hw/dma/sparc32_dma.c
|
||||
F: hw/dma/sun4m_iommu.c
|
||||
F: hw/misc/eccmemctl.c
|
||||
F: hw/misc/slavio_misc.c
|
||||
F: include/hw/sparc/sparc32_dma.h
|
||||
F: include/hw/sparc/sun4m.h
|
||||
F: pc-bios/openbios-sparc32
|
||||
|
||||
Sun4u
|
||||
@ -1422,7 +1421,7 @@ F: qemu-io*
|
||||
F: tests/qemu-iotests/
|
||||
F: util/qemu-progress.c
|
||||
F: qobject/block-qdict.c
|
||||
F: test/check-block-qdict.c
|
||||
F: tests/check-block-qdict.c
|
||||
T: git git://repo.or.cz/qemu/kevin.git block
|
||||
|
||||
Block I/O path
|
||||
@ -1455,7 +1454,7 @@ F: blockjob.c
|
||||
F: include/block/blockjob.h
|
||||
F: job.c
|
||||
F: job-qmp.c
|
||||
F: include/block/job.h
|
||||
F: include/qemu/job.h
|
||||
F: block/backup.c
|
||||
F: block/commit.c
|
||||
F: block/stream.c
|
||||
@ -1671,7 +1670,6 @@ QAPI Schema
|
||||
M: Eric Blake <eblake@redhat.com>
|
||||
M: Markus Armbruster <armbru@redhat.com>
|
||||
S: Supported
|
||||
F: qapi-schema.json
|
||||
F: qapi/*.json
|
||||
T: git git://repo.or.cz/qemu/armbru.git qapi-next
|
||||
|
||||
@ -1790,7 +1788,7 @@ F: migration/
|
||||
F: scripts/vmstate-static-checker.py
|
||||
F: tests/vmstate-static-checker-data/
|
||||
F: tests/migration-test.c
|
||||
F: docs/devel/migration.txt
|
||||
F: docs/devel/migration.rst
|
||||
F: qapi/migration.json
|
||||
|
||||
Seccomp
|
||||
|
@ -181,12 +181,12 @@ int load_multiboot(FWCfgState *fw_cfg,
|
||||
if (!is_multiboot)
|
||||
return 0; /* no multiboot */
|
||||
|
||||
mb_debug("qemu: I believe we found a multiboot image!");
|
||||
mb_debug("I believe we found a multiboot image!");
|
||||
memset(bootinfo, 0, sizeof(bootinfo));
|
||||
memset(&mbs, 0, sizeof(mbs));
|
||||
|
||||
if (flags & 0x00000004) { /* MULTIBOOT_HEADER_HAS_VBE */
|
||||
error_report("qemu: multiboot knows VBE. we don't.");
|
||||
error_report("multiboot knows VBE. we don't");
|
||||
}
|
||||
if (!(flags & 0x00010000)) { /* MULTIBOOT_HEADER_HAS_ADDR */
|
||||
uint64_t elf_entry;
|
||||
@ -216,7 +216,7 @@ int load_multiboot(FWCfgState *fw_cfg,
|
||||
exit(1);
|
||||
}
|
||||
|
||||
mb_debug("qemu: loading multiboot-elf kernel "
|
||||
mb_debug("loading multiboot-elf kernel "
|
||||
"(%#x bytes) with entry %#zx",
|
||||
mb_kernel_size, (size_t)mh_entry_addr);
|
||||
} else {
|
||||
@ -270,7 +270,7 @@ int load_multiboot(FWCfgState *fw_cfg,
|
||||
mb_debug("multiboot: load_addr = %#x", mh_load_addr);
|
||||
mb_debug("multiboot: load_end_addr = %#x", mh_load_end_addr);
|
||||
mb_debug("multiboot: bss_end_addr = %#x", mh_bss_end_addr);
|
||||
mb_debug("qemu: loading multiboot kernel (%#x bytes) at %#x",
|
||||
mb_debug("loading multiboot kernel (%#x bytes) at %#x",
|
||||
mb_load_size, mh_load_addr);
|
||||
|
||||
mbs.mb_buf = g_malloc(mb_kernel_size);
|
||||
|
@ -1000,7 +1000,7 @@ void ppce500_init(MachineState *machine)
|
||||
payload_size = load_uimage(filename, &bios_entry, &loadaddr, NULL,
|
||||
NULL, NULL);
|
||||
if (payload_size < 0) {
|
||||
error_report("qemu: could not load firmware '%s'", filename);
|
||||
error_report("could not load firmware '%s'", filename);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
@ -1056,7 +1056,7 @@ void ppce500_init(MachineState *machine)
|
||||
*/
|
||||
dt_base = (loadaddr + payload_size + DTC_LOAD_PAD) & ~DTC_PAD_MASK;
|
||||
if (dt_base + DTB_MAX_SIZE > ram_size) {
|
||||
error_report("qemu: not enough memory for device tree");
|
||||
error_report("not enough memory for device tree");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
@ -234,7 +234,7 @@ static int sam460ex_load_uboot(void)
|
||||
if (!pflash_cfi01_register(base, NULL, "sam460ex.flash", bios_size,
|
||||
blk, 64 * KiB, fl_sectors,
|
||||
1, 0x89, 0x18, 0x0000, 0x0, 1)) {
|
||||
error_report("qemu: Error registering flash memory.");
|
||||
error_report("Error registering flash memory");
|
||||
/* XXX: return an error instead? */
|
||||
exit(1);
|
||||
}
|
||||
@ -545,7 +545,7 @@ static void sam460ex_init(MachineState *machine)
|
||||
if (!machine->kernel_filename) {
|
||||
success = sam460ex_load_uboot();
|
||||
if (success < 0) {
|
||||
error_report("qemu: could not load firmware");
|
||||
error_report("could not load firmware");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
@ -564,7 +564,7 @@ static void sam460ex_init(MachineState *machine)
|
||||
}
|
||||
/* XXX try again as binary */
|
||||
if (success < 0) {
|
||||
error_report("qemu: could not load kernel '%s'",
|
||||
error_report("could not load kernel '%s'",
|
||||
machine->kernel_filename);
|
||||
exit(1);
|
||||
}
|
||||
@ -576,7 +576,7 @@ static void sam460ex_init(MachineState *machine)
|
||||
RAMDISK_ADDR,
|
||||
machine->ram_size - RAMDISK_ADDR);
|
||||
if (initrd_size < 0) {
|
||||
error_report("qemu: could not load ram disk '%s' at %x",
|
||||
error_report("could not load ram disk '%s' at %x",
|
||||
machine->initrd_filename, RAMDISK_ADDR);
|
||||
exit(1);
|
||||
}
|
||||
|
@ -81,7 +81,7 @@ static uint64_t load_kernel(const char *kernel_filename)
|
||||
if (load_elf(kernel_filename, NULL, NULL,
|
||||
&kernel_entry, NULL, &kernel_high,
|
||||
0, EM_RISCV, 1, 0) < 0) {
|
||||
error_report("qemu: could not load kernel '%s'", kernel_filename);
|
||||
error_report("could not load kernel '%s'", kernel_filename);
|
||||
exit(1);
|
||||
}
|
||||
return kernel_entry;
|
||||
|
@ -72,7 +72,7 @@ static uint64_t load_kernel(const char *kernel_filename)
|
||||
if (load_elf(kernel_filename, NULL, NULL,
|
||||
&kernel_entry, NULL, &kernel_high,
|
||||
0, EM_RISCV, 1, 0) < 0) {
|
||||
error_report("qemu: could not load kernel '%s'", kernel_filename);
|
||||
error_report("could not load kernel '%s'", kernel_filename);
|
||||
exit(1);
|
||||
}
|
||||
return kernel_entry;
|
||||
|
@ -60,7 +60,7 @@ static uint64_t load_kernel(const char *kernel_filename)
|
||||
if (load_elf_ram_sym(kernel_filename, NULL, NULL,
|
||||
&kernel_entry, NULL, &kernel_high, 0, EM_RISCV, 1, 0,
|
||||
NULL, true, htif_symbol_callback) < 0) {
|
||||
error_report("qemu: could not load kernel '%s'", kernel_filename);
|
||||
error_report("could not load kernel '%s'", kernel_filename);
|
||||
exit(1);
|
||||
}
|
||||
return kernel_entry;
|
||||
|
@ -64,7 +64,7 @@ static uint64_t load_kernel(const char *kernel_filename)
|
||||
if (load_elf(kernel_filename, NULL, NULL,
|
||||
&kernel_entry, NULL, &kernel_high,
|
||||
0, EM_RISCV, 1, 0) < 0) {
|
||||
error_report("qemu: could not load kernel '%s'", kernel_filename);
|
||||
error_report("could not load kernel '%s'", kernel_filename);
|
||||
exit(1);
|
||||
}
|
||||
return kernel_entry;
|
||||
@ -91,7 +91,7 @@ static hwaddr load_initrd(const char *filename, uint64_t mem_size,
|
||||
if (size == -1) {
|
||||
size = load_image_targphys(filename, *start, mem_size - *start);
|
||||
if (size == -1) {
|
||||
error_report("qemu: could not load ramdisk '%s'", filename);
|
||||
error_report("could not load ramdisk '%s'", filename);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
@ -37,24 +37,12 @@ typedef struct VFIOCCWDevice {
|
||||
bool warned_orb_pfch;
|
||||
} VFIOCCWDevice;
|
||||
|
||||
static inline void warn_once(bool *warned, const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
if (!warned || *warned) {
|
||||
return;
|
||||
}
|
||||
*warned = true;
|
||||
va_start(ap, fmt);
|
||||
warn_vreport(fmt, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
static inline void warn_once_pfch(VFIOCCWDevice *vcdev, SubchDev *sch,
|
||||
const char *msg)
|
||||
{
|
||||
warn_once(&vcdev->warned_orb_pfch, "vfio-ccw (devno %x.%x.%04x): %s",
|
||||
sch->cssid, sch->ssid, sch->devno, msg);
|
||||
warn_report_once_cond(&vcdev->warned_orb_pfch,
|
||||
"vfio-ccw (devno %x.%x.%04x): %s",
|
||||
sch->cssid, sch->ssid, sch->devno, msg);
|
||||
}
|
||||
|
||||
static void vfio_ccw_compute_needs_reset(VFIODevice *vdev)
|
||||
|
@ -44,36 +44,31 @@ void error_report(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
|
||||
void warn_report(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
|
||||
void info_report(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
|
||||
|
||||
bool error_report_once_cond(bool *printed, const char *fmt, ...)
|
||||
GCC_FMT_ATTR(2, 3);
|
||||
bool warn_report_once_cond(bool *printed, const char *fmt, ...)
|
||||
GCC_FMT_ATTR(2, 3);
|
||||
|
||||
/*
|
||||
* Similar to error_report(), except it prints the message just once.
|
||||
* Return true when it prints, false otherwise.
|
||||
*/
|
||||
#define error_report_once(fmt, ...) \
|
||||
({ \
|
||||
static bool print_once_; \
|
||||
bool ret_print_once_ = !print_once_; \
|
||||
\
|
||||
if (!print_once_) { \
|
||||
print_once_ = true; \
|
||||
error_report(fmt, ##__VA_ARGS__); \
|
||||
} \
|
||||
unlikely(ret_print_once_); \
|
||||
#define error_report_once(fmt, ...) \
|
||||
({ \
|
||||
static bool print_once_; \
|
||||
error_report_once_cond(&print_once_, \
|
||||
fmt, ##__VA_ARGS__); \
|
||||
})
|
||||
|
||||
/*
|
||||
* Similar to warn_report(), except it prints the message just once.
|
||||
* Return true when it prints, false otherwise.
|
||||
*/
|
||||
#define warn_report_once(fmt, ...) \
|
||||
({ \
|
||||
static bool print_once_; \
|
||||
bool ret_print_once_ = !print_once_; \
|
||||
\
|
||||
if (!print_once_) { \
|
||||
print_once_ = true; \
|
||||
warn_report(fmt, ##__VA_ARGS__); \
|
||||
} \
|
||||
unlikely(ret_print_once_); \
|
||||
#define warn_report_once(fmt, ...) \
|
||||
({ \
|
||||
static bool print_once_; \
|
||||
warn_report_once_cond(&print_once_, \
|
||||
fmt, ##__VA_ARGS__); \
|
||||
})
|
||||
|
||||
const char *error_get_progname(void);
|
||||
|
@ -310,3 +310,43 @@ void info_report(const char *fmt, ...)
|
||||
vreport(REPORT_TYPE_INFO, fmt, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
/*
|
||||
* Like error_report(), except print just once.
|
||||
* If *printed is false, print the message, and flip *printed to true.
|
||||
* Return whether the message was printed.
|
||||
*/
|
||||
bool error_report_once_cond(bool *printed, const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
assert(printed);
|
||||
if (*printed) {
|
||||
return false;
|
||||
}
|
||||
*printed = true;
|
||||
va_start(ap, fmt);
|
||||
vreport(REPORT_TYPE_ERROR, fmt, ap);
|
||||
va_end(ap);
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
* Like warn_report(), except print just once.
|
||||
* If *printed is false, print the message, and flip *printed to true.
|
||||
* Return whether the message was printed.
|
||||
*/
|
||||
bool warn_report_once_cond(bool *printed, const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
assert(printed);
|
||||
if (*printed) {
|
||||
return false;
|
||||
}
|
||||
*printed = true;
|
||||
va_start(ap, fmt);
|
||||
vreport(REPORT_TYPE_WARNING, fmt, ap);
|
||||
va_end(ap);
|
||||
return true;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user