)]}'
{
  "commit": "81b6433a4a5b92910aca71963eade3da0fcb3633",
  "tree": "e4fc17d8883c88497d0556987ceb56e364ca4991",
  "parents": [
    "2b9c1e152e458af561d193bb97d59bab945e9174"
  ],
  "author": {
    "name": "Barret Rhoden",
    "email": "brho@cs.berkeley.edu",
    "time": "Fri Feb 14 13:36:33 2020 -0500"
  },
  "committer": {
    "name": "Barret Rhoden",
    "email": "brho@cs.berkeley.edu",
    "time": "Tue Mar 03 15:13:30 2020 -0500"
  },
  "message": "proc: iommu: flush the iotlb during shootdowns\n\nIOMMUs are like remote cores.  When we need a generic TLB shootdown, we\nalso need to shootdown the IOTLB for any IOMMUs where the process\u0027s\naddress space is loaded.\n\nIf you don\u0027t use device assignment, this is a noop.  If you do, it\u0027s\npretty expensive: 800 ns or so.\n\nPart of the reason it is worse than a regular IPI shootdown is that we\nhave to wait for a response from the IOMMU hardware.  With IPIs, we know\nthat the core was using the page table (e.g. userspace or a syscall that\nwasn\u0027t in IRQ context) immediately enters the handler and stops using\nthe page table.  In short, we stop the processor from processing and\nusing the table.  Then the actual flush happens.  With the IOMMU, we\ncan\u0027t stop the device from processing, so we have to wait until the\nflush completes.\n\nJust like IPIs, these are relatively expensive, and any tricks we want\nto do to amortize or batch up TLB shootdowns will apply equally to the\nIOTLB.  e.g. \"defer reuse / freeing of pages and PTEs\".\n\nSigned-off-by: Barret Rhoden \u003cbrho@cs.berkeley.edu\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "5131e03d667eb12e615592da1f76ff88b52c946a",
      "old_mode": 33188,
      "old_path": "kern/arch/x86/intel-iommu.h",
      "new_id": "37500b99f8a3701f523629ee36a8c05f6f481cb5",
      "new_mode": 33188,
      "new_path": "kern/arch/x86/intel-iommu.h"
    },
    {
      "type": "modify",
      "old_id": "60c1ddacce2d1a17f0a7f3b8f47166fa38eacc65",
      "old_mode": 33188,
      "old_path": "kern/src/dma.c",
      "new_id": "155a6d641b0668e0ea4ae3bc83ee5d8c36272d0b",
      "new_mode": 33188,
      "new_path": "kern/src/dma.c"
    },
    {
      "type": "modify",
      "old_id": "f02f245381bec50adcb12a6a02eb2929355c77b5",
      "old_mode": 33188,
      "old_path": "kern/src/process.c",
      "new_id": "0fa18ac8c6f56ec1e282e3ad8a0a266521849872",
      "new_mode": 33188,
      "new_path": "kern/src/process.c"
    }
  ]
}
