<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux-toradex.git/drivers/iommu, branch v3.1.4</title>
<subtitle>Linux kernel for Apalis and Colibri modules</subtitle>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/'/>
<entry>
<title>iommu/amd: Fix wrong shift direction</title>
<updated>2011-11-11T17:43:23+00:00</updated>
<author>
<name>Joerg Roedel</name>
<email>joerg.roedel@amd.com</email>
</author>
<published>2011-10-11T15:41:32+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=2570d310e29899e6b6754198b6a85f0c8a5fd109'/>
<id>2570d310e29899e6b6754198b6a85f0c8a5fd109</id>
<content type='text'>
commit fcd0861db1cf4e6ed99f60a815b7b72c2ed36ea4 upstream.

The shift direction was wrong because the function takes a
page number and i is the address is the loop.

Signed-off-by: Joerg Roedel &lt;joerg.roedel@amd.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit fcd0861db1cf4e6ed99f60a815b7b72c2ed36ea4 upstream.

The shift direction was wrong because the function takes a
page number and i is the address is the loop.

Signed-off-by: Joerg Roedel &lt;joerg.roedel@amd.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>intel-iommu: fix superpage support in pfn_to_dma_pte()</title>
<updated>2011-10-19T11:06:22+00:00</updated>
<author>
<name>Allen Kay</name>
<email>allen.m.kay@intel.com</email>
</author>
<published>2011-10-14T19:32:46+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=4399c8bf2b9093696fa8160d79712e7346989c46'/>
<id>4399c8bf2b9093696fa8160d79712e7346989c46</id>
<content type='text'>
If target_level == 0, current code breaks out of the while-loop if
SUPERPAGE bit is set. We should also break out if PTE is not present.
If we don't do this, KVM calls to iommu_iova_to_phys() will cause
pfn_to_dma_pte() to create mapping for 4KiB pages.

Signed-off-by: Allen Kay &lt;allen.m.kay@intel.com&gt;
Signed-off-by: David Woodhouse &lt;David.Woodhouse@intel.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
If target_level == 0, current code breaks out of the while-loop if
SUPERPAGE bit is set. We should also break out if PTE is not present.
If we don't do this, KVM calls to iommu_iova_to_phys() will cause
pfn_to_dma_pte() to create mapping for 4KiB pages.

Signed-off-by: Allen Kay &lt;allen.m.kay@intel.com&gt;
Signed-off-by: David Woodhouse &lt;David.Woodhouse@intel.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>intel-iommu: set iommu_superpage on VM domains to lowest common denominator</title>
<updated>2011-10-19T11:06:20+00:00</updated>
<author>
<name>Allen Kay</name>
<email>allen.m.kay@intel.com</email>
</author>
<published>2011-10-14T19:32:17+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=8140a95d228efbcd64d84150e794761a32463947'/>
<id>8140a95d228efbcd64d84150e794761a32463947</id>
<content type='text'>
set dmar-&gt;iommu_superpage field to the smallest common denominator
of super page sizes supported by all active VT-d engines.  Initialize
this field in intel_iommu_domain_init() API so intel_iommu_map() API
will be able to use iommu_superpage field to determine the appropriate
super page size to use.

Signed-off-by: Allen Kay &lt;allen.m.kay@intel.com&gt;
Signed-off-by: David Woodhouse &lt;David.Woodhouse@intel.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
set dmar-&gt;iommu_superpage field to the smallest common denominator
of super page sizes supported by all active VT-d engines.  Initialize
this field in intel_iommu_domain_init() API so intel_iommu_map() API
will be able to use iommu_superpage field to determine the appropriate
super page size to use.

