Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 5 Jan 2013 02:10:28 +0000 (UTC)
From:      Neel Natu <neel@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r245053 - projects/bhyve/sys/x86/include
Message-ID:  <201301050210.r052ASTN023845@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: neel
Date: Sat Jan  5 02:10:27 2013
New Revision: 245053
URL: http://svnweb.freebsd.org/changeset/base/245053

Log:
  Get rid of workarounds to avoid ins/outs instructions emitted by the guest.
  
  They can be emulated if needed in the future.
  
  Obtained from:	NetApp

Modified:
  projects/bhyve/sys/x86/include/bus.h

Modified: projects/bhyve/sys/x86/include/bus.h
==============================================================================
--- projects/bhyve/sys/x86/include/bus.h	Sat Jan  5 02:08:47 2013	(r245052)
+++ projects/bhyve/sys/x86/include/bus.h	Sat Jan  5 02:10:27 2013	(r245053)
@@ -294,13 +294,9 @@ bus_space_read_multi_1(bus_space_tag_t t
 		       bus_size_t offset, u_int8_t *addr, size_t count)
 {
 
-	if (tag == X86_BUS_SPACE_IO) {
-		while (count > 0) {
-			*addr = inb(bsh + offset);
-			count--;
-			addr++;
-		}
-	} else {
+	if (tag == X86_BUS_SPACE_IO)
+		insb(bsh + offset, addr, count);
+	else {
 #ifdef __GNUCLIKE_ASM
 		__asm __volatile("				\n\
 			cld					\n\
@@ -319,13 +315,9 @@ bus_space_read_multi_2(bus_space_tag_t t
 		       bus_size_t offset, u_int16_t *addr, size_t count)
 {
 
-	if (tag == X86_BUS_SPACE_IO) {
-		while (count > 0) {
-			*addr = inw(bsh + offset);
-			count--;
-			addr++;
-		}
-	} else {
+	if (tag == X86_BUS_SPACE_IO)
+		insw(bsh + offset, addr, count);
+	else {
 #ifdef __GNUCLIKE_ASM
 		__asm __volatile("				\n\
 			cld					\n\
@@ -344,13 +336,9 @@ bus_space_read_multi_4(bus_space_tag_t t
 		       bus_size_t offset, u_int32_t *addr, size_t count)
 {
 
-	if (tag == X86_BUS_SPACE_IO) {
-		while (count > 0) {
-			*addr = inl(bsh + offset);
-			count--;
-			addr++;
-		}
-	} else {
+	if (tag == X86_BUS_SPACE_IO)
+		insl(bsh + offset, addr, count);
+	else {
 #ifdef __GNUCLIKE_ASM
 		__asm __volatile("				\n\
 			cld					\n\
@@ -585,13 +573,9 @@ bus_space_write_multi_1(bus_space_tag_t 
 			bus_size_t offset, const u_int8_t *addr, size_t count)
 {
 
-	if (tag == X86_BUS_SPACE_IO) {
-		while (count > 0) {
-			outb(bsh + offset, *addr);
-			addr++;
-			count--;
-		}
-	} else {
+	if (tag == X86_BUS_SPACE_IO)
+		outsb(bsh + offset, addr, count);
+	else {
 #ifdef __GNUCLIKE_ASM
 		__asm __volatile("				\n\
 			cld					\n\
@@ -610,13 +594,9 @@ bus_space_write_multi_2(bus_space_tag_t 
 			bus_size_t offset, const u_int16_t *addr, size_t count)
 {
 
-	if (tag == X86_BUS_SPACE_IO) {
-		while (count > 0) {
-			outw(bsh + offset, *addr);
-			addr++;
-			count--;
-		}
-	} else {
+	if (tag == X86_BUS_SPACE_IO)
+		outsw(bsh + offset, addr, count);
+	else {
 #ifdef __GNUCLIKE_ASM
 		__asm __volatile("				\n\
 			cld					\n\
@@ -635,13 +615,9 @@ bus_space_write_multi_4(bus_space_tag_t 
 			bus_size_t offset, const u_int32_t *addr, size_t count)
 {
 
-	if (tag == X86_BUS_SPACE_IO) {
-		while (count > 0) {
-			outl(bsh + offset, *addr);
-			addr++;
-			count--;
-		}
-	} else {
+	if (tag == X86_BUS_SPACE_IO)
+		outsl(bsh + offset, addr, count);
+	else {
 #ifdef __GNUCLIKE_ASM
 		__asm __volatile("				\n\
 			cld					\n\



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201301050210.r052ASTN023845>