s390/dasd: only use preallocated requests
Change the remaining users of dasd_kmalloc_request to use preallocated memory and remove this function. Signed-off-by: Sebastian Ott <sebott@linux.ibm.com> Reviewed-by: Stefan Haberland <sth@linux.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
61d3883210
commit
ec530174c4
|
@ -1222,51 +1222,6 @@ static void dasd_hosts_init(struct dentry *base_dentry,
|
|||
device->hosts_dentry = pde;
|
||||
}
|
||||
|
||||
/*
|
||||
* Allocate memory for a channel program with 'cplength' channel
|
||||
* command words and 'datasize' additional space. There are two
|
||||
* variantes: 1) dasd_kmalloc_request uses kmalloc to get the needed
|
||||
* memory and 2) dasd_smalloc_request uses the static ccw memory
|
||||
* that gets allocated for each device.
|
||||
*/
|
||||
struct dasd_ccw_req *dasd_kmalloc_request(int magic, int cplength,
|
||||
int datasize,
|
||||
struct dasd_device *device)
|
||||
{
|
||||
struct dasd_ccw_req *cqr;
|
||||
|
||||
/* Sanity checks */
|
||||
BUG_ON(datasize > PAGE_SIZE ||
|
||||
(cplength*sizeof(struct ccw1)) > PAGE_SIZE);
|
||||
|
||||
cqr = kzalloc(sizeof(struct dasd_ccw_req), GFP_ATOMIC);
|
||||
if (cqr == NULL)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
cqr->cpaddr = NULL;
|
||||
if (cplength > 0) {
|
||||
cqr->cpaddr = kcalloc(cplength, sizeof(struct ccw1),
|
||||
GFP_ATOMIC | GFP_DMA);
|
||||
if (cqr->cpaddr == NULL) {
|
||||
kfree(cqr);
|
||||
return ERR_PTR(-ENOMEM);
|
||||
}
|
||||
}
|
||||
cqr->data = NULL;
|
||||
if (datasize > 0) {
|
||||
cqr->data = kzalloc(datasize, GFP_ATOMIC | GFP_DMA);
|
||||
if (cqr->data == NULL) {
|
||||
kfree(cqr->cpaddr);
|
||||
kfree(cqr);
|
||||
return ERR_PTR(-ENOMEM);
|
||||
}
|
||||
}
|
||||
cqr->magic = magic;
|
||||
set_bit(DASD_CQR_FLAGS_USE_ERP, &cqr->flags);
|
||||
dasd_get_device(device);
|
||||
return cqr;
|
||||
}
|
||||
EXPORT_SYMBOL(dasd_kmalloc_request);
|
||||
|
||||
struct dasd_ccw_req *dasd_smalloc_request(int magic, int cplength, int datasize,
|
||||
struct dasd_device *device,
|
||||
struct dasd_ccw_req *cqr)
|
||||
|
@ -1309,27 +1264,6 @@ struct dasd_ccw_req *dasd_smalloc_request(int magic, int cplength, int datasize,
|
|||
}
|
||||
EXPORT_SYMBOL(dasd_smalloc_request);
|
||||
|
||||
/*
|
||||
* Free memory of a channel program. This function needs to free all the
|
||||
* idal lists that might have been created by dasd_set_cda and the
|
||||
* struct dasd_ccw_req itself.
|
||||
*/
|
||||
void dasd_kfree_request(struct dasd_ccw_req *cqr, struct dasd_device *device)
|
||||
{
|
||||
struct ccw1 *ccw;
|
||||
|
||||
/* Clear any idals used for the request. */
|
||||
ccw = cqr->cpaddr;
|
||||
do {
|
||||
clear_normalized_cda(ccw);
|
||||
} while (ccw++->flags & (CCW_FLAG_CC | CCW_FLAG_DC));
|
||||
kfree(cqr->cpaddr);
|
||||
kfree(cqr->data);
|
||||
kfree(cqr);
|
||||
dasd_put_device(device);
|
||||
}
|
||||
EXPORT_SYMBOL(dasd_kfree_request);
|
||||
|
||||
void dasd_sfree_request(struct dasd_ccw_req *cqr, struct dasd_device *device)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
|
|
@ -407,9 +407,9 @@ static int read_unit_address_configuration(struct dasd_device *device,
|
|||
int rc;
|
||||
unsigned long flags;
|
||||
|
||||
cqr = dasd_kmalloc_request(DASD_ECKD_MAGIC, 1 /* PSF */ + 1 /* RSSD */,
|
||||
cqr = dasd_smalloc_request(DASD_ECKD_MAGIC, 1 /* PSF */ + 1 /* RSSD */,
|
||||
(sizeof(struct dasd_psf_prssd_data)),
|
||||
device);
|
||||
device, NULL);
|
||||
if (IS_ERR(cqr))
|
||||
return PTR_ERR(cqr);
|
||||
cqr->startdev = device;
|
||||
|
@ -457,7 +457,7 @@ static int read_unit_address_configuration(struct dasd_device *device,
|
|||
lcu->flags |= NEED_UAC_UPDATE;
|
||||
spin_unlock_irqrestore(&lcu->lock, flags);
|
||||
}
|
||||
dasd_kfree_request(cqr, cqr->memdev);
|
||||
dasd_sfree_request(cqr, cqr->memdev);
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
|
|
@ -447,7 +447,7 @@ static void dasd_eer_snss_cb(struct dasd_ccw_req *cqr, void *data)
|
|||
* is a new ccw in device->eer_cqr. Free the "old"
|
||||
* snss request now.
|
||||
*/
|
||||
dasd_kfree_request(cqr, device);
|
||||
dasd_sfree_request(cqr, device);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -472,8 +472,8 @@ int dasd_eer_enable(struct dasd_device *device)
|
|||
if (rc)
|
||||
goto out;
|
||||
|
||||
cqr = dasd_kmalloc_request(DASD_ECKD_MAGIC, 1 /* SNSS */,
|
||||
SNSS_DATA_SIZE, device);
|
||||
cqr = dasd_smalloc_request(DASD_ECKD_MAGIC, 1 /* SNSS */,
|
||||
SNSS_DATA_SIZE, device, NULL);
|
||||
if (IS_ERR(cqr)) {
|
||||
rc = -ENOMEM;
|
||||
cqr = NULL;
|
||||
|
@ -505,7 +505,7 @@ int dasd_eer_enable(struct dasd_device *device)
|
|||
spin_unlock_irqrestore(get_ccwdev_lock(device->cdev), flags);
|
||||
|
||||
if (cqr)
|
||||
dasd_kfree_request(cqr, device);
|
||||
dasd_sfree_request(cqr, device);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
@ -528,7 +528,7 @@ void dasd_eer_disable(struct dasd_device *device)
|
|||
in_use = test_and_clear_bit(DASD_FLAG_EER_IN_USE, &device->flags);
|
||||
spin_unlock_irqrestore(get_ccwdev_lock(device->cdev), flags);
|
||||
if (cqr && !in_use)
|
||||
dasd_kfree_request(cqr, device);
|
||||
dasd_sfree_request(cqr, device);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -706,11 +706,8 @@ extern const struct block_device_operations dasd_device_operations;
|
|||
|
||||
extern struct kmem_cache *dasd_page_cache;
|
||||
|
||||
struct dasd_ccw_req *
|
||||
dasd_kmalloc_request(int , int, int, struct dasd_device *);
|
||||
struct dasd_ccw_req *
|
||||
dasd_smalloc_request(int, int, int, struct dasd_device *, struct dasd_ccw_req *);
|
||||
void dasd_kfree_request(struct dasd_ccw_req *, struct dasd_device *);
|
||||
void dasd_sfree_request(struct dasd_ccw_req *, struct dasd_device *);
|
||||
void dasd_wakeup_cb(struct dasd_ccw_req *, void *);
|
||||
|
||||
|
|
Loading…
Reference in New Issue