summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* qom: Add QOM support to user emulatorsAndreas Färber2012-03-138-8/+70
| | | | | | | | | | | | Link the Object base class and the module infrastructure for class registration. Introduce $(universal-obj-y) for objects that are more common than $(common-obj-y), so that those only get built once. Call QOM module init for type registration. Signed-off-by: Andreas Färber <afaerber@suse.de> Cc: Anthony Liguori <anthony@codemonkey.ws> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
* qom: Register QOM infrastructure earlyAndreas Färber2012-03-131-2/+2
| | | | | | | | | | The constructors for QOM TYPE_INTERFACE were executed rather late in vl.c's main(). Call them very early so that QOM can safely be used for machines and CPUs. Signed-off-by: Andreas Färber <afaerber@suse.de> Cc: Anthony Liguori <anthony@codemonkey.ws> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
* kvmclock: Always register typeAndreas Färber2012-03-131-2/+0
| | | | | | | | | | | | | | | | | | | Currently, the "kvmclock" type is only registered when kvm_enabled(). This breaks when moving type registration to before command line parsing (so that QOM types can be used for CPU and machine). Since the QOM classes are lazy-initialized anyway and kvmclock_create() has another kvm_enabled() check, simply drop the KVM check in kvmclock_register_types(). kvm-i8259, kvm-apic and kvm-ioapic do not suffer from such a check. Reviewed-by: please. Signed-off-by: Andreas Färber <afaerber@suse.de> Reviewed-by: Jan Kiszka <jan.kiszka@siemens.com> Cc: Marcelo Tosatti <mtosatti@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
* Merge remote-tracking branch 'mdroth/qga-pull-3-12-2012' into stagingAnthony Liguori2012-03-127-21/+774
|\ | | | | | | | | | | | | | | | | | | | | * mdroth/qga-pull-3-12-2012: qemu-ga: add guest-sync-delimited qemu-ga: add guest-network-get-interfaces command qemu-ga: add win32 guest-suspend-ram command qemu-ga: add win32 guest-suspend-disk command. qemu-ga: add guest-suspend-hybrid qemu-ga: add guest-suspend-ram qemu-ga: add guest-suspend-disk
| * qemu-ga: add guest-sync-delimitedMichael Roth2012-03-125-9/+77
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | guest-sync leaves it as an exercise to the user as to how to reliably obtain the response to guest-sync if the client had previously read in a partial response (due qemu-ga previously being restarted mid-"sentence" due to reboot, forced restart, etc). qemu-ga handles this situation on its end by having a client precede their guest-sync request with a 0xFF byte (invalid UTF-8), which qemu-ga/QEMU JSON parsers will treat as a flush event. Thus we can reliably flush the qemu-ga parser state in preparation for receiving the guest-sync request. guest-sync-delimited provides the same functionality for a client: when a guest-sync-delimited is issued, qemu-ga will precede it's response with a 0xFF byte that the client can use as an indicator to flush its buffer/parser state in preparation for reliably receiving the guest-sync-delimited response. It is also useful as an optimization for clients, since, after issuing a guest-sync-delimited, clients can safely discard all stale data read from the channel until the 0xFF is found. More information available on the wiki: http://wiki.qemu.org/Features/QAPI/GuestAgent#QEMU_Guest_Agent_Protocol Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
| * qemu-ga: add guest-network-get-interfaces commandMichal Privoznik2012-03-123-0/+246
| | | | | | | | | | | | | | | | | | | | | | This command returns an array of: [ifname, hwaddr, [ipaddr, ipaddr_family, prefix] ] for each interface in the system. Currently, only IPv4 and IPv6 are supported. Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
| * qemu-ga: add win32 guest-suspend-ram commandMichael Roth2012-03-121-9/+25
| | | | | | | | S3 sleep implementation for windows.
| * qemu-ga: add win32 guest-suspend-disk command.Gal Hammer2012-03-122-13/+121
| | | | | | | | | | | | | | Implement guest-suspend-disk RPC for Windows. Functionally this should be equivalent to the posix implementation. Signed-off-by: Gal Hammer <ghammer@redhat.com>
| * qemu-ga: add guest-suspend-hybridLuiz Capitulino2012-03-123-0/+38
| | | | | | | | Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
| * qemu-ga: add guest-suspend-ramLuiz Capitulino2012-03-123-0/+43
| | | | | | | | Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
| * qemu-ga: add guest-suspend-diskLuiz Capitulino2012-03-124-1/+235
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | As the command name implies, this command suspends the guest to disk. The suspend operation is implemented by two functions: bios_supports_mode() and guest_suspend(). Both functions are generic enough to be used by other suspend modes (introduced by next commits). Both functions will try to use the scripts provided by the pm-utils package if it's available. If it's not available, a manual method, which consists of directly writing to '/sys/power/state', will be used. To reap terminated children, a new signal handler is installed in the parent to catch SIGCHLD signals and a non-blocking call to waitpid() is done to collect their exit statuses. The statuses, however, are discarded. The approach used to query the guest for suspend support deserves some explanation. It's implemented by bios_supports_mode() and shown below: qemu-ga | create pipe | fork() ----------------- | | | | | fork() | -------------------------- | | | | | | | | exec('pm-is-supported') | | | wait() | write exit status to pipe | exit | read pipe This might look complex, but the resulting code is quite simple. The purpose of that approach is to allow qemu-ga to reap its children (semi-)automatically from its SIGCHLD handler. Implementing this the obvious way, that's, doing the exec() call from the first child process, would force us to introduce a more complex way to reap qemu-ga's children. Like registering PIDs to be reaped and having a way to wait for them when returning their exit status to qemu-ga is necessary. The approach explained above avoids that complexity. Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
* | Merge remote-tracking branch 'kwolf/for-anthony' into stagingAnthony Liguori2012-03-1228-267/+1054
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * kwolf/for-anthony: test-coroutine: add performance test for nesting coroutine: adding configure option for sigaltstack coroutine backend coroutine: adding configure choose mechanism for coroutine backend coroutine: adding sigaltstack method (.c source) qcow2: Reduce number of I/O requests qcow2: Add qcow2_alloc_clusters_at() qcow2: Factor out count_cow_clusters qmp: convert blockdev-snapshot-sync to a wrapper around transactions add mode field to blockdev-snapshot-sync transaction item rename blockdev-group-snapshot-sync qapi: complete implementation of unions use QSIMPLEQ_FOREACH_SAFE when freeing list elements Add 'make check-block' make check: Add qemu-iotests subset qemu-iotests: Mark some tests as quick qcow2: Add error messages in qcow2_truncate block: handle -EBUSY in bdrv_commit_all() qcow2: Add some tracing qed: do not evict in-use L2 table cache entries Group snapshot: Fix format name for backing file
| * | test-coroutine: add performance test for nestingAlex Barcelo2012-03-121-0/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The performance test will also check for nesting. It will do a certain quantity of cycles, and each of one will do a depth nesting process. This is useful for benchmarking the creation of coroutines, given that nesting is creation-intensive (and the other perf test does not benchmark that). Signed-off-by: Alex Barcelo <abarcelo@ac.upc.edu> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
| * | coroutine: adding configure option for sigaltstack coroutine backendAlex Barcelo2012-03-122-1/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | It's possible to use sigaltstack backend with --with-coroutine=sigaltstack v2: changed from enable/disable configure flags Signed-off-by: Alex Barcelo <abarcelo@ac.upc.edu> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
| * | coroutine: adding configure choose mechanism for coroutine backendAlex Barcelo2012-03-121-8/+29
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Configure tries, as a default, ucontext functions for the coroutines. But now the user can force another backend by --with-coroutine=BACKEND option v2: Using --with-coroutine=BACKEND instead of enable disable individual configure options Signed-off-by: Alex Barcelo <abarcelo@ac.upc.edu> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
| * | coroutine: adding sigaltstack method (.c source)Alex Barcelo2012-03-121-0/+334
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This file is based in both coroutine-ucontext.c and pth_mctx.c (from the GNU Portable Threads library). The mechanism used to change stacks is the sigaltstack function (variant 2 of the pth library). v2: Some corrections. Moving global variables into thread storage (CoroutineThreadState). Signed-off-by: Alex Barcelo <abarcelo@ac.upc.edu> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
| * | qcow2: Reduce number of I/O requestsKevin Wolf2012-03-123-77/+168
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If the first part of a write request is allocated, but the second isn't and it can be allocated so that the resulting area is contiguous, handle it at once. This is a common case for sequential writes. After this patch, alloc_cluster_offset() only checks if the clusters are already allocated or how many new clusters can be allocated contigouosly. The actual cluster allocation is split off into a new function do_alloc_cluster_offset(). Signed-off-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
| * | qcow2: Add qcow2_alloc_clusters_at()Kevin Wolf2012-03-122-0/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | This function allows to allocate clusters at a given offset in the image file. This is useful if you want to allocate the second part of an area that must be contiguous. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
| * | qcow2: Factor out count_cow_clustersKevin Wolf2012-03-121-19/+36
| | | | | | | | | | | | | | | Signed-off-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
| * | qmp: convert blockdev-snapshot-sync to a wrapper around transactionsPaolo Bonzini2012-03-125-73/+44
| | | | | | | | | | | | | | | | | | | | | | | | | | | Simplify the blockdev-snapshot-sync code and gain failsafe operation by turning it into a wrapper around the new transaction command. A new option is also added matching "mode". Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
| * | add mode field to blockdev-snapshot-sync transaction itemPaolo Bonzini2012-03-123-10/+44
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The mode field lets a management application create the snapshot destination outside QEMU. Right now, the only modes are "existing" and "absolute-paths". Mirroring introduces "no-backing-file". In the future "relative-paths" could be implemented too. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
| * | rename blockdev-group-snapshot-syncPaolo Bonzini2012-03-123-76/+96
| | | | | | | | | | | | | | | | | | | | | | | | We will add other kinds of operation. Prepare for this by adjusting the schema. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
| * | qapi: complete implementation of unionsPaolo Bonzini2012-03-125-1/+98
| | | | | | | | | | | | | | | | | | Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Acked-by: Luiz Capitulino <lcapitulino@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
| * | use QSIMPLEQ_FOREACH_SAFE when freeing list elementsPaolo Bonzini2012-03-121-2/+2
| | | | | | | | | | | | | | | Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
| * | Add 'make check-block'Kevin Wolf2012-03-122-1/+27
| | | | | | | | | | | | | | | | | | Runs the full qemu-iotests suite for various image formats. Signed-off-by: Kevin Wolf <kwolf@redhat.com>
| * | make check: Add qemu-iotests subsetKevin Wolf2012-03-122-0/+22
| | | | | | | | | | | | | | | | | | Run the 'quick' group from qemu-iotests during 'make check'. Signed-off-by: Kevin Wolf <kwolf@redhat.com>
| * | qemu-iotests: Mark some tests as quickKevin Wolf2012-03-121-12/+12
| | | | | | | | | | | | | | | | | | | | | | | | This creates a new test group 'quick' for some test case that take at most a couple of seconds each, so that the group can be run during a quick 'make check' Signed-off-by: Kevin Wolf <kwolf@redhat.com>
| * | qcow2: Add error messages in qcow2_truncateKevin Wolf2012-03-122-1/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | qemu-img resize has some limitations with qcow2, but the user is only told that "this image format does not support resize". Quite confusing, so add some more detailed error_report() calls and change "this image format" into "this image". Signed-off-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
| * | block: handle -EBUSY in bdrv_commit_all()Stefan Hajnoczi2012-03-123-6/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Monitor operations that manipulate image files must not execute while a background job (like image streaming) is in progress. This prevents corruptions from happening when two pieces of code are manipulating the image file without knowledge of each other. The monitor "commit" command raises QERR_DEVICE_IN_USE when bdrv_commit() returns -EBUSY but "commit all" has no error handling. This is easy to fix, although note that we do not deliver a detailed error about which device was busy in the "commit all" case. Suggested-by: Kevin Wolf <kwolf@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
| * | qcow2: Add some tracingKevin Wolf2012-03-124-1/+65
| | | | | | | | | | | | | | | Signed-off-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
| * | qed: do not evict in-use L2 table cache entriesStefan Hajnoczi2012-03-121-4/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The L2 table cache reduces QED metadata reads that would be required when translating LBAs to offsets into the image file. Since requests execute in parallel it is possible to share an L2 table between multiple requests. There is a potential data corruption issue when an in-use L2 table is evicted from the cache because the following situation occurs: 1. An allocating write performs an update to L2 table "A". 2. Another request needs L2 table "B" and causes table "A" to be evicted. 3. A new read request needs L2 table "A" but it is not cached. As a result the L2 update from #1 can overlap with the L2 fetch from #3. We must avoid doing overlapping I/O requests here since the worst case outcome is that the L2 fetch completes before the L2 update and yields stale data. In that case we would effectively discard the L2 update and lose data clusters! Thanks to Benoît Canet <benoit.canet@gmail.com> for extensive testing and debugging which lead to discovery of this bug. Reported-by: Benoît Canet <benoit.canet@gmail.com> Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com> Tested-by: Benoît Canet <benoit.canet@gmail.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
| * | Group snapshot: Fix format name for backing filePaolo Bonzini2012-03-121-1/+2
| |/ | | | | | | | | Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
* | Merge remote-tracking branch 'qemu-kvm/memory/core' into stagingAnthony Liguori2012-03-126-267/+168
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | * qemu-kvm/memory/core: memory: get rid of cpu_register_io_memory() memory: dispatch directly via MemoryRegion exec: fix code tlb entry misused as iotlb in get_page_addr_code() memory: store section indices in iotlb instead of io indices memory: make phys_page_find() return an unadjusted section
| * | memory: get rid of cpu_register_io_memory()Avi Kivity2012-03-085-73/+1
| | | | | | | | | | | | | | | | | | | | | The return value of cpu_register_io_memory() is no longer used anywhere, so we can remove it and all associated data and code. Signed-off-by: Avi Kivity <avi@redhat.com>
| * | memory: dispatch directly via MemoryRegionAvi Kivity2012-03-084-98/+69
| | | | | | | | | | | | | | | | | | | | | Instead of indirecting via io_mem_region, dispatch directly through the MemoryRegion obtained from the iotlb or phys_page_find(). Signed-off-by: Avi Kivity <avi@redhat.com>
| * | exec: fix code tlb entry misused as iotlb in get_page_addr_code()Avi Kivity2012-03-081-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | get_page_addr_code() reads a code tlb entry, but interprets it as an iotlb entry. This works by accident since the low bits of a RAM code tlb entry are clear, and match a RAM iotlb entry. This accident is about to unhappen, so fix the code to use an iotlb entry (using the code entry with TLB_MMIO may fail if the page is a watchpoint). Signed-off-by: Avi Kivity <avi@redhat.com>
| * | memory: store section indices in iotlb instead of io indicesAvi Kivity2012-03-083-8/+24
| | | | | | | | | | | | | | | | | | A step towards eliminating io indices. Signed-off-by: Avi Kivity <avi@redhat.com>
| * | memory: make phys_page_find() return an unadjusted sectionAvi Kivity2012-03-081-116/+102
| | | | | | | | | | | | | | | | | | | | | | | | We'd like to store the section index in the iotlb, so we can't adjust it before returning. Return an unadjusted section and instead introduce section_addr(), which does the adjustment later. Signed-off-by: Avi Kivity <avi@redhat.com>
* | | Merge remote-tracking branch 'stefanha/tracing' into stagingAnthony Liguori2012-03-127-12/+64
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * stefanha/tracing: vga: add trace event for ppm_save console: add some trace events maintainers: Add docs/tracing.txt to Tracing docs: correct ./configure line in tracing.txt trace: make trace_thread_create() use its function arg tracetool: Omit useless QEMU_*_ENABLED() check trace: Provide a per-event status define for conditional compilation
| * | | vga: add trace event for ppm_saveAlon Levy2012-03-122-0/+5
| | | | | | | | | | | | | | | | | | | | Signed-off-by: Alon Levy <alevy@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
| * | | console: add some trace eventsAlon Levy2012-03-122-0/+7
| | | | | | | | | | | | | | | | | | | | Signed-off-by: Alon Levy <alevy@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
| * | | maintainers: Add docs/tracing.txt to TracingAndreas Färber2012-03-121-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The topic of whether and by whom docs/tracing.txt is maintained was brought up. It currently does not have an official maintainer. Add it to the tracing section so that Stefan gets cc'ed on patches. Signed-off-by: Andreas Färber <afaerber@suse.de> Acked-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com> Cc: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
| * | | docs: correct ./configure line in tracing.txtJun Koi2012-03-121-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch corrects the configure's trace option in docs/tracing.txt. Signed-off-by: Jun Koi <junkoi2004@gmail.com> Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
| * | | trace: make trace_thread_create() use its function argJun Koi2012-03-121-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch makes trace_thread_create() to use its function arg to initialize thread. The other choice is to make this a function to use void arg, but i prefer this way. Signed-off-by: Jun Koi <junkoi2004@gmail.com> Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
| * | | tracetool: Omit useless QEMU_*_ENABLED() checkStefan Hajnoczi2012-03-121-3/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | SystemTap provides a "semaphore" that can optionally be tested before executing a trace event. The purpose of this mechanism is to skip expensive tracing code when the trace event is disabled. For example, some applications may have trace events that format or convert strings for trace events. This expensive processing should only be done in the case where the trace event is enabled. Since QEMU's generated trace events never have such special-purpose code, there is no reason to add the semaphore check. Reviewed-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
| * | | trace: Provide a per-event status define for conditional compilationLluís Vilanova2012-03-122-7/+48
| | |/ | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Adds a 'TRACE_${NAME}_ENABLED' preprocessor define for each tracing event in "trace.h". This lets the user conditionally compile code with a relatively high execution cost that is only necessary when producing the tracing information for an event that is enabled. Note that events using this define will probably have the "disable" property by default, in order to avoid such costs on regular builds. Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu> Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
* | | Merge remote-tracking branch 'qmp/queue/qmp' into stagingAnthony Liguori2012-03-122-7/+10
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | * qmp/queue/qmp: qapi-schema.json: fix comment for type ObjectPropretyInfo qapi-schema: fix typos and explain 'spice' auth qjson.h: include compiler.h for GCC_FMT_ATTR
| * | | qapi-schema.json: fix comment for type ObjectPropretyInfoAlon Levy2012-03-091-1/+1
| | | | | | | | | | | | | | | | | | | | Signed-off-by: Alon Levy <alevy@redhat.com> Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
| * | | qapi-schema: fix typos and explain 'spice' authAlon Levy2012-03-091-6/+8
| | | | | | | | | | | | | | | | | | | | Signed-off-by: Alon Levy <alevy@redhat.com> Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
| * | | qjson.h: include compiler.h for GCC_FMT_ATTRAlon Levy2012-03-091-0/+1
| | | | | | | | | | | | | | | | | | | | Signed-off-by: Alon Levy <alevy@redhat.com> Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
OpenPOWER on IntegriCloud