Signed-off-by: Allen Kay &lt;allen.m.kay@intel.com&gt;
Signed-off-by: David Woodhouse &lt;David.Woodhouse@intel.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>intel-iommu: fix return value of iommu_unmap() API</title>
<updated>2011-10-19T11:06:18+00:00</updated>
<author>
<name>Allen Kay</name>
<email>allen.m.kay@intel.com</email>
</author>
<published>2011-10-14T19:31:54+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=292827cb164ad00cc7689a21283b1261c0b6daed'/>
<id>292827cb164ad00cc7689a21283b1261c0b6daed</id>
<content type='text'>
iommu_unmap() API expects IOMMU drivers to return the actual page order
of the address being unmapped.  Previous code was just returning page
order passed in from the caller.  This patch fixes this problem.

Signed-off-by: Allen Kay &lt;allen.m.kay@intel.com&gt;
Signed-off-by: David Woodhouse &lt;David.Woodhouse@intel.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
iommu_unmap() API expects IOMMU drivers to return the actual page order
of the address being unmapped.  Previous code was just returning page
order passed in from the caller.  This patch fixes this problem.

Signed-off-by: Allen Kay &lt;allen.m.kay@intel.com&gt;
Signed-off-by: David Woodhouse &lt;David.Woodhouse@intel.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>intel-iommu: Export a flag indicating that the IOMMU is used for iGFX.</title>
<updated>2011-10-14T19:59:46+00:00</updated>
<author>
<name>David Woodhouse</name>
<email>David.Woodhouse@intel.com</email>
</author>
<published>2011-10-14T19:59:46+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=c0771df8d5297bfb9c4fbe8ada085a49cb22ec4f'/>
<id>c0771df8d5297bfb9c4fbe8ada085a49cb22ec4f</id>
<content type='text'>
We really don't want this to work in the general case; device drivers
*shouldn't* care whether they are behind an IOMMU or not. But the
integrated graphics is a special case, because the IOMMU and the GTT are
all kind of smashed into one and generally horrifically buggy, so it's
reasonable for the graphics driver to want to know when the IOMMU is
active for the graphics hardware.

Signed-off-by: David Woodhouse &lt;David.Woodhouse@intel.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
We really don't want this to work in the general case; device drivers
*shouldn't* care whether they are behind an IOMMU or not. But the
integrated graphics is a special case, because the IOMMU and the GTT are
all kind of smashed into one and generally horrifically buggy, so it's
reasonable for the graphics driver to want to know when the IOMMU is
active for the graphics hardware.

Signed-off-by: David Woodhouse &lt;David.Woodhouse@intel.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>intel-iommu: Workaround IOTLB hang on Ironlake GPU</title>
<updated>2011-10-14T19:51:44+00:00</updated>
<author>
<name>David Woodhouse</name>
<email>dwmw2@infradead.org</email>
</author>
<published>2011-09-26T02:11:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=6fbcfb3e467adb414e235eeefaeaf51ad12f2461'/>
<id>6fbcfb3e467adb414e235eeefaeaf51ad12f2461</id>
<content type='text'>
To work around a hardware issue, we have to submit IOTLB flushes while
the graphics engine is idle. The graphics driver will (we hope) go to
great lengths to ensure that it gets that right on the affected
chipset(s)... so let's not screw it over by deferring the unmap and
doing it later. That wouldn't be very helpful.

Signed-off-by: David Woodhouse &lt;David.Woodhouse@intel.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
To work around a hardware issue, we have to submit IOTLB flushes while
the graphics engine is idle. The graphics driver will (we hope) go to
great lengths to ensure that it gets that right on the affected
chipset(s)... so let's not screw it over by deferring the unmap and
doing it later. That wouldn't be very helpful.

Signed-off-by: David Woodhouse &lt;David.Woodhouse@intel.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>intel-iommu: Fix AB-BA lockdep report</title>
<updated>2011-10-10T21:02:24+00:00</updated>
<author>
<name>Roland Dreier</name>
<email>roland@purestorage.com</email>
</author>
<published>2011-07-20T13:22:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=3e7abe2556b583e87dabda3e0e6178a67b20d06f'/>
<id>3e7abe2556b583e87dabda3e0e6178a67b20d06f</id>
<content type='text'>
When unbinding a device so that I could pass it through to a KVM VM, I
got the lockdep report below.  It looks like a legitimate lock
ordering problem:

 - domain_context_mapping_one() takes iommu-&gt;lock and calls
   iommu_support_dev_iotlb(), which takes device_domain_lock (inside
   iommu-&gt;lock).

 - domain_remove_one_dev_info() starts by taking device_domain_lock
   then takes iommu-&gt;lock inside it (near the end of the function).

