All of lore.kernel.org
 help / color / mirror / Atom feed
From: Johannes Thumshirn <morbidrsa@gmail.com>
To: Mahesh Rajashekhara <Mahesh.Rajashekhara@pmcs.com>
Cc: hare@suse.de, JBottomley@Parallels.com,
	linux-scsi@vger.kernel.org, Achim.Leubner@pmcs.com
Subject: Re: [V2 PATCH 04/11] aacraid: MSI-x support
Date: Fri, 27 Mar 2015 14:28:36 +0100	[thread overview]
Message-ID: <874mp6zi0r.fsf@sauron.fritz.box> (raw)
In-Reply-To: <1427380892-1978-5-git-send-email-Mahesh.Rajashekhara@pmcs.com> (Mahesh Rajashekhara's message of "Thu, 26 Mar 2015 10:41:25 -0400")

Mahesh Rajashekhara <Mahesh.Rajashekhara@pmcs.com> writes:

> Add MSI-x interrupt mode support.
>
> Signed-off-by: Mahesh Rajashekhara <Mahesh.Rajashekhara@pmcs.com>
> ---
>  drivers/scsi/aacraid/aacraid.h  |   80 ++++++++-
>  drivers/scsi/aacraid/comminit.c |   95 +++++++++-
>  drivers/scsi/aacraid/commsup.c  |   20 ++-
>  drivers/scsi/aacraid/dpcsup.c   |    9 +-
>  drivers/scsi/aacraid/linit.c    |   20 ++-
>  drivers/scsi/aacraid/src.c      |  388 ++++++++++++++++++++++++++++++---------
>  6 files changed, 505 insertions(+), 107 deletions(-)
>
> diff --git a/drivers/scsi/aacraid/aacraid.h b/drivers/scsi/aacraid/aacraid.h
> index 9e38b20..015c341 100644
> --- a/drivers/scsi/aacraid/aacraid.h
> +++ b/drivers/scsi/aacraid/aacraid.h
> @@ -6,11 +6,61 @@
>  #define nblank(x) _nblank(x)[0]
>  
>  #include <linux/interrupt.h>
> +#include <linux/pci.h>
>  
>  /*------------------------------------------------------------------------------
>   *              D E F I N E S
>   *----------------------------------------------------------------------------*/
>  
> +#define AAC_MAX_MSIX		32	/* vectors */
> +#define AAC_PCI_MSI_ENABLE	0x8000
> +
> +enum {
> +	AAC_ENABLE_INTERRUPT	= 0x0,
> +	AAC_DISABLE_INTERRUPT,
> +	AAC_ENABLE_MSIX,
> +	AAC_DISABLE_MSIX,
> +	AAC_CLEAR_AIF_BIT,
> +	AAC_CLEAR_SYNC_BIT,
> +	AAC_ENABLE_INTX
> +};
> +
> +#define AAC_INT_MODE_INTX		(1<<0)
> +#define AAC_INT_MODE_MSI		(1<<1)
> +#define AAC_INT_MODE_AIF		(1<<2)
> +#define AAC_INT_MODE_SYNC		(1<<3)
> +
> +#define AAC_INT_ENABLE_TYPE1_INTX	0xfffffffb
> +#define AAC_INT_ENABLE_TYPE1_MSIX	0xfffffffa
> +#define AAC_INT_DISABLE_ALL		0xffffffff
> +
> +/* Bit definitions in IOA->Host Interrupt Register */
> +#define PMC_TRANSITION_TO_OPERATIONAL	(1<<31)
> +#define PMC_IOARCB_TRANSFER_FAILED	(1<<28)
> +#define PMC_IOA_UNIT_CHECK		(1<<27)
> +#define PMC_NO_HOST_RRQ_FOR_CMD_RESPONSE (1<<26)
> +#define PMC_CRITICAL_IOA_OP_IN_PROGRESS	(1<<25)
> +#define PMC_IOARRIN_LOST		(1<<4)
> +#define PMC_SYSTEM_BUS_MMIO_ERROR	(1<<3)
> +#define PMC_IOA_PROCESSOR_IN_ERROR_STATE (1<<2)
> +#define PMC_HOST_RRQ_VALID		(1<<1)
> +#define PMC_OPERATIONAL_STATUS		(1<<31)
> +#define PMC_ALLOW_MSIX_VECTOR0		(1<<0)
> +
> +#define PMC_IOA_ERROR_INTERRUPTS	(PMC_IOARCB_TRANSFER_FAILED | \
> +					 PMC_IOA_UNIT_CHECK | \
> +					 PMC_NO_HOST_RRQ_FOR_CMD_RESPONSE | \
> +					 PMC_IOARRIN_LOST | \
> +					 PMC_SYSTEM_BUS_MMIO_ERROR | \
> +					 PMC_IOA_PROCESSOR_IN_ERROR_STATE)
> +
> +#define PMC_ALL_INTERRUPT_BITS		(PMC_IOA_ERROR_INTERRUPTS | \
> +					 PMC_HOST_RRQ_VALID | \
> +					 PMC_TRANSITION_TO_OPERATIONAL | \
> +					 PMC_ALLOW_MSIX_VECTOR0)
> +#define	PMC_GLOBAL_INT_BIT2		0x00000004
> +#define	PMC_GLOBAL_INT_BIT0		0x00000001
> +
>  #ifndef AAC_DRIVER_BUILD
>  # define AAC_DRIVER_BUILD 30300
>  # define AAC_DRIVER_BRANCH "-ms"
> @@ -36,6 +86,7 @@
>  #define CONTAINER_TO_ID(cont)		(cont)
>  #define CONTAINER_TO_LUN(cont)		(0)
>  
> +#define PMC_DEVICE_S6	0x28b
>  #define PMC_DEVICE_S7	0x28c
>  #define PMC_DEVICE_S8	0x28d
>  #define PMC_DEVICE_S9	0x28f
> @@ -434,7 +485,7 @@ enum fib_xfer_state {
>  struct aac_init
>  {
>  	__le32	InitStructRevision;
> -	__le32	MiniPortRevision;
> +	__le32	Sa_MSIXVectors;
>  	__le32	fsrev;
>  	__le32	CommHeaderAddress;
>  	__le32	FastIoCommAreaAddress;
> @@ -755,7 +806,8 @@ struct rkt_registers {
>  
>  struct src_mu_registers {
>  				/*	PCI*| Name */
> -	__le32	reserved0[8];	/*	00h | Reserved */
> +	__le32	reserved0[6];	/*	00h | Reserved */
> +	__le32	IOAR[2];	/*	18h | IOA->host interrupt register */
>  	__le32	IDR;		/*	20h | Inbound Doorbell Register */
>  	__le32	IISR;		/*	24h | Inbound Int. Status Register */
>  	__le32	reserved1[3];	/*	28h | Reserved */
> @@ -767,17 +819,18 @@ struct src_mu_registers {
>  	__le32	OMR;		/*	bch | Outbound Message Register */
>  	__le32	IQ_L;		/*  c0h | Inbound Queue (Low address) */
>  	__le32	IQ_H;		/*  c4h | Inbound Queue (High address) */
> +	__le32	ODR_MSI;	/*  c8h | MSI register for sync./AIF */
>  };
>  
>  struct src_registers {
> -	struct src_mu_registers MUnit;	/* 00h - c7h */
> +	struct src_mu_registers MUnit;	/* 00h - cbh */
>  	union {
>  		struct {
> -			__le32 reserved1[130790];	/* c8h - 7fc5fh */
> +			__le32 reserved1[130789];	/* cch - 7fc5fh */
>  			struct src_inbound IndexRegs;	/* 7fc60h */
>  		} tupelo;
>  		struct {
> -			__le32 reserved1[974];		/* c8h - fffh */
> +			__le32 reserved1[973];		/* cch - fffh */
>  			struct src_inbound IndexRegs;	/* 1000h */
>  		} denali;
>  	} u;
> @@ -1029,6 +1082,11 @@ struct aac_bus_info_response {
>  #define AAC_OPT_NEW_COMM_TYPE3		cpu_to_le32(1<<30)
>  #define AAC_OPT_NEW_COMM_TYPE4		cpu_to_le32(1<<31)
>  
> +/* MSIX context */
> +struct aac_msix_ctx {
> +	int		vector_no;
> +	struct aac_dev	*dev;
> +};
>  
>  struct aac_dev
>  {
> @@ -1084,8 +1142,10 @@ struct aac_dev
>  						 * if AAC_COMM_MESSAGE_TYPE1 */
>  
>  	dma_addr_t		host_rrq_pa;	/* phys. address */
> -	u32			host_rrq_idx;	/* index into rrq buffer */
> -
> +	/* index into rrq buffer */
> +	u32			host_rrq_idx[AAC_MAX_MSIX];
> +	atomic_t		rrq_outstanding[AAC_MAX_MSIX];
> +	u32			fibs_pushed_no;
>  	struct pci_dev		*pdev;		/* Our PCI interface */
>  	void *			printfbuf;	/* pointer to buffer used for printf's from the adapter */
>  	void *			comm_addr;	/* Base address of Comm area */
> @@ -1154,6 +1214,11 @@ struct aac_dev
>  	int			sync_mode;
>  	struct fib		*sync_fib;
>  	struct list_head	sync_fib_list;
> +	u32			max_msix;	/* max. MSI-X vectors */
> +	u32			vector_cap;	/* MSI-X vector capab.*/
> +	int			msi_enabled;	/* MSI/MSI-X enabled */

Is there a specific reason why you're not using the msi_enabled /
msix_enabled field of struct pci_dev, or even calling
pci_dev_msi_enabled() instead of duplicating it here?

Thanks,
        Johannes


  parent reply	other threads:[~2015-03-27 13:28 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-03-26 14:41 [V2 PATCH 00/11] aacraid driver updates Mahesh Rajashekhara
2015-03-26 14:41 ` [V2 PATCH 01/11] aacraid: AIF support for SES device add/remove Mahesh Rajashekhara
2015-03-27 10:12   ` Hannes Reinecke
2015-03-30 10:12     ` Murthy Bhat
2015-03-26 14:41 ` [V2 PATCH 02/11] aacraid: IOCTL pass-through command fix Mahesh Rajashekhara
2015-03-27 10:13   ` Hannes Reinecke
2015-03-30 10:13     ` Murthy Bhat
2015-03-26 14:41 ` [V2 PATCH 03/11] aacraid: 4KB sector support Mahesh Rajashekhara
2015-03-27 10:15   ` Hannes Reinecke
2015-03-27 10:59     ` Mahesh Rajashekhara
2015-03-27 11:03       ` Hannes Reinecke
2015-03-30 10:13         ` Murthy Bhat
2015-03-26 14:41 ` [V2 PATCH 04/11] aacraid: MSI-x support Mahesh Rajashekhara
2015-03-27 10:17   ` Hannes Reinecke
2015-03-30 10:13     ` Murthy Bhat
2015-03-27 13:28   ` Johannes Thumshirn [this message]
2015-03-27 17:03     ` Mahesh Rajashekhara
2015-03-26 14:41 ` [V2 PATCH 05/11] aacraid: vpd page code 0x83 support Mahesh Rajashekhara
2015-03-27 10:18   ` Hannes Reinecke
2015-03-30 10:14     ` Murthy Bhat
2015-03-26 14:41 ` [V2 PATCH 06/11] aacraid: 240 simple volume support Mahesh Rajashekhara
2015-03-27 10:19   ` Hannes Reinecke
2015-03-30 10:14     ` Murthy Bhat
2015-03-26 14:41 ` [V2 PATCH 07/11] aacraid: IOP RESET command handling changes Mahesh Rajashekhara
2015-03-27 10:20   ` Hannes Reinecke
2015-03-27 11:15     ` Mahesh Rajashekhara
2015-03-30 10:15     ` Murthy Bhat
2015-03-26 14:41 ` [V2 PATCH 08/11] aacraid: IOCTL fix Mahesh Rajashekhara
2015-03-27 10:21   ` Hannes Reinecke
2015-03-27 11:30     ` Mahesh Rajashekhara
2015-03-30 10:15     ` Murthy Bhat
2015-03-26 14:41 ` [V2 PATCH 09/11] aacraid: performance improvement changes Mahesh Rajashekhara
2015-03-27 10:22   ` Hannes Reinecke
2015-03-30 10:15     ` Murthy Bhat
2015-03-26 14:41 ` [V2 PATCH 10/11] aacraid: AIF raw device remove support Mahesh Rajashekhara
2015-03-27 10:22   ` Hannes Reinecke
2015-03-30 10:16     ` Murthy Bhat
2015-03-26 14:41 ` [V2 PATCH 11/11] aacraid: driver version change Mahesh Rajashekhara
2015-03-27 10:23   ` Hannes Reinecke
2015-03-30 10:16     ` Murthy Bhat
2015-04-06 11:02 ` [V2 PATCH 00/11] aacraid driver updates Mahesh Rajashekhara

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=874mp6zi0r.fsf@sauron.fritz.box \
    --to=morbidrsa@gmail.com \
    --cc=Achim.Leubner@pmcs.com \
    --cc=JBottomley@Parallels.com \
    --cc=Mahesh.Rajashekhara@pmcs.com \
    --cc=hare@suse.de \
    --cc=linux-scsi@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.