Re: [Qemu-devel] [PATCH 00/10] intel-iommu: nested vIOMMU, cleanups, bug fixes
Hi, This series seems to have some coding style problems. See output below for more information: Type: series Message-id: 20180425045129.17449-1-pet...@redhat.com Subject: [Qemu-devel] [PATCH 00/10] intel-iommu: nested vIOMMU, cleanups, bug fixes === TEST SCRIPT BEGIN === #!/bin/bash BASE=base n=1 total=$(git log --oneline $BASE.. | wc -l) failed=0 git config --local diff.renamelimit 0 git config --local diff.renames True git config --local diff.algorithm histogram commits="$(git log --format=%H --reverse $BASE..)" for c in $commits; do echo "Checking PATCH $n/$total: $(git log -n 1 --format=%s $c)..." if ! git show $c --format=email | ./scripts/checkpatch.pl --mailback -; then failed=1 echo fi n=$((n+1)) done exit $failed === TEST SCRIPT END === Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384 From https://github.com/patchew-project/qemu t [tag update] patchew/1524592709-6553-1-git-send-email-ian.jack...@eu.citrix.com -> patchew/1524592709-6553-1-git-send-email-ian.jack...@eu.citrix.com t [tag update] patchew/20180424152405.10304-1-alex.ben...@linaro.org -> patchew/20180424152405.10304-1-alex.ben...@linaro.org * [new tag] patchew/20180425045129.17449-1-pet...@redhat.com -> patchew/20180425045129.17449-1-pet...@redhat.com Switched to a new branch 'test' 985e4bedbc intel-iommu: remove notify_unmap for page walk d83649a53c intel-iommu: don't unmap all for shadow page table e5c03427c9 intel-iommu: maintain per-device iova ranges 7719aa1ac9 util: implement simple interval tree logic f62d669eaa intel-iommu: pass in address space when page walk 95259f34e9 intel-iommu: introduce vtd_page_walk_info ef83611a65 intel-iommu: only do page walk for MAP notifiers 8e606cbed9 intel-iommu: add iommu lock dbfb3683ce intel-iommu: remove IntelIOMMUNotifierNode 73e8c605b3 intel-iommu: send PSI always even if across PDEs === OUTPUT BEGIN === Checking PATCH 1/10: intel-iommu: send PSI always even if across PDEs... Checking PATCH 2/10: intel-iommu: remove IntelIOMMUNotifierNode... Checking PATCH 3/10: intel-iommu: add iommu lock... Checking PATCH 4/10: intel-iommu: only do page walk for MAP notifiers... Checking PATCH 5/10: intel-iommu: introduce vtd_page_walk_info... Checking PATCH 6/10: intel-iommu: pass in address space when page walk... Checking PATCH 7/10: util: implement simple interval tree logic... WARNING: architecture specific defines should be avoided #34: FILE: include/qemu/interval-tree.h:11: +#ifndef __INTERVAL_TREE_H__ ERROR: space prohibited between function name and open parenthesis '(' #56: FILE: include/qemu/interval-tree.h:33: +typedef gboolean (*it_tree_iterator)(ITValue start, ITValue end); total: 1 errors, 1 warnings, 352 lines checked Your patch has style problems, please review. If any of these errors are false positives report them to the maintainer, see CHECKPATCH in MAINTAINERS. Checking PATCH 8/10: intel-iommu: maintain per-device iova ranges... Checking PATCH 9/10: intel-iommu: don't unmap all for shadow page table... Checking PATCH 10/10: intel-iommu: remove notify_unmap for page walk... === OUTPUT END === Test command exited with code: 1 --- Email generated automatically by Patchew [http://patchew.org/]. Please send your feedback to patchew-de...@redhat.com
Re: [Qemu-devel] [PATCH 00/10] intel-iommu: nested vIOMMU, cleanups, bug fixes
On Tue, Apr 24, 2018 at 10:05:14PM -0700, no-re...@patchew.org wrote: [...] > === OUTPUT BEGIN === > Checking PATCH 1/10: intel-iommu: send PSI always even if across PDEs... > Checking PATCH 2/10: intel-iommu: remove IntelIOMMUNotifierNode... > Checking PATCH 3/10: intel-iommu: add iommu lock... > Checking PATCH 4/10: intel-iommu: only do page walk for MAP notifiers... > Checking PATCH 5/10: intel-iommu: introduce vtd_page_walk_info... > Checking PATCH 6/10: intel-iommu: pass in address space when page walk... > Checking PATCH 7/10: util: implement simple interval tree logic... > WARNING: architecture specific defines should be avoided > #34: FILE: include/qemu/interval-tree.h:11: > +#ifndef __INTERVAL_TREE_H__ This is valid; I'll remove __ prefix/suffix and it'll fix. > > ERROR: space prohibited between function name and open parenthesis '(' > #56: FILE: include/qemu/interval-tree.h:33: > +typedef gboolean (*it_tree_iterator)(ITValue start, ITValue end); While this is not; We possibly need the gboolean type into type list. I'll post a standalone patch for checkpatch instead. > > total: 1 errors, 1 warnings, 352 lines checked > > Your patch has style problems, please review. If any of these errors > are false positives report them to the maintainer, see > CHECKPATCH in MAINTAINERS. > > Checking PATCH 8/10: intel-iommu: maintain per-device iova ranges... > Checking PATCH 9/10: intel-iommu: don't unmap all for shadow page table... > Checking PATCH 10/10: intel-iommu: remove notify_unmap for page walk... > === OUTPUT END === > > Test command exited with code: 1 > > > --- > Email generated automatically by Patchew [http://patchew.org/]. > Please send your feedback to patchew-de...@redhat.com -- Peter Xu
[Qemu-devel] [PATCH 00/10] intel-iommu: nested vIOMMU, cleanups, bug fixes
Online repo: https://github.com/xzpeter/qemu/tree/fix-vtd-dma This series fixes several major problems that current code has: - Issue 1: when getting very big PSI UNMAP invalidations, the current code is buggy in that we might skip the notification while actually we should always send that notification. - Issue 2: IOTLB is not thread safe, while block dataplane can be accessing and updating it in parallel. - Issue 3: For devices that only registered with UNMAP-only notifiers, we don't really need to do page walking for PSIs, we can directly deliver the notification down. For example, vhost. - Issue 4: unsafe window for MAP notified devices like vfio-pci (and in the future, vDPA as well). The problem is that, now for domain invalidations we do this to make sure the shadow page tables are correctly synced: 1. unmap the whole address space 2. replay the whole address space, map existing pages However during step 1 and 2 there will be a very tiny window (it can be as big as 3ms) that the shadow page table is either invalid or incomplete (since we're rebuilding it up). That's fatal error since devices never know that happending and it's still possible to DMA to memories. Patch 1 fixes issue 1. I put it at the first since it's picked from an old post. Patch 2 is a cleanup to remove useless IntelIOMMUNotifierNode struct. Patch 3 fixes issue 2. Patch 4 fixes issue 3. Patch 5-9 fix issue 4. Here a very simple interval tree is implemented based on Gtree. It's different with general interval tree in that it does not allow user to pass in private data (e.g., translated addresses). However that benefits us that then we can merge adjacent interval leaves so that hopefully we won't consume much memory even if the mappings are a lot (that happens for nested virt - when mapping the whole L2 guest RAM range, it can be at least in GBs). Patch 10 is another big cleanup only can work after patch 9. Tests: - device assignments to L1, even L2 guests. With this series applied (and the kernel IOMMU patches: https://lkml.org/lkml/2018/4/18/5), we can even nest vIOMMU now, e.g., we can specify vIOMMU in L2 guest with assigned devices and things will work. We can't before. - vhost smoke test for regression. Please review. Thanks, Peter Xu (10): intel-iommu: send PSI always even if across PDEs intel-iommu: remove IntelIOMMUNotifierNode intel-iommu: add iommu lock intel-iommu: only do page walk for MAP notifiers intel-iommu: introduce vtd_page_walk_info intel-iommu: pass in address space when page walk util: implement simple interval tree logic intel-iommu: maintain per-device iova ranges intel-iommu: don't unmap all for shadow page table intel-iommu: remove notify_unmap for page walk include/hw/i386/intel_iommu.h | 21 ++-- include/qemu/interval-tree.h | 130 ++ hw/i386/intel_iommu.c | 249 +- util/interval-tree.c | 217 hw/i386/trace-events | 3 +- util/Makefile.objs| 1 + 6 files changed, 536 insertions(+), 85 deletions(-) create mode 100644 include/qemu/interval-tree.h create mode 100644 util/interval-tree.c -- 2.14.3