So this is the classic AB-BA deadlock.  It looks like a safe fix is to
simply release device_domain_lock a bit earlier, since as far as I can
tell, it doesn't protect any of the stuff accessed at the end of
domain_remove_one_dev_info() anyway.

BTW, the use of device_domain_lock looks a bit unsafe to me... it's
at least not obvious to me why we aren't vulnerable to the race below:

  iommu_support_dev_iotlb()
                                          domain_remove_dev_info()

  lock device_domain_lock
    find info
  unlock device_domain_lock

                                          lock device_domain_lock
                                            find same info
                                          unlock device_domain_lock

                                          free_devinfo_mem(info)

  do stuff with info after it's free

However I don't understand the locking here well enough to know if
this is a real problem, let alone what the best fix is.

Anyway here's the full lockdep output that prompted all of this:

     =======================================================
     [ INFO: possible circular locking dependency detected ]
     2.6.39.1+ #1
     -------------------------------------------------------
     bash/13954 is trying to acquire lock:
      (&amp;(&amp;iommu-&gt;lock)-&gt;rlock){......}, at: [&lt;ffffffff812f6421&gt;] domain_remove_one_dev_info+0x121/0x230

     but task is already holding lock:
      (device_domain_lock){-.-...}, at: [&lt;ffffffff812f6508&gt;] domain_remove_one_dev_info+0x208/0x230

     which lock already depends on the new lock.

     the existing dependency chain (in reverse order) is:

     -&gt; #1 (device_domain_lock){-.-...}:
            [&lt;ffffffff8109ca9d&gt;] lock_acquire+0x9d/0x130
            [&lt;ffffffff81571475&gt;] _raw_spin_lock_irqsave+0x55/0xa0
            [&lt;ffffffff812f8350&gt;] domain_context_mapping_one+0x600/0x750
            [&lt;ffffffff812f84df&gt;] domain_context_mapping+0x3f/0x120
            [&lt;ffffffff812f9175&gt;] iommu_prepare_identity_map+0x1c5/0x1e0
            [&lt;ffffffff81ccf1ca&gt;] intel_iommu_init+0x88e/0xb5e
            [&lt;ffffffff81cab204&gt;] pci_iommu_init+0x16/0x41
            [&lt;ffffffff81002165&gt;] do_one_initcall+0x45/0x190
            [&lt;ffffffff81ca3d3f&gt;] kernel_init+0xe3/0x168
            [&lt;ffffffff8157ac24&gt;] kernel_thread_helper+0x4/0x10

     -&gt; #0 (&amp;(&amp;iommu-&gt;lock)-&gt;rlock){......}:
            [&lt;ffffffff8109bf3e&gt;] __lock_acquire+0x195e/0x1e10
            [&lt;ffffffff8109ca9d&gt;] lock_acquire+0x9d/0x130
            [&lt;ffffffff81571475&gt;] _raw_spin_lock_irqsave+0x55/0xa0
            [&lt;ffffffff812f6421&gt;] domain_remove_one_dev_info+0x121/0x230
            [&lt;ffffffff812f8b42&gt;] device_notifier+0x72/0x90
            [&lt;ffffffff8157555c&gt;] notifier_call_chain+0x8c/0xc0
            [&lt;ffffffff81089768&gt;] __blocking_notifier_call_chain+0x78/0xb0
            [&lt;ffffffff810897b6&gt;] blocking_notifier_call_chain+0x16/0x20
            [&lt;ffffffff81373a5c&gt;] __device_release_driver+0xbc/0xe0
            [&lt;ffffffff81373ccf&gt;] device_release_driver+0x2f/0x50
            [&lt;ffffffff81372ee3&gt;] driver_unbind+0xa3/0xc0
            [&lt;ffffffff813724ac&gt;] drv_attr_store+0x2c/0x30
            [&lt;ffffffff811e4506&gt;] sysfs_write_file+0xe6/0x170
            [&lt;ffffffff8117569e&gt;] vfs_write+0xce/0x190
            [&lt;ffffffff811759e4&gt;] sys_write+0x54/0xa0
            [&lt;ffffffff81579a82&gt;] system_call_fastpath+0x16/0x1b

     other info that might help us debug this:

     6 locks held by bash/13954:
      #0:  (&amp;buffer-&gt;mutex){+.+.+.}, at: [&lt;ffffffff811e4464&gt;] sysfs_write_file+0x44/0x170
      #1:  (s_active#3){++++.+}, at: [&lt;ffffffff811e44ed&gt;] sysfs_write_file+0xcd/0x170
      #2:  (&amp;__lockdep_no_validate__){+.+.+.}, at: [&lt;ffffffff81372edb&gt;] driver_unbind+0x9b/0xc0
      #3:  (&amp;__lockdep_no_validate__){+.+.+.}, at: [&lt;ffffffff81373cc7&gt;] device_release_driver+0x27/0x50
      #4:  (&amp;(&amp;priv-&gt;bus_notifier)-&gt;rwsem){.+.+.+}, at: [&lt;ffffffff8108974f&gt;] __blocking_notifier_call_chain+0x5f/0xb0
      #5:  (device_domain_lock){-.-...}, at: [&lt;ffffffff812f6508&gt;] domain_remove_one_dev_info+0x208/0x230

     stack backtrace:
     Pid: 13954, comm: bash Not tainted 2.6.39.1+ #1
     Call Trace:
      [&lt;ffffffff810993a7&gt;] print_circular_bug+0xf7/0x100
      [&lt;ffffffff8109bf3e&gt;] __lock_acquire+0x195e/0x1e10
      [&lt;ffffffff810972bd&gt;] ? trace_hardirqs_off+0xd/0x10
      [&lt;ffffffff8109d57d&gt;] ? trace_hardirqs_on_caller+0x13d/0x180
      [&lt;ffffffff8109ca9d&gt;] lock_acquire+0x9d/0x130
      [&lt;ffffffff812f6421&gt;] ? domain_remove_one_dev_info+0x121/0x230
      [&lt;ffffffff81571475&gt;] _raw_spin_lock_irqsave+0x55/0xa0
      [&lt;ffffffff812f6421&gt;] ? domain_remove_one_dev_info+0x121/0x230
      [&lt;ffffffff810972bd&gt;] ? trace_hardirqs_off+0xd/0x10
      [&lt;ffffffff812f6421&gt;] domain_remove_one_dev_info+0x121/0x230
      [&lt;ffffffff812f8b42&gt;] device_notifier+0x72/0x90
      [&lt;ffffffff8157555c&gt;] notifier_call_chain+0x8c/0xc0
      [&lt;ffffffff81089768&gt;] __blocking_notifier_call_chain+0x78/0xb0
      [&lt;ffffffff810897b6&gt;] blocking_notifier_call_chain+0x16/0x20
      [&lt;ffffffff81373a5c&gt;] __device_release_driver+0xbc/0xe0
      [&lt;ffffffff81373ccf&gt;] device_release_driver+0x2f/0x50
      [&lt;ffffffff81372ee3&gt;] driver_unbind+0xa3/0xc0
      [&lt;ffffffff813724ac&gt;] drv_attr_store+0x2c/0x30
      [&lt;ffffffff811e4506&gt;] sysfs_write_file+0xe6/0x170
      [&lt;ffffffff8117569e&gt;] vfs_write+0xce/0x190
      [&lt;ffffffff811759e4&gt;] sys_write+0x54/0xa0
      [&lt;ffffffff81579a82&gt;] system_call_fastpath+0x16/0x1b

