]> Pileus Git - ~andy/linux/commitdiff
Merge branches 'iommu/fixes', 'dma-debug', 'x86/amd', 'x86/vt-d', 'arm/tegra' and...
authorJoerg Roedel <joro@8bytes.org>
Sun, 16 Dec 2012 11:24:09 +0000 (12:24 +0100)
committerJoerg Roedel <joro@8bytes.org>
Sun, 16 Dec 2012 11:24:09 +0000 (12:24 +0100)
1  2  3  4  5  6 
drivers/iommu/intel-iommu.c
drivers/media/platform/omap3isp/ispccdc.c
drivers/media/platform/omap3isp/ispstat.c
drivers/media/platform/omap3isp/ispvideo.c

index 0badfa48b32b7e84a16449ebc8804e461529c8b9,d4a4cd445cabb40504bd2a1c7d5300656feceaff,d4a4cd445cabb40504bd2a1c7d5300656feceaff,ca3ee46a8d61aa3348602b2e3353d9701aa678aa,0badfa48b32b7e84a16449ebc8804e461529c8b9,0badfa48b32b7e84a16449ebc8804e461529c8b9..f7fd3d0aeb4ca55bc2130a76c76e0adae4de28fc
@@@@@@@ -2320,8 -2320,8 -2320,8 -2320,39 -2320,8 -2320,8 +2320,39 @@@@@@@ static int domain_add_dev_info(struct d
        return 0;
      }
      
+++ ++static bool device_has_rmrr(struct pci_dev *dev)
+++ ++{
+++ ++  struct dmar_rmrr_unit *rmrr;
+++ ++  int i;
+++ ++
+++ ++  for_each_rmrr_units(rmrr) {
+++ ++          for (i = 0; i < rmrr->devices_cnt; i++) {
+++ ++                  /*
+++ ++                   * Return TRUE if this RMRR contains the device that
+++ ++                   * is passed in.
+++ ++                   */
+++ ++                  if (rmrr->devices[i] == dev)
+++ ++                          return true;
+++ ++          }
+++ ++  }
+++ ++  return false;
+++ ++}
+++ ++
      static int iommu_should_identity_map(struct pci_dev *pdev, int startup)
      {
+++ ++
+++ ++  /*
+++ ++   * We want to prevent any device associated with an RMRR from
+++ ++   * getting placed into the SI Domain. This is done because
+++ ++   * problems exist when devices are moved in and out of domains
+++ ++   * and their respective RMRR info is lost. We exempt USB devices
+++ ++   * from this process due to their usage of RMRRs that are known
+++ ++   * to not be needed after BIOS hand-off to OS.
+++ ++   */
+++ ++  if (device_has_rmrr(pdev) &&
+++ ++      (pdev->class >> 8) != PCI_CLASS_SERIAL_USB)
+++ ++          return 0;
+++ ++
        if ((iommu_identity_mapping & IDENTMAP_AZALIA) && IS_AZALIA(pdev))
                return 1;
      
@@@@@@@ -4108,7 -4108,7 -4108,7 -4139,7 -4108,7 -4108,7 +4139,7 @@@@@@@ static void swap_pci_ref(struct pci_de
      static int intel_iommu_add_device(struct device *dev)
      {
        struct pci_dev *pdev = to_pci_dev(dev);
 ---    struct pci_dev *bridge, *dma_pdev;
 +++    struct pci_dev *bridge, *dma_pdev = NULL;
        struct iommu_group *group;
        int ret;
      
                        dma_pdev = pci_get_domain_bus_and_slot(
                                                pci_domain_nr(pdev->bus),
                                                bridge->subordinate->number, 0);
 ---            else
 +++            if (!dma_pdev)
                        dma_pdev = pci_dev_get(bridge);
        } else
                dma_pdev = pci_dev_get(pdev);
index aa9df9d71a7b0a455544446ed3e79e7c83ac7218,60181ab96063ea12be4f0a10f6b02e5a86e29991,60181ab96063ea12be4f0a10f6b02e5a86e29991,60181ab96063ea12be4f0a10f6b02e5a86e29991,60181ab96063ea12be4f0a10f6b02e5a86e29991,6ae1ffb277e7afe131134d3cec83aa0f4f2a7c9b..60e60aa64fb461cb05799ec72fbe4f67e0ef62a1
      #include <linux/device.h>
      #include <linux/dma-mapping.h>
      #include <linux/mm.h>
+++++ #include <linux/omap-iommu.h>
      #include <linux/sched.h>
      #include <linux/slab.h>
      #include <media/v4l2-event.h>
@@@@@@@ -1706,7 -1706,7 -1706,7 -1706,7 -1706,7 -1707,7 +1707,7 @@@@@@@ static long ccdc_ioctl(struct v4l2_subd
      }
      
      static int ccdc_subscribe_event(struct v4l2_subdev *sd, struct v4l2_fh *fh,
 -----                          const struct v4l2_event_subscription *sub)
 +++++                          struct v4l2_event_subscription *sub)
      {
        if (sub->type != V4L2_EVENT_FRAME_SYNC)
                return -EINVAL;
      }
      
      static int ccdc_unsubscribe_event(struct v4l2_subdev *sd, struct v4l2_fh *fh,
 -----                            const struct v4l2_event_subscription *sub)
 +++++                            struct v4l2_event_subscription *sub)
      {
        return v4l2_event_unsubscribe(fh, sub);
      }
