mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Avi Kivity <avi@qumranet.com>
To: kvm-devel@lists.sourceforge.net
Cc: linux-kernel@vger.kernel.org,
	Harvey Harrison <harvey.harrison@gmail.com>
Subject: [PATCH 36/40] KVM: x86 emulator: make register_address_increment and JMP_REL static inlines
Date: Mon, 31 Mar 2008 17:37:20 +0300	[thread overview]
Message-ID: <1206974244-9716-37-git-send-email-avi@qumranet.com> (raw)
In-Reply-To: <1206974244-9716-1-git-send-email-avi@qumranet.com>

From: Harvey Harrison <harvey.harrison@gmail.com>

Change jmp_rel() to a function as well.

Signed-off-by: Harvey Harrison <harvey.harrison@gmail.com>
Signed-off-by: Avi Kivity <avi@qumranet.com>
---
 arch/x86/kvm/x86_emulate.c |   56 ++++++++++++++++++++-----------------------
 1 files changed, 26 insertions(+), 30 deletions(-)

diff --git a/arch/x86/kvm/x86_emulate.c b/arch/x86/kvm/x86_emulate.c
index 008db4d..cacdcf5 100644
--- a/arch/x86/kvm/x86_emulate.c
+++ b/arch/x86/kvm/x86_emulate.c
@@ -501,23 +501,19 @@ register_address(struct decode_cache *c, unsigned long base, unsigned long reg)
 	return base + address_mask(c, reg);
 }
 
-#define register_address_increment(reg, inc)                            \
-	do {								\
-		/* signed type ensures sign extension to long */        \
-		int _inc = (inc);					\
-		if (c->ad_bytes == sizeof(unsigned long))		\
-			(reg) += _inc;					\
-		else							\
-			(reg) = ((reg) & 				\
-				 ~ad_mask(c)) |	\
-				(((reg) + _inc) &			\
-				 ad_mask(c));	\
-	} while (0)
+static inline void
+register_address_increment(struct decode_cache *c, unsigned long *reg, int inc)
+{
+	if (c->ad_bytes == sizeof(unsigned long))
+		*reg += inc;
+	else
+		*reg = (*reg & ~ad_mask(c)) | ((*reg + inc) & ad_mask(c));
+}
 
-#define JMP_REL(rel) 							\
-	do {								\
-		register_address_increment(c->eip, rel);		\
-	} while (0)
+static inline void jmp_rel(struct decode_cache *c, int rel)
+{
+	register_address_increment(c, &c->eip, rel);
+}
 
 static int do_fetch_insn_byte(struct x86_emulate_ctxt *ctxt,
 			      struct x86_emulate_ops *ops,
@@ -1065,7 +1061,7 @@ static inline void emulate_push(struct x86_emulate_ctxt *ctxt)
 	c->dst.type  = OP_MEM;
 	c->dst.bytes = c->op_bytes;
 	c->dst.val = c->src.val;
-	register_address_increment(c->regs[VCPU_REGS_RSP], -c->op_bytes);
+	register_address_increment(c, &c->regs[VCPU_REGS_RSP], -c->op_bytes);
 	c->dst.ptr = (void *) register_address(c, ctxt->ss_base,
 					       c->regs[VCPU_REGS_RSP]);
 }
@@ -1082,7 +1078,7 @@ static inline int emulate_grp1a(struct x86_emulate_ctxt *ctxt,
 	if (rc != 0)
 		return rc;
 
-	register_address_increment(c->regs[VCPU_REGS_RSP], c->dst.bytes);
+	register_address_increment(c, &c->regs[VCPU_REGS_RSP], c->dst.bytes);
 
 	return 0;
 }
@@ -1395,7 +1391,7 @@ special_insn:
 		c->dst.type  = OP_MEM;
 		c->dst.bytes = c->op_bytes;
 		c->dst.val = c->src.val;
-		register_address_increment(c->regs[VCPU_REGS_RSP],
+		register_address_increment(c, &c->regs[VCPU_REGS_RSP],
 					   -c->op_bytes);
 		c->dst.ptr = (void *) register_address(
 			c, ctxt->ss_base, c->regs[VCPU_REGS_RSP]);
@@ -1407,7 +1403,7 @@ special_insn:
 			c->op_bytes, ctxt->vcpu)) != 0)
 			goto done;
 
