These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / misc / mic / host / mic_smpt.c
index fae474c..c3f9585 100644 (file)
@@ -76,7 +76,7 @@ mic_is_system_addr(struct mic_device *mdev, dma_addr_t pa)
 
 /* Populate an SMPT entry and update the reference counts. */
 static void mic_add_smpt_entry(int spt, s64 *ref, u64 addr,
-               int entries, struct mic_device *mdev)
+                              int entries, struct mic_device *mdev)
 {
        struct mic_smpt_info *smpt_info = mdev->smpt;
        int i;
@@ -97,7 +97,7 @@ static void mic_add_smpt_entry(int spt, s64 *ref, u64 addr,
  * for a given DMA address and size.
  */
 static dma_addr_t mic_smpt_op(struct mic_device *mdev, u64 dma_addr,
-                               int entries, s64 *ref, size_t size)
+                             int entries, s64 *ref, size_t size)
 {
        int spt;
        int ae = 0;
@@ -148,7 +148,7 @@ found:
  * and the starting smpt address
  */
 static int mic_get_smpt_ref_count(struct mic_device *mdev, dma_addr_t dma_addr,
-                               size_t size, s64 *ref,  u64 *smpt_start)
+                                 size_t size, s64 *ref,  u64 *smpt_start)
 {
        u64 start =  dma_addr;
        u64 end = dma_addr + size;
@@ -174,15 +174,14 @@ static int mic_get_smpt_ref_count(struct mic_device *mdev, dma_addr_t dma_addr,
  *
  * returns a DMA address.
  */
-static dma_addr_t
-mic_to_dma_addr(struct mic_device *mdev, dma_addr_t mic_addr)
+dma_addr_t mic_to_dma_addr(struct mic_device *mdev, dma_addr_t mic_addr)
 {
        struct mic_smpt_info *smpt_info = mdev->smpt;
        int spt;
        dma_addr_t dma_addr;
 
        if (!mic_is_system_addr(mdev, mic_addr)) {
-               dev_err(mdev->sdev->parent,
+               dev_err(&mdev->pdev->dev,
                        "mic_addr is invalid. mic_addr = 0x%llx\n", mic_addr);
                return -EINVAL;
        }
@@ -214,12 +213,12 @@ dma_addr_t mic_map(struct mic_device *mdev, dma_addr_t dma_addr, size_t size)
        if (!size || size > mic_max_system_memory(mdev))
                return mic_addr;
 
-       ref = kmalloc(mdev->smpt->info.num_reg * sizeof(s64), GFP_KERNEL);
+       ref = kmalloc_array(mdev->smpt->info.num_reg, sizeof(s64), GFP_ATOMIC);
        if (!ref)
                return mic_addr;
 
        num_entries = mic_get_smpt_ref_count(mdev, dma_addr, size,
-               ref, &smpt_start);
+                                            ref, &smpt_start);
 
        /* Set the smpt table appropriately and get 16G aligned mic address */
        mic_addr = mic_smpt_op(mdev, smpt_start, num_entries, ref, size);
@@ -232,7 +231,7 @@ dma_addr_t mic_map(struct mic_device *mdev, dma_addr_t dma_addr, size_t size)
         * else generate mic_addr by adding the 16G offset in dma_addr
         */
        if (!mic_addr && MIC_FAMILY_X100 == mdev->family) {
-               dev_err(mdev->sdev->parent,
+               dev_err(&mdev->pdev->dev,
                        "mic_map failed dma_addr 0x%llx size 0x%lx\n",
                        dma_addr, size);
                return mic_addr;
@@ -265,13 +264,13 @@ void mic_unmap(struct mic_device *mdev, dma_addr_t mic_addr, size_t size)
                return;
 
        if (!mic_is_system_addr(mdev, mic_addr)) {
-               dev_err(mdev->sdev->parent,
+               dev_err(&mdev->pdev->dev,
                        "invalid address: 0x%llx\n", mic_addr);
                return;
        }
 
        spt = mic_sys_addr_to_smpt(mdev, mic_addr);
-       ref = kmalloc(mdev->smpt->info.num_reg * sizeof(s64), GFP_KERNEL);
+       ref = kmalloc_array(mdev->smpt->info.num_reg, sizeof(s64), GFP_ATOMIC);
        if (!ref)
                return;
 
@@ -285,7 +284,7 @@ void mic_unmap(struct mic_device *mdev, dma_addr_t mic_addr, size_t size)
        for (i = spt; i < spt + num_smpt; i++) {
                smpt_info->entry[i].ref_count -= ref[i - spt];
                if (smpt_info->entry[i].ref_count < 0)
-                       dev_warn(mdev->sdev->parent,
+                       dev_warn(&mdev->pdev->dev,
                                 "ref count for entry %d is negative\n", i);
        }
        spin_unlock_irqrestore(&smpt_info->smpt_lock, flags);
@@ -308,15 +307,14 @@ void mic_unmap(struct mic_device *mdev, dma_addr_t mic_addr, size_t size)
 dma_addr_t mic_map_single(struct mic_device *mdev, void *va, size_t size)
 {
        dma_addr_t mic_addr = 0;
-       struct pci_dev *pdev = container_of(mdev->sdev->parent,
-               struct pci_dev, dev);
+       struct pci_dev *pdev = mdev->pdev;
        dma_addr_t dma_addr =
                pci_map_single(pdev, va, size, PCI_DMA_BIDIRECTIONAL);
 
        if (!pci_dma_mapping_error(pdev, dma_addr)) {
                mic_addr = mic_map(mdev, dma_addr, size);
                if (!mic_addr) {
-                       dev_err(mdev->sdev->parent,
+                       dev_err(&mdev->pdev->dev,
                                "mic_map failed dma_addr 0x%llx size 0x%lx\n",
                                dma_addr, size);
                        pci_unmap_single(pdev, dma_addr,
@@ -340,8 +338,7 @@ dma_addr_t mic_map_single(struct mic_device *mdev, void *va, size_t size)
 void
 mic_unmap_single(struct mic_device *mdev, dma_addr_t mic_addr, size_t size)
 {
-       struct pci_dev *pdev = container_of(mdev->sdev->parent,
-               struct pci_dev, dev);
+       struct pci_dev *pdev = mdev->pdev;
        dma_addr_t dma_addr = mic_to_dma_addr(mdev, mic_addr);
        mic_unmap(mdev, mic_addr, size);
        pci_unmap_single(pdev, dma_addr, size, PCI_DMA_BIDIRECTIONAL);
@@ -400,18 +397,18 @@ void mic_smpt_uninit(struct mic_device *mdev)
        struct mic_smpt_info *smpt_info = mdev->smpt;
        int i;
 
-       dev_dbg(mdev->sdev->parent,
+       dev_dbg(&mdev->pdev->dev,
                "nodeid %d SMPT ref count %lld map %lld unmap %lld\n",
                mdev->id, smpt_info->ref_count,
                smpt_info->map_count, smpt_info->unmap_count);
 
        for (i = 0; i < smpt_info->info.num_reg; i++) {
-               dev_dbg(mdev->sdev->parent,
+               dev_dbg(&mdev->pdev->dev,
                        "SMPT entry[%d] dma_addr = 0x%llx ref_count = %lld\n",
                        i, smpt_info->entry[i].dma_addr,
                        smpt_info->entry[i].ref_count);
                if (smpt_info->entry[i].ref_count)
-                       dev_warn(mdev->sdev->parent,
+                       dev_warn(&mdev->pdev->dev,
                                 "ref count for entry %d is not zero\n", i);
        }
        kfree(smpt_info->entry);