Re: [PATCH v6 10/11] tools: PCI: Add MSI-X support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thursday 21 June 2018 09:31 PM, Gustavo Pimentel wrote:
> Add MSI-X support to pcitest tool.
> 
> Modify pcitest.sh script to accommodate MSI-X interrupt tests.
> 
> Signed-off-by: Gustavo Pimentel <gustavo.pimentel@xxxxxxxxxxxx>

Acked-by: Kishon Vijay Abraham I <kishon@xxxxxx>
> ---
> Change v1->v2:
>  - Allow IRQ type driver reconfiguring in runtime, follwing Kishon's
> suggestion.
> Change v2->v3:
>  - Nothing changed, just to follow the patch set version.
> Change v3->v4:
>  - Rebased to Lorenzo's master branch v4.18-rc1.
> Change v4->v5:
>  - Nothing changed, just to follow the patch set version.
> Change v5->v6:
>  - Moved PCITEST_MSIX ioctl entry to patch #8.
>  - Moved PCITEST_SET_IRQTYPE and PCITEST_GET_IRQTYPE ioctl entries
> to patch #9.
> 
>  tools/pci/pcitest.c  | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++-
>  tools/pci/pcitest.sh | 15 +++++++++++++++
>  2 files changed, 65 insertions(+), 1 deletion(-)
> 
> diff --git a/tools/pci/pcitest.c b/tools/pci/pcitest.c
> index 9074b47..af146bb 100644
> --- a/tools/pci/pcitest.c
> +++ b/tools/pci/pcitest.c
> @@ -31,12 +31,17 @@
>  #define BILLION 1E9
>  
>  static char *result[] = { "NOT OKAY", "OKAY" };
> +static char *irq[] = { "LEGACY", "MSI", "MSI-X" };
>  
>  struct pci_test {
>  	char		*device;
>  	char		barnum;
>  	bool		legacyirq;
>  	unsigned int	msinum;
> +	unsigned int	msixnum;
> +	int		irqtype;
> +	bool		set_irqtype;
> +	bool		get_irqtype;
>  	bool		read;
>  	bool		write;
>  	bool		copy;
> @@ -65,6 +70,24 @@ static int run_test(struct pci_test *test)
>  			fprintf(stdout, "%s\n", result[ret]);
>  	}
>  
> +	if (test->set_irqtype) {
> +		ret = ioctl(fd, PCITEST_SET_IRQTYPE, test->irqtype);
> +		fprintf(stdout, "SET IRQ TYPE TO %s:\t\t", irq[test->irqtype]);
> +		if (ret < 0)
> +			fprintf(stdout, "FAILED\n");
> +		else
> +			fprintf(stdout, "%s\n", result[ret]);
> +	}
> +
> +	if (test->get_irqtype) {
> +		ret = ioctl(fd, PCITEST_GET_IRQTYPE);
> +		fprintf(stdout, "GET IRQ TYPE:\t\t");
> +		if (ret < 0)
> +			fprintf(stdout, "FAILED\n");
> +		else
> +			fprintf(stdout, "%s\n", irq[ret]);
> +	}
> +
>  	if (test->legacyirq) {
>  		ret = ioctl(fd, PCITEST_LEGACY_IRQ, 0);
>  		fprintf(stdout, "LEGACY IRQ:\t");
> @@ -83,6 +106,15 @@ static int run_test(struct pci_test *test)
>  			fprintf(stdout, "%s\n", result[ret]);
>  	}
>  
> +	if (test->msixnum > 0 && test->msixnum <= 2048) {
> +		ret = ioctl(fd, PCITEST_MSIX, test->msixnum);
> +		fprintf(stdout, "MSI-X%d:\t\t", test->msixnum);
> +		if (ret < 0)
> +			fprintf(stdout, "TEST FAILED\n");
> +		else
> +			fprintf(stdout, "%s\n", result[ret]);
> +	}
> +
>  	if (test->write) {
>  		ret = ioctl(fd, PCITEST_WRITE, test->size);
>  		fprintf(stdout, "WRITE (%7ld bytes):\t\t", test->size);
> @@ -133,7 +165,7 @@ int main(int argc, char **argv)
>  	/* set default endpoint device */
>  	test->device = "/dev/pci-endpoint-test.0";
>  
> -	while ((c = getopt(argc, argv, "D:b:m:lrwcs:")) != EOF)
> +	while ((c = getopt(argc, argv, "D:b:m:x:i:Ilrwcs:")) != EOF)
>  	switch (c) {
>  	case 'D':
>  		test->device = optarg;
> @@ -151,6 +183,20 @@ int main(int argc, char **argv)
>  		if (test->msinum < 1 || test->msinum > 32)
>  			goto usage;
>  		continue;
> +	case 'x':
> +		test->msixnum = atoi(optarg);
> +		if (test->msixnum < 1 || test->msixnum > 2048)
> +			goto usage;
> +		continue;
> +	case 'i':
> +		test->irqtype = atoi(optarg);
> +		if (test->irqtype < 0 || test->irqtype > 2)
> +			goto usage;
> +		test->set_irqtype = true;
> +		continue;
> +	case 'I':
> +		test->get_irqtype = true;
> +		continue;
>  	case 'r':
>  		test->read = true;
>  		continue;
> @@ -173,6 +219,9 @@ int main(int argc, char **argv)
>  			"\t-D <dev>		PCI endpoint test device {default: /dev/pci-endpoint-test.0}\n"
>  			"\t-b <bar num>		BAR test (bar number between 0..5)\n"
>  			"\t-m <msi num>		MSI test (msi number between 1..32)\n"
> +			"\t-x <msix num>	\tMSI-X test (msix number between 1..2048)\n"
> +			"\t-i <irq type>	\tSet IRQ type (0 - Legacy, 1 - MSI, 2 - MSI-X)\n"
> +			"\t-I			Get current IRQ type configured\n"
>  			"\t-l			Legacy IRQ test\n"
>  			"\t-r			Read buffer test\n"
>  			"\t-w			Write buffer test\n"
> diff --git a/tools/pci/pcitest.sh b/tools/pci/pcitest.sh
> index 77e8c85..75ed48f 100644
> --- a/tools/pci/pcitest.sh
> +++ b/tools/pci/pcitest.sh
> @@ -16,7 +16,10 @@ echo
>  echo "Interrupt tests"
>  echo
>  
> +pcitest -i 0
>  pcitest -l
> +
> +pcitest -i 1
>  msi=1
>  
>  while [ $msi -lt 33 ]
> @@ -26,9 +29,21 @@ do
>  done
>  echo
>  
> +pcitest -i 2
> +msix=1
> +
> +while [ $msix -lt 2049 ]
> +do
> +        pcitest -x $msix
> +        msix=`expr $msix + 1`
> +done
> +echo
> +
>  echo "Read Tests"
>  echo
>  
> +pcitest -i 1
> +
>  pcitest -r -s 1
>  pcitest -r -s 1024
>  pcitest -r -s 1025
> 



[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux