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

Re: [Xen-devel] [PATCH v4 09/17] x86/hvm: unify stdvga mmio intercept with standard mmio intercept



> -----Original Message-----
> From: Jan Beulich [mailto:JBeulich@xxxxxxxx]
> Sent: 24 June 2015 14:59
> To: Paul Durrant
> Cc: Andrew Cooper; xen-devel@xxxxxxxxxxxxxxxxxxxx; Keir (Xen.org)
> Subject: Re: [PATCH v4 09/17] x86/hvm: unify stdvga mmio intercept with
> standard mmio intercept
> 
> >>> On 24.06.15 at 13:24, <paul.durrant@xxxxxxxxxx> wrote:
> > @@ -424,8 +427,17 @@ static void stdvga_mem_writeb(uint64_t addr,
> uint32_t val)
> >      }
> >  }
> >
> > -static void stdvga_mem_write(uint64_t addr, uint64_t data, uint64_t size)
> > +static int stdvga_mem_write(struct vcpu *v, unsigned long addr,
> > +                            unsigned long size, unsigned long data)
> >  {
> > +    ioreq_t p = { .type = IOREQ_TYPE_COPY,
> > +                  .addr = addr,
> > +                  .size = size,
> > +                  .count = 1,
> > +                  .dir = IOREQ_WRITE,
> > +                  .data = data,
> 
> Indentation.
> 

Damn emacs.

> > -    if ( s->stdvga && s->cache )
> > -    {
> > -        switch ( p->type )
> > -        {
> > -        case IOREQ_TYPE_COPY:
> > -            buf = mmio_move(s, p);
> > -            if ( !buf )
> > -                s->cache = 0;
> > -            break;
> > -        default:
> > -            gdprintk(XENLOG_WARNING, "unsupported mmio request type:%d
> "
> > -                     "addr:0x%04x data:0x%04x size:%d count:%d state:%d "
> > -                     "isptr:%d dir:%d df:%d\n",
> > -                     p->type, (int)p->addr, (int)p->data, (int)p->size,
> > -                     (int)p->count, p->state,
> > -                     p->data_is_ptr, p->dir, p->df);
> > -            s->cache = 0;
> > -        }
> 
> I can't see where these cases of clearing s->cache move to.
> 

There's only one case AFAICT, which is if the domain goes through a 
save/restore then s->cache is cleared.

> > -    }
> > -    else
> > -    {
> > -        buf = (p->dir == IOREQ_WRITE);
> > -    }
> > -
> > -    rc = (buf && hvm_buffered_io_send(p));
> > +    rc = s->stdvga && s->cache &&
> > +        (addr >= VGA_MEM_BASE) &&
> > +        ((addr + length) < (VGA_MEM_BASE + VGA_MEM_SIZE));
> 
> Not how the old code also calls hvm_buffered_io_send() when
> !s->stdvga || !s->cache but p->dir == IOREQ_WRITE. Do you
> really mean to drop that?
> 

Hmmm. I'm not sure why it would have done that. It seems wrong. I'll check.

  Paul

> Jan


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

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