Remove UMA allocation of ATA requests.
After CAM replaced old ATA stack, this driver processes no more then one request at a time per channel. Using UMA after that is overkill, so replace it with simple preallocation of one request per channel. MFC after: 2 weeks
This commit is contained in:
parent
84d5c498b5
commit
217b4e023d
@ -75,7 +75,6 @@ static void ata_uninit(void);
|
||||
MALLOC_DEFINE(M_ATA, "ata_generic", "ATA driver generic layer");
|
||||
int (*ata_raid_ioctl_func)(u_long cmd, caddr_t data) = NULL;
|
||||
devclass_t ata_devclass;
|
||||
uma_zone_t ata_request_zone;
|
||||
int ata_dma_check_80pin = 1;
|
||||
|
||||
/* sysctl vars */
|
||||
@ -650,12 +649,7 @@ ata_cam_begin_transaction(device_t dev, union ccb *ccb)
|
||||
struct ata_channel *ch = device_get_softc(dev);
|
||||
struct ata_request *request;
|
||||
|
||||
if (!(request = ata_alloc_request())) {
|
||||
device_printf(dev, "FAILURE - out of memory in start\n");
|
||||
ccb->ccb_h.status = CAM_REQ_INVALID;
|
||||
xpt_done(ccb);
|
||||
return;
|
||||
}
|
||||
request = &ch->request;
|
||||
bzero(request, sizeof(*request));
|
||||
|
||||
/* setup request */
|
||||
@ -794,7 +788,6 @@ ata_cam_process_sense(device_t dev, struct ata_request *request)
|
||||
ccb->ccb_h.status |= CAM_AUTOSENSE_FAIL;
|
||||
}
|
||||
|
||||
ata_free_request(request);
|
||||
xpt_done(ccb);
|
||||
/* Do error recovery if needed. */
|
||||
if (fatalerr)
|
||||
@ -865,10 +858,8 @@ ata_cam_end_transaction(device_t dev, struct ata_request *request)
|
||||
if ((ccb->ccb_h.status & CAM_STATUS_MASK) == CAM_SCSI_STATUS_ERROR &&
|
||||
(ccb->ccb_h.flags & CAM_DIS_AUTOSENSE) == 0)
|
||||
ata_cam_request_sense(dev, request);
|
||||
else {
|
||||
ata_free_request(request);
|
||||
else
|
||||
xpt_done(ccb);
|
||||
}
|
||||
/* Do error recovery if needed. */
|
||||
if (fatalerr)
|
||||
ata_reinit(dev);
|
||||
@ -1148,18 +1139,3 @@ static moduledata_t ata_moduledata = { "ata", ata_module_event_handler, NULL };
|
||||
DECLARE_MODULE(ata, ata_moduledata, SI_SUB_CONFIGURE, SI_ORDER_SECOND);
|
||||
MODULE_VERSION(ata, 1);
|
||||
MODULE_DEPEND(ata, cam, 1, 1, 1);
|
||||
|
||||
static void
|
||||
ata_init(void)
|
||||
{
|
||||
ata_request_zone = uma_zcreate("ata_request", sizeof(struct ata_request),
|
||||
NULL, NULL, NULL, NULL, 0, 0);
|
||||
}
|
||||
SYSINIT(ata_register, SI_SUB_DRIVERS, SI_ORDER_SECOND, ata_init, NULL);
|
||||
|
||||
static void
|
||||
ata_uninit(void)
|
||||
{
|
||||
uma_zdestroy(ata_request_zone);
|
||||
}
|
||||
SYSUNINIT(ata_unregister, SI_SUB_DRIVERS, SI_ORDER_SECOND, ata_uninit, NULL);
|
||||
|
@ -450,6 +450,7 @@ struct ata_channel {
|
||||
struct ata_cam_device curr[16]; /* Current settings */
|
||||
int requestsense; /* CCB waiting for SENSE. */
|
||||
struct callout poll_callout; /* Periodic status poll. */
|
||||
struct ata_request request;
|
||||
};
|
||||
|
||||
/* disk bay/enclosure related */
|
||||
@ -507,14 +508,6 @@ int ata_sata_getrev(device_t dev, int target);
|
||||
int ata_request2fis_h2d(struct ata_request *request, u_int8_t *fis);
|
||||
void ata_pm_identify(device_t dev);
|
||||
|
||||
/* macros for alloc/free of struct ata_request */
|
||||
extern uma_zone_t ata_request_zone;
|
||||
#define ata_alloc_request() uma_zalloc(ata_request_zone, M_NOWAIT | M_ZERO)
|
||||
#define ata_free_request(request) { \
|
||||
if (!(request->flags & ATA_R_DANGER2)) \
|
||||
uma_zfree(ata_request_zone, request); \
|
||||
}
|
||||
|
||||
MALLOC_DECLARE(M_ATA);
|
||||
|
||||
/* misc newbus defines */
|
||||
|
Loading…
Reference in New Issue
Block a user