Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d66ae08b authored by Stephen M. Cameron's avatar Stephen M. Cameron Committed by James Bottomley
Browse files

[SCSI] hpsa: removed unneeded structure member max_sg_entries and fix badly...


[SCSI] hpsa: removed unneeded structure member max_sg_entries and fix badly named constant MAXSGENTRIES

We had both h->max_sg_entries and h->maxsgentries in the per controller
structure which is terribly confusing.  max_sg_entries was really
just a constant, 32, which defines how big the "block fetch table"
is, which is as large as the max number of SG elements embedded
within a command (excluding SG elements in chain blocks).

MAXSGENTRIES was the constant used to denote the max number of SG
elements embedded within a command, also a poor name.

So renamed MAXSGENTREIS to SG_ENTRIES_IN_CMD, and removed
h->max_sg_entries and replaced it with SG_ENTRIES_IN_CMD.

h->maxsgentries is unchanged, and is the maximum number of sg
elements the controller will support in a command, including
those in chain blocks, minus 1 for the chain block pointer..

Signed-off-by: default avatarStephen M. Cameron <scameron@beardog.cce.hp.com>
Signed-off-by: default avatarJames Bottomley <JBottomley@Parallels.com>
parent 55e14e76
Loading
Loading
Loading
Loading
+10 −10
Original line number Original line Diff line number Diff line
@@ -2700,16 +2700,16 @@ static int hpsa_big_passthru_ioctl(struct ctlr_info *h, void __user *argp)
		status = -EINVAL;
		status = -EINVAL;
		goto cleanup1;
		goto cleanup1;
	}
	}
	if (ioc->buf_size > ioc->malloc_size * MAXSGENTRIES) {
	if (ioc->buf_size > ioc->malloc_size * SG_ENTRIES_IN_CMD) {
		status = -EINVAL;
		status = -EINVAL;
		goto cleanup1;
		goto cleanup1;
	}
	}
	buff = kzalloc(MAXSGENTRIES * sizeof(char *), GFP_KERNEL);
	buff = kzalloc(SG_ENTRIES_IN_CMD * sizeof(char *), GFP_KERNEL);
	if (!buff) {
	if (!buff) {
		status = -ENOMEM;
		status = -ENOMEM;
		goto cleanup1;
		goto cleanup1;
	}
	}
	buff_size = kmalloc(MAXSGENTRIES * sizeof(int), GFP_KERNEL);
	buff_size = kmalloc(SG_ENTRIES_IN_CMD * sizeof(int), GFP_KERNEL);
	if (!buff_size) {
	if (!buff_size) {
		status = -ENOMEM;
		status = -ENOMEM;
		goto cleanup1;
		goto cleanup1;
@@ -4601,15 +4601,15 @@ static __devinit void hpsa_enter_performant_mode(struct ctlr_info *h,
	 * Each SG entry requires 16 bytes.  The eight registers are programmed
	 * Each SG entry requires 16 bytes.  The eight registers are programmed
	 * with the number of 16-byte blocks a command of that size requires.
	 * with the number of 16-byte blocks a command of that size requires.
	 * The smallest command possible requires 5 such 16 byte blocks.
	 * The smallest command possible requires 5 such 16 byte blocks.
	 * the largest command possible requires MAXSGENTRIES + 4 16-byte
	 * the largest command possible requires SG_ENTRIES_IN_CMD + 4 16-byte
	 * blocks.  Note, this only extends to the SG entries contained
	 * blocks.  Note, this only extends to the SG entries contained
	 * within the command block, and does not extend to chained blocks
	 * within the command block, and does not extend to chained blocks
	 * of SG elements.   bft[] contains the eight values we write to
	 * of SG elements.   bft[] contains the eight values we write to
	 * the registers.  They are not evenly distributed, but have more
	 * the registers.  They are not evenly distributed, but have more
	 * sizes for small commands, and fewer sizes for larger commands.
	 * sizes for small commands, and fewer sizes for larger commands.
	 */
	 */
	int bft[8] = {5, 6, 8, 10, 12, 20, 28, MAXSGENTRIES + 4};
	int bft[8] = {5, 6, 8, 10, 12, 20, 28, SG_ENTRIES_IN_CMD + 4};
	BUILD_BUG_ON(28 > MAXSGENTRIES + 4);
	BUILD_BUG_ON(28 > SG_ENTRIES_IN_CMD + 4);
	/*  5 = 1 s/g entry or 4k
	/*  5 = 1 s/g entry or 4k
	 *  6 = 2 s/g entry or 8k
	 *  6 = 2 s/g entry or 8k
	 *  8 = 4 s/g entry or 16k
	 *  8 = 4 s/g entry or 16k
@@ -4622,8 +4622,9 @@ static __devinit void hpsa_enter_performant_mode(struct ctlr_info *h,
	memset(h->reply_pool, 0, h->reply_pool_size);
	memset(h->reply_pool, 0, h->reply_pool_size);
	h->reply_pool_head = h->reply_pool;
	h->reply_pool_head = h->reply_pool;


	bft[7] = h->max_sg_entries + 4;
	bft[7] = SG_ENTRIES_IN_CMD + 4;
	calc_bucket_map(bft, ARRAY_SIZE(bft), 32, h->blockFetchTable);
	calc_bucket_map(bft, ARRAY_SIZE(bft),
				SG_ENTRIES_IN_CMD, h->blockFetchTable);
	for (i = 0; i < 8; i++)
	for (i = 0; i < 8; i++)
		writel(bft[i], &h->transtable->BlockFetch[i]);
		writel(bft[i], &h->transtable->BlockFetch[i]);


@@ -4661,14 +4662,13 @@ static __devinit void hpsa_put_ctlr_into_performant_mode(struct ctlr_info *h)
		return;
		return;


	hpsa_get_max_perf_mode_cmds(h);
	hpsa_get_max_perf_mode_cmds(h);
	h->max_sg_entries = 32;
	/* Performant mode ring buffer and supporting data structures */
	/* Performant mode ring buffer and supporting data structures */
	h->reply_pool_size = h->max_commands * sizeof(u64);
	h->reply_pool_size = h->max_commands * sizeof(u64);
	h->reply_pool = pci_alloc_consistent(h->pdev, h->reply_pool_size,
	h->reply_pool = pci_alloc_consistent(h->pdev, h->reply_pool_size,
				&(h->reply_pool_dhandle));
				&(h->reply_pool_dhandle));


	/* Need a block fetch table for performant mode */
	/* Need a block fetch table for performant mode */
	h->blockFetchTable = kmalloc(((h->max_sg_entries+1) *
	h->blockFetchTable = kmalloc(((SG_ENTRIES_IN_CMD + 1) *
				sizeof(u32)), GFP_KERNEL);
				sizeof(u32)), GFP_KERNEL);


	if ((h->reply_pool == NULL)
	if ((h->reply_pool == NULL)
+0 −1
Original line number Original line Diff line number Diff line
@@ -58,7 +58,6 @@ struct ctlr_info {
	unsigned long paddr;
	unsigned long paddr;
	int 	nr_cmds; /* Number of commands allowed on this controller */
	int 	nr_cmds; /* Number of commands allowed on this controller */
	struct CfgTable __iomem *cfgtable;
	struct CfgTable __iomem *cfgtable;
	int     max_sg_entries;
	int	interrupts_enabled;
	int	interrupts_enabled;
	int	major;
	int	major;
	int 	max_commands;
	int 	max_commands;
+2 −2
Original line number Original line Diff line number Diff line
@@ -23,7 +23,7 @@


/* general boundary defintions */
/* general boundary defintions */
#define SENSEINFOBYTES          32 /* may vary between hbas */
#define SENSEINFOBYTES          32 /* may vary between hbas */
#define MAXSGENTRIES            32
#define SG_ENTRIES_IN_CMD	32 /* Max SG entries excluding chain blocks */
#define HPSA_SG_CHAIN		0x80000000
#define HPSA_SG_CHAIN		0x80000000
#define MAXREPLYQS              256
#define MAXREPLYQS              256


@@ -282,7 +282,7 @@ struct CommandList {
	struct CommandListHeader Header;
	struct CommandListHeader Header;
	struct RequestBlock      Request;
	struct RequestBlock      Request;
	struct ErrDescriptor     ErrDesc;
	struct ErrDescriptor     ErrDesc;
	struct SGDescriptor      SG[MAXSGENTRIES];
	struct SGDescriptor      SG[SG_ENTRIES_IN_CMD];
	/* information associated with the command */
	/* information associated with the command */
	u32			   busaddr; /* physical addr of this record */
	u32			   busaddr; /* physical addr of this record */
	struct ErrorInfo *err_info; /* pointer to the allocated mem */
	struct ErrorInfo *err_info; /* pointer to the allocated mem */