Signed-off-by: Roland Dreier &lt;roland@purestorage.com&gt;
Signed-off-by: David Woodhouse &lt;David.Woodhouse@intel.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
When unbinding a device so that I could pass it through to a KVM VM, I
got the lockdep report below.  It looks like a legitimate lock
ordering problem:

 - domain_context_mapping_one() takes iommu-&gt;lock and calls
   iommu_support_dev_iotlb(), which takes device_domain_lock (inside
   iommu-&gt;lock).

 - domain_remove_one_dev_info() starts by taking device_domain_lock
   then takes iommu-&gt;lock inside it (near the end of the function).

So this is the classic AB-BA deadlock.  It looks like a safe fix is to
simply release device_domain_lock a bit earlier, since as far as I can
tell, it doesn't protect any of the stuff accessed at the end of
domain_remove_one_dev_info() anyway.

BTW, the use of device_domain_lock looks a bit unsafe to me... it's
at least not obvious to me why we aren't vulnerable to the race below:

  iommu_support_dev_iotlb()
                                          domain_remove_dev_info()

  lock device_domain_lock
    find info
  unlock device_domain_lock

                                          lock device_domain_lock
                                            find same info
                                          unlock device_domain_lock

                                          free_devinfo_mem(info)

  do stuff with info after it's free

