Hi Ayan,
On 24/03/2022 13:37, Ayan Kumar Halder wrote:
/*
* At this point, we know that the instruction is either valid or has been
* decoded successfully. Thus, Xen should be allowed to execute the
diff --git a/xen/arch/arm/ioreq.c b/xen/arch/arm/ioreq.c
index 54167aebcb..87a6240f2a 100644
--- a/xen/arch/arm/ioreq.c
+++ b/xen/arch/arm/ioreq.c
@@ -47,7 +47,7 @@ enum io_state try_fwd_ioserv(struct cpu_user_regs *regs,
struct vcpu *v, mmio_info_t *info)
{
struct vcpu_io *vio = &v->io;
- struct instr_details instr = info->dabt_instr;
+ const struct instr_details instr = info->dabt_instr;
struct hsr_dabt dabt = info->dabt;
ioreq_t p = {
.type = IOREQ_TYPE_COPY,
@@ -62,7 +62,6 @@ enum io_state try_fwd_ioserv(struct cpu_user_regs *regs,
* memory access. So for now, we can safely always set to 0.
*/
.df = 0,
- .data = get_user_reg(regs, info->dabt.reg),
.state = STATE_IOREQ_READY,
};
struct ioreq_server *s = NULL;
@@ -74,12 +73,23 @@ enum io_state try_fwd_ioserv(struct cpu_user_regs *regs,
return IO_ABORT;
}
+ if ( instr.state == INSTR_CACHE )
+ p.size = dcache_line_bytes;
I think it would be best to only set the p.size when instr.state !=
INSTR_CACHE in the else here.
I can do that on commit. I will also give a chance to Stefano to reply.
Cheers,
--
Julien Grall