From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marcelo Tosatti Subject: [patch 1/3] kvm test: add monitor_printf (v2) Date: Fri, 3 Sep 2010 14:23:43 -0300 Message-ID: <20100903172343.GA12063@amt.cnet> References: <20100902233652.853027771@redhat.com> <20100902233712.666073971@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii To: kvm@vger.kernel.org Return-path: Received: from mx1.redhat.com ([209.132.183.28]:56597 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750889Ab0IETlp (ORCPT ); Sun, 5 Sep 2010 15:41:45 -0400 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.13.8/8.13.8) with ESMTP id o85JfjuH026973 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Sun, 5 Sep 2010 15:41:45 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id o85JfjYJ013878 for ; Sun, 5 Sep 2010 15:41:45 -0400 Received: from amt.cnet (vpn-8-204.rdu.redhat.com [10.11.8.204]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id o85JfiH8020881 for ; Sun, 5 Sep 2010 15:41:44 -0400 Received: from amt.cnet (localhost.localdomain [127.0.0.1]) by amt.cnet (Postfix) with ESMTP id 9B7B068A070 for ; Fri, 3 Sep 2010 14:23:44 -0300 (BRT) Received: (from marcelo@localhost) by amt.cnet (8.14.4/8.14.4/Submit) id o83HNhUF012153 for kvm@vger.kernel.org; Fri, 3 Sep 2010 14:23:43 -0300 Content-Disposition: inline In-Reply-To: <20100902233712.666073971@redhat.com> 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_monitor(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; +}