Create an operations structure so that the libqos interface can be architecture agnostic, and create a pc-specific interface to functions like qtest_boot. Move the libqos object in the Makefile from being ahci-test only to being linked with all tests that utilize the libqos features. Signed-off-by: John Snow <jsnow@redhat.com> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Message-id: 1421698563-6977-8-git-send-email-jsnow@redhat.com Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
		
			
				
	
	
		
			64 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#include <stdio.h>
 | 
						|
#include <stdlib.h>
 | 
						|
#include <glib.h>
 | 
						|
#include <unistd.h>
 | 
						|
#include <fcntl.h>
 | 
						|
#include <sys/wait.h>
 | 
						|
 | 
						|
#include "libqtest.h"
 | 
						|
#include "libqos/libqos.h"
 | 
						|
#include "libqos/pci.h"
 | 
						|
 | 
						|
/*** Test Setup & Teardown ***/
 | 
						|
 | 
						|
/**
 | 
						|
 * Launch QEMU with the given command line,
 | 
						|
 * and then set up interrupts and our guest malloc interface.
 | 
						|
 */
 | 
						|
QOSState *qtest_vboot(QOSOps *ops, const char *cmdline_fmt, va_list ap)
 | 
						|
{
 | 
						|
    char *cmdline;
 | 
						|
 | 
						|
    struct QOSState *qs = g_malloc(sizeof(QOSState));
 | 
						|
 | 
						|
    cmdline = g_strdup_vprintf(cmdline_fmt, ap);
 | 
						|
    qs->qts = qtest_start(cmdline);
 | 
						|
    qs->ops = ops;
 | 
						|
    qtest_irq_intercept_in(global_qtest, "ioapic");
 | 
						|
    if (ops && ops->init_allocator) {
 | 
						|
        qs->alloc = ops->init_allocator(ALLOC_NO_FLAGS);
 | 
						|
    }
 | 
						|
 | 
						|
    g_free(cmdline);
 | 
						|
    return qs;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Launch QEMU with the given command line,
 | 
						|
 * and then set up interrupts and our guest malloc interface.
 | 
						|
 */
 | 
						|
QOSState *qtest_boot(QOSOps *ops, const char *cmdline_fmt, ...)
 | 
						|
{
 | 
						|
    QOSState *qs;
 | 
						|
    va_list ap;
 | 
						|
 | 
						|
    va_start(ap, cmdline_fmt);
 | 
						|
    qs = qtest_vboot(ops, cmdline_fmt, ap);
 | 
						|
    va_end(ap);
 | 
						|
 | 
						|
    return qs;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Tear down the QEMU instance.
 | 
						|
 */
 | 
						|
void qtest_shutdown(QOSState *qs)
 | 
						|
{
 | 
						|
    if (qs->alloc && qs->ops && qs->ops->uninit_allocator) {
 | 
						|
        qs->ops->uninit_allocator(qs->alloc);
 | 
						|
        qs->alloc = NULL;
 | 
						|
    }
 | 
						|
    qtest_quit(qs->qts);
 | 
						|
    g_free(qs);
 | 
						|
}
 |