diff options
author | Dan Williams <dan.j.williams@intel.com> | 2013-11-13 19:29:52 -0500 |
---|---|---|
committer | Dan Williams <dan.j.williams@intel.com> | 2013-11-14 14:04:42 -0500 |
commit | 4c5d9619e06b960d14f5640341f40e71f78801c2 (patch) | |
tree | 3eff1516e4facdcfb7b96238d549d38ca7f4e6b3 | |
parent | 09ec0f583f40bbecdf011b504dda9c1160fe0277 (diff) |
ioat: kill msix_single_vector support
Once we have determined that we will not have all of our desired msix
vectors there is no point in attempting a single msix allocation. The
driver will already need to read registers to determine the source of
the interrupt the fact that it is msix is moot. Fallback directly to
msi.
Reported-by: Alexander Gordeev <agordeev@redhat.com>
Cc: Dave Jiang <dave.jiang@intel.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
-rw-r--r-- | drivers/dma/ioat/dma.c | 27 | ||||
-rw-r--r-- | drivers/dma/ioat/dma.h | 1 | ||||
-rw-r--r-- | drivers/dma/ioat/dma_v3.c | 7 |
3 files changed, 3 insertions, 32 deletions
diff --git a/drivers/dma/ioat/dma.c b/drivers/dma/ioat/dma.c index 6fcf741ad91b..fb879d9f026f 100644 --- a/drivers/dma/ioat/dma.c +++ b/drivers/dma/ioat/dma.c | |||
@@ -869,8 +869,7 @@ static char ioat_interrupt_style[32] = "msix"; | |||
869 | module_param_string(ioat_interrupt_style, ioat_interrupt_style, | 869 | module_param_string(ioat_interrupt_style, ioat_interrupt_style, |
870 | sizeof(ioat_interrupt_style), 0644); | 870 | sizeof(ioat_interrupt_style), 0644); |
871 | MODULE_PARM_DESC(ioat_interrupt_style, | 871 | MODULE_PARM_DESC(ioat_interrupt_style, |
872 | "set ioat interrupt style: msix (default), " | 872 | "set ioat interrupt style: msix (default), msi, intx"); |
873 | "msix-single-vector, msi, intx)"); | ||
874 | 873 | ||
875 | /** | 874 | /** |
876 | * ioat_dma_setup_interrupts - setup interrupt handler | 875 | * ioat_dma_setup_interrupts - setup interrupt handler |
@@ -888,8 +887,6 @@ int ioat_dma_setup_interrupts(struct ioatdma_device *device) | |||
888 | 887 | ||
889 | if (!strcmp(ioat_interrupt_style, "msix")) | 888 | if (!strcmp(ioat_interrupt_style, "msix")) |
890 | goto msix; | 889 | goto msix; |
891 | if (!strcmp(ioat_interrupt_style, "msix-single-vector")) | ||
892 | goto msix_single_vector; | ||
893 | if (!strcmp(ioat_interrupt_style, "msi")) | 890 | if (!strcmp(ioat_interrupt_style, "msi")) |
894 | goto msi; | 891 | goto msi; |
895 | if (!strcmp(ioat_interrupt_style, "intx")) | 892 | if (!strcmp(ioat_interrupt_style, "intx")) |
@@ -904,10 +901,8 @@ msix: | |||
904 | device->msix_entries[i].entry = i; | 901 | device->msix_entries[i].entry = i; |
905 | 902 | ||
906 | err = pci_enable_msix(pdev, device->msix_entries, msixcnt); | 903 | err = pci_enable_msix(pdev, device->msix_entries, msixcnt); |
907 | if (err < 0) | 904 | if (err) |
908 | goto msi; | 905 | goto msi; |
909 | if (err > 0) | ||
910 | goto msix_single_vector; | ||
911 | 906 | ||
912 | for (i = 0; i < msixcnt; i++) { | 907 | for (i = 0; i < msixcnt; i++) { |
913 | msix = &device->msix_entries[i]; | 908 | msix = &device->msix_entries[i]; |
@@ -921,29 +916,13 @@ msix: | |||
921 | chan = ioat_chan_by_index(device, j); | 916 | chan = ioat_chan_by_index(device, j); |
922 | devm_free_irq(dev, msix->vector, chan); | 917 | devm_free_irq(dev, msix->vector, chan); |
923 | } | 918 | } |
924 | goto msix_single_vector; | 919 | goto msi; |
925 | } | 920 | } |
926 | } | 921 | } |
927 | intrctrl |= IOAT_INTRCTRL_MSIX_VECTOR_CONTROL; | 922 | intrctrl |= IOAT_INTRCTRL_MSIX_VECTOR_CONTROL; |
928 | device->irq_mode = IOAT_MSIX; | 923 | device->irq_mode = IOAT_MSIX; |
929 | goto done; | 924 | goto done; |
930 | 925 | ||
931 | msix_single_vector: | ||
932 | msix = &device->msix_entries[0]; | ||
933 | msix->entry = 0; | ||
934 | err = pci_enable_msix(pdev, device->msix_entries, 1); | ||
935 | if (err) | ||
936 | goto msi; | ||
937 | |||
938 | err = devm_request_irq(dev, msix->vector, ioat_dma_do_interrupt, 0, | ||
939 | "ioat-msix", device); | ||
940 | if (err) { | ||
941 | pci_disable_msix(pdev); | ||
942 | goto msi; | ||
943 | } | ||
944 | device->irq_mode = IOAT_MSIX_SINGLE; | ||
945 | goto done; | ||
946 | |||
947 | msi: | 926 | msi: |
948 | err = pci_enable_msi(pdev); | 927 | err = pci_enable_msi(pdev); |
949 | if (err) | 928 | if (err) |
diff --git a/drivers/dma/ioat/dma.h b/drivers/dma/ioat/dma.h index df552d841481..11fb877ddca9 100644 --- a/drivers/dma/ioat/dma.h +++ b/drivers/dma/ioat/dma.h | |||
@@ -52,7 +52,6 @@ | |||
52 | enum ioat_irq_mode { | 52 | enum ioat_irq_mode { |
53 | IOAT_NOIRQ = 0, | 53 | IOAT_NOIRQ = 0, |
54 | IOAT_MSIX, | 54 | IOAT_MSIX, |
55 | IOAT_MSIX_SINGLE, | ||
56 | IOAT_MSI, | 55 | IOAT_MSI, |
57 | IOAT_INTX | 56 | IOAT_INTX |
58 | }; | 57 | }; |
diff --git a/drivers/dma/ioat/dma_v3.c b/drivers/dma/ioat/dma_v3.c index f8170de1d6a4..38616634780f 100644 --- a/drivers/dma/ioat/dma_v3.c +++ b/drivers/dma/ioat/dma_v3.c | |||
@@ -1468,13 +1468,6 @@ static int ioat3_irq_reinit(struct ioatdma_device *device) | |||
1468 | pci_disable_msix(pdev); | 1468 | pci_disable_msix(pdev); |
1469 | break; | 1469 | break; |
1470 | 1470 | ||
1471 | case IOAT_MSIX_SINGLE: | ||
1472 | msix = &device->msix_entries[0]; | ||
1473 | chan = ioat_chan_by_index(device, 0); | ||
1474 | devm_free_irq(&pdev->dev, msix->vector, chan); | ||
1475 | pci_disable_msix(pdev); | ||
1476 | break; | ||
1477 | |||
1478 | case IOAT_MSI: | 1471 | case IOAT_MSI: |
1479 | chan = ioat_chan_by_index(device, 0); | 1472 | chan = ioat_chan_by_index(device, 0); |
1480 | devm_free_irq(&pdev->dev, pdev->irq, chan); | 1473 | devm_free_irq(&pdev->dev, pdev->irq, chan); |