LSI - MR-Fusion controller driver <mrsas> patch and man page

Desai, Kashyap Kashyap.Desai at lsi.com
Mon Jan 27 06:39:28 UTC 2014


Doug:

This patch looks good and we will work for <mrsas> changes accordingly. 

We have started checking performance delta between <mfi> and <mrsas> as suggested by you.
Till now, we have not seen any issue, if we use Spinning drives. We have seen issue with SSD, but want to confirm if that is configuration or setup issue.

Are you seeing issue only if you use SSDs ?? We will contact you to understand exact scenario, so that we can root cause from our end. Will spawn new thread to discuss that.

Thanks,
` Kashyap

> -----Original Message-----
> From: Doug Ambrisko [mailto:ambrisko at ambrisko.com]
> Sent: Saturday, January 25, 2014 12:24 AM
> To: Doug Ambrisko
> Cc: Desai, Kashyap; freebsd-scsi at freebsd.org; scottl at netflix.com;
> sean_bruno at yahoo.com; dwhite at ixsystems.com; jpaetzel at freebsd.org;
> Maloy, Joe; Mankani, Krishnaraddi; McConnell, Stephen; Saxena, Sumit;
> Radford, Adam; Kenneth D. Merry
> Subject: Re: LSI - MR-Fusion controller driver <mrsas> patch and man page
> 
> On Tue, Jan 07, 2014 at 10:11:39AM -0800, Doug Ambrisko wrote:
> 	[snip]
> | Yes, we can probably make the minimal change to mfi to allow mrsas to
> | optionally take over.  That can probably be done the quickest.
> 
> Here is the patch I propose to mfi(4) to allow mrsas(4) to optionally take
> newer cards.
> 
> Index: mfi_pci.c
> ==========================================================
> =========
> --- mfi_pci.c	(revision 260231)
> +++ mfi_pci.c	(working copy)
> @@ -112,6 +112,11 @@
>  SYSCTL_INT(_hw_mfi, OID_AUTO, msi, CTLFLAG_RDTUN, &mfi_msi, 0,
>      "Enable use of MSI interrupts");
> 
> +static int	mfi_mrsas_enable = 0;
> +TUNABLE_INT("hw.mfi.mrsas_enable", &mfi_msi); SYSCTL_INT(_hw_mfi,
> +OID_AUTO, mrsas_enable, CTLFLAG_RDTUN, &mfi_mrsas_enable,
> +     0, "Allow mrasas to take newer cards");
> +
>  struct mfi_ident {
>  	uint16_t	vendor;
>  	uint16_t	device;
> @@ -127,11 +132,11 @@
>  	{0x1000, 0x005b, 0x1028, 0x1f34, MFI_FLAGS_SKINNY|
> MFI_FLAGS_TBOLT, "Dell PERC H710P Mini (monolithics)"},
>  	{0x1000, 0x005b, 0x1028, 0x1f35, MFI_FLAGS_SKINNY|
> MFI_FLAGS_TBOLT, "Dell PERC H710 Adapter"},
>  	{0x1000, 0x005b, 0x1028, 0x1f37, MFI_FLAGS_SKINNY|
> MFI_FLAGS_TBOLT, "Dell PERC H710 Mini (blades)"},
> -	{0x1000, 0x005b, 0x1028, 0x1f38, MFI_FLAGS_SKINNY|
> MFI_FLAGS_TBOLT, "Dell PERC H710 Mini (monolithics)"},
> -	{0x1000, 0x005b, 0x8086, 0x9265, MFI_FLAGS_SKINNY|
> MFI_FLAGS_TBOLT, "Intel (R) RAID Controller RS25DB080"},
> -	{0x1000, 0x005b, 0x8086, 0x9285, MFI_FLAGS_SKINNY|
> MFI_FLAGS_TBOLT, "Intel (R) RAID Controller RS25NB008"},
> -	{0x1000, 0x005b, 0xffff, 0xffff, MFI_FLAGS_SKINNY|
> MFI_FLAGS_TBOLT, "ThunderBolt"},
> -	{0x1000, 0x005d, 0xffff, 0xffff, MFI_FLAGS_SKINNY|
> MFI_FLAGS_TBOLT, "Invader"},
> +	{0x1000, 0x005b, 0x1028, 0x1f38, MFI_FLAGS_SKINNY|
> MFI_FLAGS_TBOLT| MFI_FLAGS_MRSAS, "Dell PERC H710 Mini
> (monolithics)"},
> +	{0x1000, 0x005b, 0x8086, 0x9265, MFI_FLAGS_SKINNY|
> MFI_FLAGS_TBOLT| MFI_FLAGS_MRSAS, "Intel (R) RAID Controller
> RS25DB080"},
> +	{0x1000, 0x005b, 0x8086, 0x9285, MFI_FLAGS_SKINNY|
> MFI_FLAGS_TBOLT| MFI_FLAGS_MRSAS, "Intel (R) RAID Controller
> RS25NB008"},
> +	{0x1000, 0x005b, 0xffff, 0xffff, MFI_FLAGS_SKINNY|
> MFI_FLAGS_TBOLT| MFI_FLAGS_MRSAS, "ThunderBolt"},
> +	{0x1000, 0x005d, 0xffff, 0xffff, MFI_FLAGS_SKINNY|
> MFI_FLAGS_TBOLT|
> +MFI_FLAGS_MRSAS, "Invader"},
>  	{0x1000, 0x0060, 0x1028, 0xffff, MFI_FLAGS_1078,  "Dell PERC 6"},
>  	{0x1000, 0x0060, 0xffff, 0xffff, MFI_FLAGS_1078,  "LSI MegaSAS
> 1078"},
>  	{0x1000, 0x0071, 0xffff, 0xffff, MFI_FLAGS_SKINNY, "Drake Skinny"},
> @@ -178,7 +183,13 @@
> 
>  	if ((id = mfi_find_ident(dev)) != NULL) {
>  		device_set_desc(dev, id->desc);
> -		return (BUS_PROBE_DEFAULT);
> +
> +		/* give priority to mrsas if tunable set */
> +		TUNABLE_INT_FETCH("hw.mfi.mrsas_enable",
> &mfi_mrsas_enable);
> +		if ((id->flags & MFI_FLAGS_MRSAS) && mfi_mrsas_enable)
> +			return (BUS_PROBE_LOW_PRIORITY);
> +		else
> +			return (BUS_PROBE_DEFAULT);
>  	}
>  	return (ENXIO);
>  }
> Index: mfivar.h
> ==========================================================
> =========
> --- mfivar.h	(revision 260231)
> +++ mfivar.h	(working copy)
> @@ -199,6 +199,7 @@
>  #define MFI_FLAGS_GEN2		(1<<6)
>  #define MFI_FLAGS_SKINNY	(1<<7)
>  #define MFI_FLAGS_TBOLT		(1<<8)
> +#define MFI_FLAGS_MRSAS		(1<<9)
>  	// Start: LSIP200113393
>  	bus_dma_tag_t			verbuf_h_dmat;
>  	bus_dmamap_t			verbuf_h_dmamap;
> 
> This creates a hw.mfi.mrsas_enable tunable to control it.  The method via
> hints wasn't the best since for one the unit index was being abused a non-
> unit specfic option.  It was also a little strange to have mrsas hint be in mfi(4).
> 
> Then we need a minor change to mrsas.c
> 
> 
> --- ../mrsas.orig/mrsas.c	2014-01-03 11:30:28.000000000 -0800
> +++ ./mrsas.c	2014-01-24 10:43:20.000000000 -0800
> @@ -328,25 +328,11 @@ static struct mrsas_ident * mrsas_find_i  static int
> mrsas_probe(device_t dev)  {
>      struct mrsas_ident *id;
> -	unsigned int force = 0, ivar;
> 
>      if ((id = mrsas_find_ident(dev)) != NULL) {
> -		if (id->device == 0x005b || id->device == 0x005d) {
> -            resource_int_value("mrsas", 0, "fusion_force", &ivar);
> -
> -			if (ivar == 0 || ivar == 1)
> -		            force = ivar;
> -
> -            device_set_desc(dev, id->desc);
> -            if (force)
> -            	return (BUS_PROBE_DEFAULT);
> -                //return (BUS_PROBE_SPECIFIC);  //give priority to MFI driver
> -            else
> -                return (BUS_PROBE_LOW_PRIORITY);
> -        }
> -        else
> -            device_set_desc(dev, id->desc);
> -            return (BUS_PROBE_DEFAULT);
> +	device_set_desc(dev, id->desc);
> +	/* between BUS_PROBE_DEFAULT and BUS_PROBE_LOW_PRIORITY
> */
> +	return (-30);
>      }
>      return (ENXIO);
> 
> So that its probe part way between mfi(4) results and then it doesn't have to
> change.
> 
> If no one has concerns then I'll check in the mfi(4) change.
> 
> Thanks,
> 
> Doug A.



More information about the freebsd-scsi mailing list