From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marcelo Tosatti Subject: [patch 1/3] kvm test: add monitor_printf Date: Thu, 02 Sep 2010 20:36:53 -0300 Message-ID: <20100902233712.666073971@redhat.com> References: <20100902233652.853027771@redhat.com> Cc: Marcelo Tosatti To: kvm@vger.kernel.org Return-path: Received: from mx1.redhat.com ([209.132.183.28]:20124 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755301Ab0IBXuZ (ORCPT ); Thu, 2 Sep 2010 19:50:25 -0400 Received: from int-mx03.intmail.prod.int.phx2.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id o82NoOej021172 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Thu, 2 Sep 2010 19:50:24 -0400 Content-Disposition: inline; filename=monitor Sender: kvm-owner@vger.kernel.org List-ID: Signed-off-by: Marcelo Tosatti Index: kvm-unit-tests/lib/x86/io.c =================================================================== --- kvm-unit-tests.orig/lib/x86/io.c +++ kvm-unit-tests/lib/x86/io.c @@ -2,6 +2,7 @@ #include "smp.h" static struct spinlock lock; +static struct spinlock mon_lock; static void print_serial(const char *buf) { @@ -17,6 +18,20 @@ void puts(const char *s) spin_unlock(&lock); } +static void print_monitor(const char *buf) +{ + unsigned long len = strlen(buf); + + asm volatile ("rep/outsb" : "+S"(buf), "+c"(len) : "d"(0xf2)); +} + +void puts_monitor(const char *s) +{ + spin_lock(&mon_lock); + print_serial(s); + spin_unlock(&mon_lock); +} + void exit(int code) { asm volatile("out %0, %1" : : "a"(code), "d"((short)0xf4)); Index: kvm-unit-tests/lib/libcflat.h =================================================================== --- kvm-unit-tests.orig/lib/libcflat.h +++ kvm-unit-tests/lib/libcflat.h @@ -45,8 +45,10 @@ extern char *strcat(char *dest, const ch extern int printf(const char *fmt, ...); extern int vsnprintf(char *buf, int size, const char *fmt, va_list va); +extern int monitor_printf(const char *fmt, ...); extern void puts(const char *s); +extern void puts_monitor(const char *s); extern void *memset(void *s, int c, size_t n); Index: kvm-unit-tests/lib/printf.c =================================================================== --- kvm-unit-tests.orig/lib/printf.c +++ kvm-unit-tests/lib/printf.c @@ -177,3 +177,16 @@ int printf(const char *fmt, ...) puts(buf); return r; } + +int monitor_printf(const char *fmt, ...) +{ + va_list va; + char buf[2000]; + int r; + + va_start(va, fmt); + r = vsnprintf(buf, sizeof buf, fmt, va); + va_end(va); + puts_monitor(buf); + return r; +}