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);