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

[Xen-devel] TLB flushing in blktap kernel driver?



Hi all,

I've been fixing blktap to build as a kernel module, and have come
across one un-exported symbol that blktap needs: flush_tlb_all(), used
in

static unsigned int blktap_poll(struct file *file, poll_table *wait)
{
...
        poll_wait(file, &info->wait, wait);
        if (info->ufe_ring.req_prod_pvt != info->ufe_ring.sring->req_prod) {
                flush_tlb_all();
                RING_PUSH_REQUESTS(&info->ufe_ring);
                return POLLIN | POLLRDNORM;
        }
        return 0;
}

However, I can't understand right now why we need the tlb flush here.
If we're doing any grant table operations between dom0 and domU, then
the HV should be doing the tlb flushes for us, shouldn't it?  And mere
SMP synchronisation on a ring buffer requires a physical memory barrier,
not a TLB synchronisation (and RING_PUSH_REQUESTS already does a wmb.)

--Stephen



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

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