[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v12] xen/arm64: io: Handle data abort due to cache maintenance instructions



On Fri, 1 Apr 2022, Julien Grall wrote:
> 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.

The patch looks OK to me, please go ahead and make the change on
commit.



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.