powerpc/powernv/sriov: Move M64 BAR allocation into a helper
authorOliver O'Halloran <oohall@gmail.com>
Wed, 22 Jul 2020 06:57:12 +0000 (16:57 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Sun, 26 Jul 2020 13:34:23 +0000 (23:34 +1000)
I want to refactor the loop this code is currently inside of. Hoist it on
out.

Signed-off-by: Oliver O'Halloran <oohall@gmail.com>
Reviewed-by: Alexey Kardashevskiy <aik@ozlabs.ru>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20200722065715.1432738-13-oohall@gmail.com
arch/powerpc/platforms/powernv/pci-sriov.c

index 4bd617b19b6d9b520f43e82880309822dfb00f1d..8eee59c210c89d240d0bbd07f96f95a5363bdb62 100644 (file)
@@ -412,6 +412,23 @@ out:
        return rc;
 }
 
+static int pnv_pci_alloc_m64_bar(struct pnv_phb *phb, struct pnv_iov_data *iov)
+{
+       int win;
+
+       do {
+               win = find_next_zero_bit(&phb->ioda.m64_bar_alloc,
+                               phb->ioda.m64_bar_idx + 1, 0);
+
+               if (win >= phb->ioda.m64_bar_idx + 1)
+                       return -1;
+       } while (test_and_set_bit(win, &phb->ioda.m64_bar_alloc));
+
+       set_bit(win, iov->used_m64_bar_mask);
+
+       return win;
+}
+
 static int pnv_pci_vf_assign_m64(struct pci_dev *pdev, u16 num_vfs)
 {
        struct pnv_iov_data   *iov;
@@ -439,17 +456,9 @@ static int pnv_pci_vf_assign_m64(struct pci_dev *pdev, u16 num_vfs)
                        continue;
 
                for (j = 0; j < m64_bars; j++) {
-
-                       /* allocate a window ID for this BAR */
-                       do {
-                               win = find_next_zero_bit(&phb->ioda.m64_bar_alloc,
-                                               phb->ioda.m64_bar_idx + 1, 0);
-
-                               if (win >= phb->ioda.m64_bar_idx + 1)
-                                       goto m64_failed;
-                       } while (test_and_set_bit(win, &phb->ioda.m64_bar_alloc));
-                       set_bit(win, iov->used_m64_bar_mask);
-
+                       win = pnv_pci_alloc_m64_bar(phb, iov);
+                       if (win < 0)
+                               goto m64_failed;
 
                        if (iov->m64_single_mode) {
                                int pe_num = iov->vf_pe_arr[j].pe_number;