-		register_address_increment(c->regs[VCPU_REGS_RSP],
+		register_address_increment(c, &c->regs[VCPU_REGS_RSP],
 					   c->op_bytes);
 		c->dst.type = OP_NONE;	/* Disable writeback. */
 		break;
@@ -1459,7 +1455,7 @@ special_insn:
 		int rel = insn_fetch(s8, 1, c->eip);
 
 		if (test_cc(c->b, ctxt->eflags))
-			JMP_REL(rel);
+			jmp_rel(c, rel);
 		break;
 	}
 	case 0x80 ... 0x83:	/* Grp1 */
@@ -1545,10 +1541,10 @@ special_insn:
 					&c->dst.val,
 					c->dst.bytes, ctxt->vcpu)) != 0)
 			goto done;
-		register_address_increment(c->regs[VCPU_REGS_RSI],
+		register_address_increment(c, &c->regs[VCPU_REGS_RSI],
 				       (ctxt->eflags & EFLG_DF) ? -c->dst.bytes
 							   : c->dst.bytes);
-		register_address_increment(c->regs[VCPU_REGS_RDI],
+		register_address_increment(c, &c->regs[VCPU_REGS_RDI],
 				       (ctxt->eflags & EFLG_DF) ? -c->dst.bytes
 							   : c->dst.bytes);
 		break;
@@ -1580,10 +1576,10 @@ special_insn:
 
 		emulate_2op_SrcV("cmp", c->src, c->dst, ctxt->eflags);
 
-		register_address_increment(c->regs[VCPU_REGS_RSI],
+		register_address_increment(c, &c->regs[VCPU_REGS_RSI],
 				       (ctxt->eflags & EFLG_DF) ? -c->src.bytes
 								  : c->src.bytes);
-		register_address_increment(c->regs[VCPU_REGS_RDI],
+		register_address_increment(c, &c->regs[VCPU_REGS_RDI],
 				       (ctxt->eflags & EFLG_DF) ? -c->dst.bytes
 								  : c->dst.bytes);
 
@@ -1595,7 +1591,7 @@ special_insn:
 						   ctxt->es_base,
 						   c->regs[VCPU_REGS_RDI]);
 		c->dst.val = c->regs[VCPU_REGS_RAX];
-		register_address_increment(c->regs[VCPU_REGS_RDI],
+		register_address_increment(c, &c->regs[VCPU_REGS_RDI],
 				       (ctxt->eflags & EFLG_DF) ? -c->dst.bytes
 							   : c->dst.bytes);
 		break;
@@ -1611,7 +1607,7 @@ special_insn:
 						 c->dst.bytes,
 						 ctxt->vcpu)) != 0)
 			goto done;
-		register_address_increment(c->regs[VCPU_REGS_RSI],
+		register_address_increment(c, &c->regs[VCPU_REGS_RSI],
 				       (ctxt->eflags & EFLG_DF) ? -c->dst.bytes
 							   : c->dst.bytes);
 		break;
@@ -1650,14 +1646,14 @@ special_insn:
 			goto cannot_emulate;
 		}
 		c->src.val = (unsigned long) c->eip;
-		JMP_REL(rel);
+		jmp_rel(c, rel);
 		c->op_bytes = c->ad_bytes;
 		emulate_push(ctxt);
 		break;
 	}
 	case 0xe9: /* jmp rel */
 	case 0xeb: /* jmp rel short */
-		JMP_REL(c->src.val);
+		jmp_rel(c, c->src.val);
 		c->dst.type = OP_NONE; /* Disable writeback. */
 		break;
 	case 0xf4:              /* hlt */
@@ -1857,7 +1853,7 @@ twobyte_insn:
 			goto cannot_emulate;
 		}
 		if (test_cc(c->b, ctxt->eflags))
-			JMP_REL(rel);
+			jmp_rel(c, rel);
 		c->dst.type = OP_NONE;
 		break;
 	}
