scmrq              42 drivers/s390/block/scm_blk.c static void __scm_free_rq(struct scm_request *scmrq)
scmrq              44 drivers/s390/block/scm_blk.c 	struct aob_rq_header *aobrq = to_aobrq(scmrq);
scmrq              46 drivers/s390/block/scm_blk.c 	free_page((unsigned long) scmrq->aob);
scmrq              47 drivers/s390/block/scm_blk.c 	kfree(scmrq->request);
scmrq              54 drivers/s390/block/scm_blk.c 	struct scm_request *scmrq;
scmrq              58 drivers/s390/block/scm_blk.c 		scmrq = list_entry(iter, struct scm_request, list);
scmrq              59 drivers/s390/block/scm_blk.c 		list_del(&scmrq->list);
scmrq              60 drivers/s390/block/scm_blk.c 		__scm_free_rq(scmrq);
scmrq              70 drivers/s390/block/scm_blk.c 	struct scm_request *scmrq;
scmrq              72 drivers/s390/block/scm_blk.c 	aobrq = kzalloc(sizeof(*aobrq) + sizeof(*scmrq), GFP_KERNEL);
scmrq              76 drivers/s390/block/scm_blk.c 	scmrq = (void *) aobrq->data;
scmrq              77 drivers/s390/block/scm_blk.c 	scmrq->aob = (void *) get_zeroed_page(GFP_DMA);
scmrq              78 drivers/s390/block/scm_blk.c 	if (!scmrq->aob)
scmrq              81 drivers/s390/block/scm_blk.c 	scmrq->request = kcalloc(nr_requests_per_io, sizeof(scmrq->request[0]),
scmrq              83 drivers/s390/block/scm_blk.c 	if (!scmrq->request)
scmrq              86 drivers/s390/block/scm_blk.c 	INIT_LIST_HEAD(&scmrq->list);
scmrq              88 drivers/s390/block/scm_blk.c 	list_add(&scmrq->list, &inactive_requests);
scmrq              93 drivers/s390/block/scm_blk.c 	__scm_free_rq(scmrq);
scmrq             113 drivers/s390/block/scm_blk.c 	struct scm_request *scmrq = NULL;
scmrq             118 drivers/s390/block/scm_blk.c 	scmrq = list_first_entry(&inactive_requests, struct scm_request, list);
scmrq             119 drivers/s390/block/scm_blk.c 	list_del(&scmrq->list);
scmrq             122 drivers/s390/block/scm_blk.c 	return scmrq;
scmrq             125 drivers/s390/block/scm_blk.c static void scm_request_done(struct scm_request *scmrq)
scmrq             132 drivers/s390/block/scm_blk.c 	for (i = 0; i < nr_requests_per_io && scmrq->request[i]; i++) {
scmrq             133 drivers/s390/block/scm_blk.c 		msb = &scmrq->aob->msb[i];
scmrq             142 drivers/s390/block/scm_blk.c 	list_add(&scmrq->list, &inactive_requests);
scmrq             166 drivers/s390/block/scm_blk.c struct aidaw *scm_aidaw_fetch(struct scm_request *scmrq, unsigned int bytes)
scmrq             170 drivers/s390/block/scm_blk.c 	if (scm_aidaw_bytes(scmrq->next_aidaw) >= bytes)
scmrq             171 drivers/s390/block/scm_blk.c 		return scmrq->next_aidaw;
scmrq             179 drivers/s390/block/scm_blk.c static int scm_request_prepare(struct scm_request *scmrq)
scmrq             181 drivers/s390/block/scm_blk.c 	struct scm_blk_dev *bdev = scmrq->bdev;
scmrq             183 drivers/s390/block/scm_blk.c 	int pos = scmrq->aob->request.msb_count;
scmrq             184 drivers/s390/block/scm_blk.c 	struct msb *msb = &scmrq->aob->msb[pos];
scmrq             185 drivers/s390/block/scm_blk.c 	struct request *req = scmrq->request[pos];
scmrq             190 drivers/s390/block/scm_blk.c 	aidaw = scm_aidaw_fetch(scmrq, blk_rq_bytes(req));
scmrq             195 drivers/s390/block/scm_blk.c 	scmrq->aob->request.msb_count++;
scmrq             208 drivers/s390/block/scm_blk.c 	scmrq->next_aidaw = aidaw;
scmrq             212 drivers/s390/block/scm_blk.c static inline void scm_request_set(struct scm_request *scmrq,
scmrq             215 drivers/s390/block/scm_blk.c 	scmrq->request[scmrq->aob->request.msb_count] = req;
scmrq             219 drivers/s390/block/scm_blk.c 				    struct scm_request *scmrq)
scmrq             221 drivers/s390/block/scm_blk.c 	struct aob_rq_header *aobrq = to_aobrq(scmrq);
scmrq             222 drivers/s390/block/scm_blk.c 	struct aob *aob = scmrq->aob;
scmrq             224 drivers/s390/block/scm_blk.c 	memset(scmrq->request, 0,
scmrq             225 drivers/s390/block/scm_blk.c 	       nr_requests_per_io * sizeof(scmrq->request[0]));
scmrq             230 drivers/s390/block/scm_blk.c 	scmrq->bdev = bdev;
scmrq             231 drivers/s390/block/scm_blk.c 	scmrq->retries = 4;
scmrq             232 drivers/s390/block/scm_blk.c 	scmrq->error = BLK_STS_OK;
scmrq             234 drivers/s390/block/scm_blk.c 	scmrq->next_aidaw = (void *) &aob->msb[nr_requests_per_io];
scmrq             237 drivers/s390/block/scm_blk.c static void scm_request_requeue(struct scm_request *scmrq)
scmrq             239 drivers/s390/block/scm_blk.c 	struct scm_blk_dev *bdev = scmrq->bdev;
scmrq             242 drivers/s390/block/scm_blk.c 	for (i = 0; i < nr_requests_per_io && scmrq->request[i]; i++)
scmrq             243 drivers/s390/block/scm_blk.c 		blk_mq_requeue_request(scmrq->request[i], false);
scmrq             246 drivers/s390/block/scm_blk.c 	scm_request_done(scmrq);
scmrq             250 drivers/s390/block/scm_blk.c static void scm_request_finish(struct scm_request *scmrq)
scmrq             252 drivers/s390/block/scm_blk.c 	struct scm_blk_dev *bdev = scmrq->bdev;
scmrq             256 drivers/s390/block/scm_blk.c 	for (i = 0; i < nr_requests_per_io && scmrq->request[i]; i++) {
scmrq             257 drivers/s390/block/scm_blk.c 		error = blk_mq_rq_to_pdu(scmrq->request[i]);
scmrq             258 drivers/s390/block/scm_blk.c 		*error = scmrq->error;
scmrq             259 drivers/s390/block/scm_blk.c 		blk_mq_complete_request(scmrq->request[i]);
scmrq             263 drivers/s390/block/scm_blk.c 	scm_request_done(scmrq);
scmrq             266 drivers/s390/block/scm_blk.c static void scm_request_start(struct scm_request *scmrq)
scmrq             268 drivers/s390/block/scm_blk.c 	struct scm_blk_dev *bdev = scmrq->bdev;
scmrq             271 drivers/s390/block/scm_blk.c 	if (eadm_start_aob(scmrq->aob)) {
scmrq             273 drivers/s390/block/scm_blk.c 		scm_request_requeue(scmrq);
scmrq             278 drivers/s390/block/scm_blk.c 	struct scm_request *scmrq;
scmrq             289 drivers/s390/block/scm_blk.c 	struct scm_request *scmrq;
scmrq             297 drivers/s390/block/scm_blk.c 	scmrq = sq->scmrq;
scmrq             298 drivers/s390/block/scm_blk.c 	if (!scmrq) {
scmrq             299 drivers/s390/block/scm_blk.c 		scmrq = scm_request_fetch();
scmrq             300 drivers/s390/block/scm_blk.c 		if (!scmrq) {
scmrq             305 drivers/s390/block/scm_blk.c 		scm_request_init(bdev, scmrq);
scmrq             306 drivers/s390/block/scm_blk.c 		sq->scmrq = scmrq;
scmrq             308 drivers/s390/block/scm_blk.c 	scm_request_set(scmrq, req);
scmrq             310 drivers/s390/block/scm_blk.c 	if (scm_request_prepare(scmrq)) {
scmrq             312 drivers/s390/block/scm_blk.c 		scm_request_set(scmrq, NULL);
scmrq             314 drivers/s390/block/scm_blk.c 		if (scmrq->aob->request.msb_count)
scmrq             315 drivers/s390/block/scm_blk.c 			scm_request_start(scmrq);
scmrq             317 drivers/s390/block/scm_blk.c 		sq->scmrq = NULL;
scmrq             323 drivers/s390/block/scm_blk.c 	if (qd->last || scmrq->aob->request.msb_count == nr_requests_per_io) {
scmrq             324 drivers/s390/block/scm_blk.c 		scm_request_start(scmrq);
scmrq             325 drivers/s390/block/scm_blk.c 		sq->scmrq = NULL;
scmrq             349 drivers/s390/block/scm_blk.c 	WARN_ON(qd->scmrq);
scmrq             354 drivers/s390/block/scm_blk.c static void __scmrq_log_error(struct scm_request *scmrq)
scmrq             356 drivers/s390/block/scm_blk.c 	struct aob *aob = scmrq->aob;
scmrq             358 drivers/s390/block/scm_blk.c 	if (scmrq->error == BLK_STS_TIMEOUT)
scmrq             364 drivers/s390/block/scm_blk.c 	if (scmrq->retries)
scmrq             368 drivers/s390/block/scm_blk.c 		       scmrq->error);
scmrq             371 drivers/s390/block/scm_blk.c static void scm_blk_handle_error(struct scm_request *scmrq)
scmrq             373 drivers/s390/block/scm_blk.c 	struct scm_blk_dev *bdev = scmrq->bdev;
scmrq             376 drivers/s390/block/scm_blk.c 	if (scmrq->error != BLK_STS_IOERR)
scmrq             380 drivers/s390/block/scm_blk.c 	switch (scmrq->aob->response.eqc) {
scmrq             394 drivers/s390/block/scm_blk.c 	if (!eadm_start_aob(scmrq->aob))
scmrq             398 drivers/s390/block/scm_blk.c 	scm_request_requeue(scmrq);
scmrq             403 drivers/s390/block/scm_blk.c 	struct scm_request *scmrq = data;
scmrq             405 drivers/s390/block/scm_blk.c 	scmrq->error = error;
scmrq             407 drivers/s390/block/scm_blk.c 		__scmrq_log_error(scmrq);
scmrq             408 drivers/s390/block/scm_blk.c 		if (scmrq->retries-- > 0) {
scmrq             409 drivers/s390/block/scm_blk.c 			scm_blk_handle_error(scmrq);
scmrq             414 drivers/s390/block/scm_blk.c 	scm_request_finish(scmrq);
scmrq              46 drivers/s390/block/scm_blk.h struct aidaw *scm_aidaw_fetch(struct scm_request *scmrq, unsigned int bytes);