However I don't understand the locking here well enough to know if
this is a real problem, let alone what the best fix is.

Anyway here's the full lockdep output that prompted all of this:

     =======================================================
     [ INFO: possible circular locking dependency detected ]
     2.6.39.1+ #1
     -------------------------------------------------------
     bash/13954 is trying to acquire lock:
      (&amp;(&amp;iommu-&gt;lock)-&gt;rlock){......}, at: [&lt;ffffffff812f6421&gt;] domain_remove_one_dev_info+0x121/0x230

     but task is already holding lock:
      (device_domain_lock){-.-...}, at: [&lt;ffffffff812f6508&gt;] domain_remove_one_dev_info+0x208/0x230

     which lock already depends on the new lock.

     the existing dependency chain (in reverse order) is:

     -&gt; #1 (device_domain_lock){-.-...}:
            [&lt;ffffffff8109ca9d&gt;] lock_acquire+0x9d/0x130
            [&lt;ffffffff81571475&gt;] _raw_spin_lock_irqsave+0x55/0xa0
            [&lt;ffffffff812f8350&gt;] domain_context_mapping_one+0x600/0x750
            [&lt;ffffffff812f84df&gt;] domain_context_mapping+0x3f/0x120
            [&lt;ffffffff812f9175&gt;] iommu_prepare_identity_map+0x1c5/0x1e0
            [&lt;ffffffff81ccf1ca&gt;] intel_iommu_init+0x88e/0xb5e
            [&lt;ffffffff81cab204&gt;] pci_iommu_init+0x16/0x41
            [&lt;ffffffff81002165&gt;] do_one_initcall+0x45/0x190
            [&lt;ffffffff81ca3d3f&gt;] kernel_init+0xe3/0x168
            [&lt;ffffffff8157ac24&gt;] kernel_thread_helper+0x4/0x10

     -&gt; #0 (&amp;(&amp;iommu-&gt;lock)-&gt;rlock){......}:
            [&lt;ffffffff8109bf3e&gt;] __lock_acquire+0x195e/0x1e10
            [&lt;ffffffff8109ca9d&gt;] lock_acquire+0x9d/0x130
            [&lt;ffffffff81571475&gt;] _raw_spin_lock_irqsave+0x55/0xa0
            [&lt;ffffffff812f6421&gt;] domain_remove_one_dev_info+0x121/0x230
            [&lt;ffffffff812f8b42&gt;] device_notifier+0x72/0x90
            [&lt;ffffffff8157555c&gt;] notifier_call_chain+0x8c/0xc0
            [&lt;ffffffff81089768&gt;] __blocking_notifier_call_chain+0x78/0xb0
            [&lt;ffffffff810897b6&gt;] blocking_notifier_call_chain+0x16/0x20
            [&lt;ffffffff81373a5c&gt;] __device_release_driver+0xbc/0xe0
            [&lt;ffffffff81373ccf&gt;] device_release_driver+0x2f/0x50
            [&lt;ffffffff81372ee3&gt;] driver_unbind+0xa3/0xc0
            [&lt;ffffffff813724ac&gt;] drv_attr_store+0x2c/0x30
            [&lt;ffffffff811e4506&gt;] sysfs_write_file+0xe6/0x170
            [&lt;ffffffff8117569e&gt;] vfs_write+0xce/0x190
            [&lt;ffffffff811759e4&gt;] sys_write+0x54/0xa0
            [&lt;ffffffff81579a82&gt;] system_call_fastpath+0x16/0x1b

     other info that might help us debug this:

     6 locks held by bash/13954:
      #0:  (&amp;buffer-&gt;mutex){+.+.+.}, at: [&lt;ffffffff811e4464&gt;] sysfs_write_file+0x44/0x170
      #1:  (s_active#3){++++.+}, at: [&lt;ffffffff811e44ed&gt;] sysfs_write_file+0xcd/0x170
      #2:  (&amp;__lockdep_no_validate__){+.+.+.}, at: [&lt;ffffffff81372edb&gt;] driver_unbind+0x9b/0xc0
      #3:  (&amp;__lockdep_no_validate__){+.+.+.}, at: [&lt;ffffffff81373cc7&gt;] device_release_driver+0x27/0x50
      #4:  (&amp;(&amp;priv-&gt;bus_notifier)-&gt;rwsem){.+.+.+}, at: [&lt;ffffffff8108974f&gt;] __blocking_notifier_call_chain+0x5f/0xb0
      #5:  (device_domain_lock){-.-...}, at: [&lt;ffffffff812f6508&gt;] domain_remove_one_dev_info+0x208/0x230

     stack backtrace:
     Pid: 13954, comm: bash Not tainted 2.6.39.1+ #1
     Call Trace:
      [&lt;ffffffff810993a7&gt;] print_circular_bug+0xf7/0x100
      [&lt;ffffffff8109bf3e&gt;] __lock_acquire+0x195e/0x1e10
      [&lt;ffffffff810972bd&gt;] ? trace_hardirqs_off+0xd/0x10
      [&lt;ffffffff8109d57d&gt;] ? trace_hardirqs_on_caller+0x13d/0x180
      [&lt;ffffffff8109ca9d&gt;] lock_acquire+0x9d/0x130
      [&lt;ffffffff812f6421&gt;] ? domain_remove_one_dev_info+0x121/0x230
      [&lt;ffffffff81571475&gt;] _raw_spin_lock_irqsave+0x55/0xa0
      [&lt;ffffffff812f6421&gt;] ? domain_remove_one_dev_info+0x121/0x230
      [&lt;ffffffff810972bd&gt;] ? trace_hardirqs_off+0xd/0x10
      [&lt;ffffffff812f6421&gt;] domain_remove_one_dev_info+0x121/0x230
      [&lt;ffffffff812f8b42&gt;] device_notifier+0x72/0x90
      [&lt;ffffffff8157555c&gt;] notifier_call_chain+0x8c/0xc0
      [&lt;ffffffff81089768&gt;] __blocking_notifier_call_chain+0x78/0xb0
      [&lt;ffffffff810897b6&gt;] blocking_notifier_call_chain+0x16/0x20
      [&lt;ffffffff81373a5c&gt;] __device_release_driver+0xbc/0xe0
      [&lt;ffffffff81373ccf&gt;] device_release_driver+0x2f/0x50
      [&lt;ffffffff81372ee3&gt;] driver_unbind+0xa3/0xc0
      [&lt;ffffffff813724ac&gt;] drv_attr_store+0x2c/0x30
      [&lt;ffffffff811e4506&gt;] sysfs_write_file+0xe6/0x170
      [&lt;ffffffff8117569e&gt;] vfs_write+0xce/0x190
      [&lt;ffffffff811759e4&gt;] sys_write+0x54/0xa0
      [&lt;ffffffff81579a82&gt;] system_call_fastpath+0x16/0x1b

Signed-off-by: Roland Dreier &lt;roland@purestorage.com&gt;
Signed-off-by: David Woodhouse &lt;David.Woodhouse@intel.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>x86, iommu: Mark DMAR IRQ as non-threaded</title>
<updated>2011-09-13T21:44:53+00:00</updated>
<author>
<name>Thomas Gleixner</name>
<email>tglx@linutronix.de</email>
</author>
<published>2011-07-19T14:25:42+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=477694e71113fd0694b6bb0bcc2d006b8ac62691'/>
<id>477694e71113fd0694b6bb0bcc2d006b8ac62691</id>
<content type='text'>
Mark this lowlevel IRQ handler as non-threaded. This prevents a boot
crash when "threadirqs" is on the kernel commandline. Also the
interrupt handler is handling hardware critical events which should
not be delayed into a thread.

Signed-off-by: Thomas Gleixner &lt;tglx@linutronix.de&gt;
Cc: stable@kernel.org
Signed-off-by: Ingo Molnar &lt;mingo@kernel.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Mark this lowlevel IRQ handler as non-threaded. This prevents a boot
crash when "threadirqs" is on the kernel commandline. Also the
interrupt handler is handling hardware critical events which should
not be delayed into a thread.

Signed-off-by: Thomas Gleixner &lt;tglx@linutronix.de&gt;
Cc: stable@kernel.org
Signed-off-by: Ingo Molnar &lt;mingo@kernel.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>iommu/amd: Don't take domain-&gt;lock recursivly</title>
<updated>2011-09-02T12:19:50+00:00</updated>
<author>
<name>Joerg Roedel</name>
<email>joerg.roedel@amd.com</email>
</author>
<published>2011-09-02T12:19:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=e33acde91140f1809952d1c135c36feb66a51887'/>
<id>e33acde91140f1809952d1c135c36feb66a51887</id>
<content type='text'>
The domain_flush_devices() function takes the domain-&gt;lock.
But this function is only called from update_domain() which
itself is already called unter the domain-&gt;lock. This causes
a deadlock situation when the dma-address-space of a domain
grows larger than 1GB.