-- 
1.5.4.5


  parent reply	other threads:[~2008-03-31 14:49 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-03-31 14:36 [PATCH 00/40] KVM updates for the 2.6.26 merge window (part I) Avi Kivity
2008-03-31 14:36 ` [PATCH 01/40] KVM: MMU: Update shadow ptes on partial guest pte writes Avi Kivity
2008-03-31 14:36 ` [PATCH 02/40] KVM: MMU: Simplify hash table indexing Avi Kivity
2008-03-31 14:36 ` [PATCH 03/40] KVM: x86 emulator: add support for group decoding Avi Kivity
2008-03-31 14:36 ` [PATCH 04/40] KVM: x86 emulator: group decoding for group 1A Avi Kivity
2008-03-31 14:36 ` [PATCH 05/40] KVM: x86 emulator: Group decoding for group 3 Avi Kivity
2008-03-31 14:36 ` [PATCH 06/40] KVM: x86 emulator: Group decoding for groups 4 and 5 Avi Kivity
2008-03-31 14:36 ` [PATCH 07/40] KVM: x86 emulator: add group 7 decoding Avi Kivity
2008-03-31 14:36 ` [PATCH 08/40] KVM: constify function pointer tables Avi Kivity
2008-03-31 14:36 ` [PATCH 09/40] KVM: Only x86 has pio Avi Kivity
2008-03-31 14:36 ` [PATCH 10/40] KVM: x86 emulator: group decoding for group 1 instructions Avi Kivity
2008-03-31 14:36 ` [PATCH 11/40] KVM: MMU: Decouple mmio from shadow page tables Avi Kivity
2008-03-31 14:36 ` [PATCH 12/40] KVM: Limit vcpu mmap size to one page on non-x86 Avi Kivity
2008-03-31 14:36 ` [PATCH 13/40] KVM: VMX: Enable Virtual Processor Identification (VPID) Avi Kivity
2008-03-31 14:36 ` [PATCH 14/40] KVM: Use CONFIG_PREEMPT_NOTIFIERS around struct preempt_notifier Avi Kivity
2008-03-31 14:36 ` [PATCH 15/40] KVM: Disable pagefaults during copy_from_user_inatomic() Avi Kivity
2008-03-31 14:37 ` [PATCH 16/40] KVM: make EFER_RESERVED_BITS configurable for architecture code Avi Kivity
2008-03-31 14:37 ` [PATCH 17/40] KVM: align valid EFER bits with the features of the host system Avi Kivity
2008-03-31 14:37 ` [PATCH 18/40] KVM: VMX: unifdef the EFER specific code Avi Kivity
2008-03-31 14:37 ` [PATCH 19/40] KVM: allow access to EFER in 32bit KVM Avi Kivity
2008-03-31 14:37 ` [PATCH 20/40] KVM: SVM: move feature detection to hardware setup code Avi Kivity
2008-03-31 14:37 ` [PATCH 21/40] KVM: SVM: add detection of Nested Paging feature Avi Kivity
2008-03-31 14:37 ` [PATCH 22/40] KVM: SVM: add module parameter to disable Nested Paging Avi Kivity
2008-03-31 14:37 ` [PATCH 23/40] KVM: export information about NPT to generic x86 code Avi Kivity
2008-03-31 14:37 ` [PATCH 24/40] KVM: MMU: make the __nonpaging_map function generic Avi Kivity
2008-03-31 14:37 ` [PATCH 25/40] KVM: export the load_pdptrs() function to modules Avi Kivity
2008-03-31 14:37 ` [PATCH 26/40] KVM: MMU: add TDP support to the KVM MMU Avi Kivity
2008-03-31 14:37 ` [PATCH 27/40] KVM: SVM: add support for Nested Paging Avi Kivity
2008-03-31 14:37 ` [PATCH 28/40] KVM: VMX: fix typo in VMX header define Avi Kivity
2008-03-31 14:37 ` [PATCH 29/40] KVM: SVM: let init_vmcb() take struct vcpu_svm as parameter Avi Kivity
2008-03-31 14:37 ` [PATCH 30/40] KVM: SVM: allocate the MSR permission map per VCPU Avi Kivity
2008-03-31 14:37 ` [PATCH 31/40] KVM: SVM: enable LBR virtualization Avi Kivity
2008-03-31 14:37 ` [PATCH 32/40] KVM: paravirtualized clocksource: host part Avi Kivity
2008-03-31 14:37 ` [PATCH 33/40] x86: KVM guest: paravirtualized clocksource Avi Kivity
2008-03-31 14:37 ` [PATCH 34/40] KVM: x86 emulator: add ad_mask static inline Avi Kivity
2008-03-31 14:37 ` [PATCH 35/40] KVM: x86 emulator: make register_address, address_mask static inlines Avi Kivity
2008-03-31 14:37 ` Avi Kivity [this message]
2008-03-31 14:37 ` [PATCH 37/40] KVM: Add API to retrieve the number of supported vcpus per vm Avi Kivity
2008-03-31 14:37 ` [PATCH 38/40] KVM: Increase vcpu count to 16 Avi Kivity
2008-03-31 14:37 ` [PATCH 39/40] KVM: Add API for determining the number of supported memory slots Avi Kivity
2008-03-31 14:37 ` [PATCH 40/40] KVM: Increase the number of user memory slots per vm Avi Kivity

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1206974244-9716-37-git-send-email-avi@qumranet.com \
    --to=avi@qumranet.com \
    --cc=harvey.harrison@gmail.com \
    --cc=kvm-devel@lists.sourceforge.net \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®