Merge remote-tracking branch 'upstream/master' into queue
Merging critical fixes from upstream required for development. * upstream/master: (809 commits) libata: Add a space to " 2GB ATA Flash Disk" DMA blacklist entry Revert "powerpc: Update g5_defconfig" powerpc/perf: Use pmc_overflow() to detect rolled back events powerpc: Fix VMX in interrupt check in POWER7 copy loops powerpc: POWER7 copy_to_user/copy_from_user patch applied twice powerpc: Fix personality handling in ppc64_personality() powerpc/dma-iommu: Fix IOMMU window check powerpc: Remove unnecessary ifdefs powerpc/kgdb: Restore current_thread_info properly powerpc/kgdb: Bail out of KGDB when we've been triggered powerpc/kgdb: Do not set kgdb_single_step on ppc powerpc/mpic_msgr: Add missing includes powerpc: Fix null pointer deref in perf hardware breakpoints powerpc: Fixup whitespace in xmon powerpc: Fix xmon dl command for new printk implementation xfs: check for possible overflow in xfs_ioc_trim xfs: unlock the AGI buffer when looping in xfs_dialloc xfs: fix uninitialised variable in xfs_rtbuf_get() powerpc/fsl: fix "Failed to mount /dev: No such device" errors powerpc/fsl: update defconfigs ... Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
This commit is contained in:
commit
c78aa4c4b9
859 changed files with 10631 additions and 5906 deletions
|
@ -475,13 +475,26 @@ register_address(struct x86_emulate_ctxt *ctxt, unsigned long reg)
|
|||
return address_mask(ctxt, reg);
|
||||
}
|
||||
|
||||
static void masked_increment(ulong *reg, ulong mask, int inc)
|
||||
{
|
||||
assign_masked(reg, *reg + inc, mask);
|
||||
}
|
||||
|
||||
static inline void
|
||||
register_address_increment(struct x86_emulate_ctxt *ctxt, unsigned long *reg, int inc)
|
||||
{
|
||||
ulong mask;
|
||||
|
||||
if (ctxt->ad_bytes == sizeof(unsigned long))
|
||||
*reg += inc;
|
||||
mask = ~0UL;
|
||||
else
|
||||
*reg = (*reg & ~ad_mask(ctxt)) | ((*reg + inc) & ad_mask(ctxt));
|
||||
mask = ad_mask(ctxt);
|
||||
masked_increment(reg, mask, inc);
|
||||
}
|
||||
|
||||
static void rsp_increment(struct x86_emulate_ctxt *ctxt, int inc)
|
||||
{
|
||||
masked_increment(&ctxt->regs[VCPU_REGS_RSP], stack_mask(ctxt), inc);
|
||||
}
|
||||
|
||||
static inline void jmp_rel(struct x86_emulate_ctxt *ctxt, int rel)
|
||||
|
@ -1519,8 +1532,8 @@ static int push(struct x86_emulate_ctxt *ctxt, void *data, int bytes)
|
|||
{
|
||||
struct segmented_address addr;
|
||||
|
||||
register_address_increment(ctxt, &ctxt->regs[VCPU_REGS_RSP], -bytes);
|
||||
addr.ea = register_address(ctxt, ctxt->regs[VCPU_REGS_RSP]);
|
||||
rsp_increment(ctxt, -bytes);
|
||||
addr.ea = ctxt->regs[VCPU_REGS_RSP] & stack_mask(ctxt);
|
||||
addr.seg = VCPU_SREG_SS;
|
||||
|
||||
return segmented_write(ctxt, addr, data, bytes);
|
||||
|
@ -1539,13 +1552,13 @@ static int emulate_pop(struct x86_emulate_ctxt *ctxt,
|
|||
int rc;
|
||||
struct segmented_address addr;
|
||||
|
||||
addr.ea = register_address(ctxt, ctxt->regs[VCPU_REGS_RSP]);
|
||||
addr.ea = ctxt->regs[VCPU_REGS_RSP] & stack_mask(ctxt);
|
||||
addr.seg = VCPU_SREG_SS;
|
||||
rc = segmented_read(ctxt, addr, dest, len);
|
||||
if (rc != X86EMUL_CONTINUE)
|
||||
return rc;
|
||||
|
||||
register_address_increment(ctxt, &ctxt->regs[VCPU_REGS_RSP], len);
|
||||
rsp_increment(ctxt, len);
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
@ -1685,8 +1698,7 @@ static int em_popa(struct x86_emulate_ctxt *ctxt)
|
|||
|
||||
while (reg >= VCPU_REGS_RAX) {
|
||||
if (reg == VCPU_REGS_RSP) {
|
||||
register_address_increment(ctxt, &ctxt->regs[VCPU_REGS_RSP],
|
||||
ctxt->op_bytes);
|
||||
rsp_increment(ctxt, ctxt->op_bytes);
|
||||
--reg;
|
||||
}
|
||||
|
||||
|
@ -2819,7 +2831,7 @@ static int em_ret_near_imm(struct x86_emulate_ctxt *ctxt)
|
|||
rc = emulate_pop(ctxt, &ctxt->dst.val, ctxt->op_bytes);
|
||||
if (rc != X86EMUL_CONTINUE)
|
||||
return rc;
|
||||
register_address_increment(ctxt, &ctxt->regs[VCPU_REGS_RSP], ctxt->src.val);
|
||||
rsp_increment(ctxt, ctxt->src.val);
|
||||
return X86EMUL_CONTINUE;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue