>>>>> Andriy Gapon <a...@freebsd.org> writes:

    > On 01/03/2018 16:06, Rodney W. Grimes wrote:
    >> Due to the design of the IOMMU you can only manage IO space in page
    >> (4096 on x86) granually sizes.  The device your trying to pass in
    >> has a 1024 byte memory region that is part of a 4096 byte page that
    >> may have other things in it.
    >> 
    >> At this time bhyve does not have any way to deal with this, though some
    >> other hypervisors have techniques that make this work.
    >> 
    >> I do not have or know of any list of USB controller cards that
    >> have 4k aligned and 4k sized BAR's.

    > I have this local hack for that problem.
    > It comes without any warranty and its use is completely at your own risk.

Thank you. I will try it.

lk

    > commit 74e0a8d1ae01c7aaabd7d965958b735c7cf18871
    > Author: Andriy Gapon <a...@icyb.net.ua>
    > Date:   Fri Nov 17 20:17:57 2017 +0200

    >     bhyve: allow BAR sizes that are not page aligned by rounding them up

    >     This is based on the assumption that drivers won't access the added 
space.

    > diff --git a/usr.sbin/bhyve/pci_passthru.c b/usr.sbin/bhyve/pci_passthru.c
    > index f314679d912b0..14c1384c6c8f8 100644
    > --- a/usr.sbin/bhyve/pci_passthru.c
    > +++ b/usr.sbin/bhyve/pci_passthru.c
    > @@ -563,13 +563,20 @@ cfginitbar(struct vmctx *ctx, struct passthru_softc 
*sc)
    >           size = bar.pbi_length;

    >           if (bartype != PCIBAR_IO) {
    > -                 if (((base | size) & PAGE_MASK) != 0) {
    > +                 if ((base & PAGE_MASK) != 0) {
    >                           warnx("passthru device %d/%d/%d BAR %d: "
    > -                             "base %#lx or size %#lx not page aligned\n",
    > +                             "base %#lx not page aligned\n",
    sc-> psc_sel.pc_bus, sc->psc_sel.pc_dev,
    > -                             sc->psc_sel.pc_func, i, base, size);
    > +                             sc->psc_sel.pc_func, i, base);
    >                           return (-1);
    >                   }
    > +                 if ((size & PAGE_MASK) != 0) {
    > +                         warnx("passthru device %d/%d/%d BAR %d: "
    > +                             "size %#lx not page aligned\n",
    > +                             sc->psc_sel.pc_bus, sc->psc_sel.pc_dev,
    > +                             sc->psc_sel.pc_func, i, size);
    > +                         size = round_page(size);
    > +                 }
    >           }

    >           /* Cache information about the "real" BAR */


    > -- 
    > Andriy Gapon


-- 
A: Because it fouls the order in which people normally read text.
Q: Why is top-posting such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail? 

_______________________________________________
freebsd-virtualization@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-virtualization
To unsubscribe, send any mail to 
"freebsd-virtualization-unsubscr...@freebsd.org"

Reply via email to