[SCSI] mpt2sas: Use of get_free_pages for huge memorary allocation.
use the get_free_pages API for larger contigious physical memory chunk. Also, the ioc->chain_depth need to be changed from a 16bit to 32bit variable because the number of chains will exceed 64k when the queue depth is large. Signed-off-by: Kashyap Desai <kashyap.desai@lsi.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
This commit is contained in:
parent
f891dcfdc1
commit
89009fbb7d
|
@ -1901,7 +1901,7 @@ _base_release_memory_pools(struct MPT2SAS_ADAPTER *ioc)
|
||||||
ioc->config_page, ioc->config_page_dma);
|
ioc->config_page, ioc->config_page_dma);
|
||||||
}
|
}
|
||||||
|
|
||||||
kfree(ioc->scsi_lookup);
|
free_pages((ulong)ioc->scsi_lookup, ioc->scsi_lookup_pages);
|
||||||
kfree(ioc->hpr_lookup);
|
kfree(ioc->hpr_lookup);
|
||||||
kfree(ioc->internal_lookup);
|
kfree(ioc->internal_lookup);
|
||||||
}
|
}
|
||||||
|
@ -2113,11 +2113,13 @@ _base_allocate_memory_pools(struct MPT2SAS_ADAPTER *ioc, int sleep_flag)
|
||||||
ioc->name, (unsigned long long) ioc->request_dma));
|
ioc->name, (unsigned long long) ioc->request_dma));
|
||||||
total_sz += sz;
|
total_sz += sz;
|
||||||
|
|
||||||
ioc->scsi_lookup = kcalloc(ioc->scsiio_depth,
|
sz = ioc->scsiio_depth * sizeof(struct request_tracker);
|
||||||
sizeof(struct request_tracker), GFP_KERNEL);
|
ioc->scsi_lookup_pages = get_order(sz);
|
||||||
|
ioc->scsi_lookup = (struct request_tracker *)__get_free_pages(
|
||||||
|
GFP_KERNEL, ioc->scsi_lookup_pages);
|
||||||
if (!ioc->scsi_lookup) {
|
if (!ioc->scsi_lookup) {
|
||||||
printk(MPT2SAS_ERR_FMT "scsi_lookup: kcalloc failed\n",
|
printk(MPT2SAS_ERR_FMT "scsi_lookup: get_free_pages failed, "
|
||||||
ioc->name);
|
"sz(%d)\n", ioc->name, (int)sz);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -676,7 +676,8 @@ struct MPT2SAS_ADAPTER {
|
||||||
dma_addr_t request_dma;
|
dma_addr_t request_dma;
|
||||||
u32 request_dma_sz;
|
u32 request_dma_sz;
|
||||||
struct request_tracker *scsi_lookup;
|
struct request_tracker *scsi_lookup;
|
||||||
spinlock_t scsi_lookup_lock;
|
ulong scsi_lookup_pages;
|
||||||
|
spinlock_t scsi_lookup_lock;
|
||||||
struct list_head free_list;
|
struct list_head free_list;
|
||||||
int pending_io_count;
|
int pending_io_count;
|
||||||
wait_queue_head_t reset_wq;
|
wait_queue_head_t reset_wq;
|
||||||
|
@ -688,7 +689,7 @@ struct MPT2SAS_ADAPTER {
|
||||||
u16 max_sges_in_chain_message;
|
u16 max_sges_in_chain_message;
|
||||||
u16 chains_needed_per_io;
|
u16 chains_needed_per_io;
|
||||||
u16 chain_offset_value_for_main_message;
|
u16 chain_offset_value_for_main_message;
|
||||||
u16 chain_depth;
|
u32 chain_depth;
|
||||||
|
|
||||||
/* hi-priority queue */
|
/* hi-priority queue */
|
||||||
u16 hi_priority_smid;
|
u16 hi_priority_smid;
|
||||||
|
|
Loading…
Reference in New Issue