[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] Upstream Dom0 DRM problems regarding swiotlb
On 13/02/2019 19:38, Michael Labriola wrote: > On Wed, Feb 13, 2019 at 1:16 PM Michael Labriola > <michael.d.labriola@xxxxxxxxx> wrote: >> >> On Wed, Feb 13, 2019 at 11:57 AM Konrad Rzeszutek Wilk >> <konrad.wilk@xxxxxxxxxx> wrote: >>> >>> On Wed, Feb 13, 2019 at 09:09:32AM -0700, Jan Beulich wrote: >>>>>>> On 13.02.19 at 17:00, <michael.d.labriola@xxxxxxxxx> wrote: >>>>> On Wed, Feb 13, 2019 at 9:28 AM Jan Beulich <JBeulich@xxxxxxxx> wrote: >>>>>>>>> On 13.02.19 at 15:10, <michael.d.labriola@xxxxxxxxx> wrote: >>>>>>> Ah, so this isn't necessarily Xen-specific but rather any paravirtual >>>>>>> guest? That hadn't crossed my mind. Is there an easy way to find out >>>>>>> if we're a pv guest in the need_swiotlb conditionals? >>>>>> >>>>>> There's xen_pv_domain(), but I think xen_swiotlb would be more to >>>>>> the point if the check is already to be Xen-specific. There's no generic >>>>>> "is PV" predicate that I'm aware of. >>>>> >>>>> Well, that makes doing conditional code right more difficult. I >>>>> assume since there isn't a generic predicate, and PV isn't new, that >>>>> it's absence is by design? To reign in the temptation to sprinkle >>>>> conditional code all over the kernel? ;-) >>>> >>>> Well, with lguest gone, Xen is the only PV environment the kernel >>>> can run in, afaik at least. I guess to decide between the suggested >>>> options or the need for some abstracting macro (or yet something >>>> else), you'll really need to ask the driver maintainers. Or simply >>>> send a patch their way implementing one of them, and see what >>>> their reaction is. >>> >>> Could you try this out and see if it works and I will send it out: >>> > *snip* >> >> Yes, that works for me. However, I feel like the conditional should >> be in drm_get_max_iomem() instead of directly after it everywhere it's >> used... and is just checking xen_pv_domain() enough? Jan made it >> sound like there were possibly other PV cases that would also still >> need swiotlb. > > How about this? It strcmp's pv_info to see if we're bare metal, does > the comparison in a single place, moves the bit shifting comparison > into the function (simplifying the drm driver code), and renames the > function to more aptly describe what's going on. ... > diff --git a/drivers/gpu/drm/drm_memory.c b/drivers/gpu/drm/drm_memory.c > index d69e4fc1ee77..f22f6a0d20b3 100644 > --- a/drivers/gpu/drm/drm_memory.c > +++ b/drivers/gpu/drm/drm_memory.c > @@ -35,6 +35,7 @@ > > #include <linux/highmem.h> > #include <linux/export.h> > +#include <xen/xen.h> > #include <drm/drmP.h> > #include "drm_legacy.h" > > @@ -150,15 +151,24 @@ void drm_legacy_ioremapfree(struct drm_local_map > *map, struct drm_device *dev) > } > EXPORT_SYMBOL(drm_legacy_ioremapfree); > > -u64 drm_get_max_iomem(void) > +bool drm_need_swiotlb_for_dma(int dma_bits) > { > struct resource *tmp; > resource_size_t max_iomem = 0; > > +#ifdef CONFIG_PARAVIRT > + /* > + * Paravirtual hosts require swiotlb regardless of requested dma > + * transfer size. > + */ > + if (strcmp(pv_info.name, "bare hardware") != 0) > + return true; > +#endif > + No, this is really not acceptable. Apart from Andrew's comments on using the DMA API (which I really support) relying on the pv_info.name string is a very bad interface. You'd need to add something like a "need_swiotlb" boolean to the pv_info struct and set it for Xen PV and maybe others. Juergen _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |