OSDN Git Service

iommu: Fix bus notifier breakage
authorMark Salter <msalter@redhat.com>
Sun, 21 Sep 2014 17:58:24 +0000 (13:58 -0400)
committerJoerg Roedel <jroedel@suse.de>
Thu, 25 Sep 2014 14:46:37 +0000 (16:46 +0200)
commitfb3e306515ba6a012364b698b8ca71c337424ed3
treedd1e4d8eb4e448d944e05fdc122796c0372f4728
parent25b11ce2a3607d7c39a2ca121eea0c67c722b34e
iommu: Fix bus notifier breakage

iommu_bus_init() registers a bus notifier on the given bus by using
a statically defined notifier block:

  static struct notifier_block iommu_bus_nb = {
          .notifier_call = iommu_bus_notifier,
  };

This same notifier block is used for all busses. This causes a
problem for notifiers registered after iommu has registered this
callback on multiple busses. The problem is that a subsequent
notifier being registered on a bus which has this iommu notifier
will also get linked in to the notifier list of all other busses
which have this iommu notifier.

This patch fixes this by allocating the notifier_block at runtime.
Some error checking is also added to catch any allocation failure
or notifier registration error.

Signed-off-by: Mark Salter <msalter@redhat.com>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/iommu.c