Cc: stable@kernel.org
Signed-off-by: Joerg Roedel &lt;joerg.roedel@amd.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The domain_flush_devices() function takes the domain-&gt;lock.
But this function is only called from update_domain() which
itself is already called unter the domain-&gt;lock. This causes
a deadlock situation when the dma-address-space of a domain
grows larger than 1GB.

Cc: stable@kernel.org
Signed-off-by: Joerg Roedel &lt;joerg.roedel@amd.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>iommu/amd: Make sure iommu-&gt;need_sync contains correct value</title>
<updated>2011-09-02T12:10:32+00:00</updated>
<author>
<name>Joerg Roedel</name>
<email>joerg.roedel@amd.com</email>
</author>
<published>2011-09-02T12:10:32+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=f1ca1512e765337a7c09eb875eedef8ea4e07654'/>
<id>f1ca1512e765337a7c09eb875eedef8ea4e07654</id>
<content type='text'>
The value is only set to true but never set back to false,
which causes to many completion-wait commands to be sent to
hardware. Fix it with this patch.

Cc: stable@kernel.org
Signed-off-by: Joerg Roedel &lt;joerg.roedel@amd.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The value is only set to true but never set back to false,
which causes to many completion-wait commands to be sent to
hardware. Fix it with this patch.

Cc: stable@kernel.org
Signed-off-by: Joerg Roedel &lt;joerg.roedel@amd.com&gt;
</pre>
</div>
</content>
</entry>
</feed>