index b8640be692f1aef7f093b6364ddb62c15a881504,d7ac76b5c2aee4d38916057b1757d2366b27b188,d7ac76b5c2aee4d38916057b1757d2366b27b188,d7ac76b5c2aee4d38916057b1757d2366b27b188,d7ac76b5c2aee4d38916057b1757d2366b27b188,35c38237449dbc14cf1999b1ed1316811eae66b3..e7939869bda76c1037366223e6691fc456ca6876
       */
      
      #include <linux/dma-mapping.h>
+++++ #include <linux/omap-iommu.h>
      #include <linux/slab.h>
      #include <linux/uaccess.h>
      
@@@@@@@ -1025,7 -1025,7 -1025,7 -1025,7 -1025,7 -1026,7 +1026,7 @@@@@@@ void omap3isp_stat_dma_isr(struct ispst
      
      int omap3isp_stat_subscribe_event(struct v4l2_subdev *subdev,
                                  struct v4l2_fh *fh,
 -----                            const struct v4l2_event_subscription *sub)
 +++++                            struct v4l2_event_subscription *sub)
      {
        struct ispstat *stat = v4l2_get_subdevdata(subdev);
      
      
      int omap3isp_stat_unsubscribe_event(struct v4l2_subdev *subdev,
                                    struct v4l2_fh *fh,
 -----                              const struct v4l2_event_subscription *sub)
 +++++                              struct v4l2_event_subscription *sub)
      {
        return v4l2_event_unsubscribe(fh, sub);
      }
index 75cd309035f90f303f6bfe1d3b1ad86f078536d7,a0b737fecf138e61413fca9ca6c36443b5b452f4,a0b737fecf138e61413fca9ca6c36443b5b452f4,a0b737fecf138e61413fca9ca6c36443b5b452f4,a0b737fecf138e61413fca9ca6c36443b5b452f4,21f7313e6999372fe130c7d3e4d24ed3259dde33..6e74346cc357133a3cc212cacc65876a2ec2e3e1
      #include <linux/clk.h>
      #include <linux/mm.h>
      #include <linux/module.h>
+++++ #include <linux/omap-iommu.h>
      #include <linux/pagemap.h>
      #include <linux/scatterlist.h>
      #include <linux/sched.h>
      #include <linux/vmalloc.h>
      #include <media/v4l2-dev.h>
      #include <media/v4l2-ioctl.h>
----- #include <plat/iommu.h>
----- #include <plat/iovmm.h>
      #include <plat/omap-pm.h>
      
      #include "ispvideo.h"
@@@@@@@ -792,7 -792,7 -792,7 -792,7 -792,7 -791,7 +791,7 @@@@@@@ isp_video_get_crop(struct file *file, v
      }
      
      static int
 -----isp_video_set_crop(struct file *file, void *fh, struct v4l2_crop *crop)
 +++++isp_video_set_crop(struct file *file, void *fh, const struct v4l2_crop *crop)
      {
        struct isp_video *video = video_drvdata(file);
        struct v4l2_subdev *subdev;