nvme_qpair.c (248768) | nvme_qpair.c (248770) |
---|---|
1/*- 2 * Copyright (C) 2012 Intel Corporation 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 11 unchanged lines hidden (view full) --- 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 */ 26 27#include <sys/cdefs.h> | 1/*- 2 * Copyright (C) 2012 Intel Corporation 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 11 unchanged lines hidden (view full) --- 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 */ 26 27#include <sys/cdefs.h> |
28__FBSDID("$FreeBSD: head/sys/dev/nvme/nvme_qpair.c 248768 2013-03-26 22:06:05Z jimharris $"); | 28__FBSDID("$FreeBSD: head/sys/dev/nvme/nvme_qpair.c 248770 2013-03-26 22:11:34Z jimharris $"); |
29 30#include <sys/param.h> 31#include <sys/bus.h> 32 33#include <dev/pci/pcivar.h> 34 35#include "nvme_private.h" 36 --- 255 unchanged lines hidden (view full) --- 292 sizeof(uint64_t), PAGE_SIZE, BUS_SPACE_MAXADDR, 293 BUS_SPACE_MAXADDR, NULL, NULL, qpair->max_xfer_size, 294 (qpair->max_xfer_size/PAGE_SIZE)+1, PAGE_SIZE, 0, 295 NULL, NULL, &qpair->dma_tag); 296 297 qpair->num_cmds = 0; 298 qpair->num_intr_handler_calls = 0; 299 | 29 30#include <sys/param.h> 31#include <sys/bus.h> 32 33#include <dev/pci/pcivar.h> 34 35#include "nvme_private.h" 36 --- 255 unchanged lines hidden (view full) --- 292 sizeof(uint64_t), PAGE_SIZE, BUS_SPACE_MAXADDR, 293 BUS_SPACE_MAXADDR, NULL, NULL, qpair->max_xfer_size, 294 (qpair->max_xfer_size/PAGE_SIZE)+1, PAGE_SIZE, 0, 295 NULL, NULL, &qpair->dma_tag); 296 297 qpair->num_cmds = 0; 298 qpair->num_intr_handler_calls = 0; 299 |
300 /* TODO: error checking on contigmalloc, bus_dmamap_load calls */ | |
301 qpair->cmd = contigmalloc(qpair->num_entries * | 300 qpair->cmd = contigmalloc(qpair->num_entries * |
302 sizeof(struct nvme_command), M_NVME, M_ZERO | M_NOWAIT, | 301 sizeof(struct nvme_command), M_NVME, M_ZERO, |
303 0, BUS_SPACE_MAXADDR, PAGE_SIZE, 0); 304 qpair->cpl = contigmalloc(qpair->num_entries * | 302 0, BUS_SPACE_MAXADDR, PAGE_SIZE, 0); 303 qpair->cpl = contigmalloc(qpair->num_entries * |
305 sizeof(struct nvme_completion), M_NVME, M_ZERO | M_NOWAIT, | 304 sizeof(struct nvme_completion), M_NVME, M_ZERO, |
306 0, BUS_SPACE_MAXADDR, PAGE_SIZE, 0); 307 308 bus_dmamap_create(qpair->dma_tag, 0, &qpair->cmd_dma_map); 309 bus_dmamap_create(qpair->dma_tag, 0, &qpair->cpl_dma_map); 310 311 bus_dmamap_load(qpair->dma_tag, qpair->cmd_dma_map, 312 qpair->cmd, qpair->num_entries * sizeof(struct nvme_command), 313 nvme_single_map, &qpair->cmd_bus_addr, 0); --- 4 unchanged lines hidden (view full) --- 318 qpair->sq_tdbl_off = nvme_mmio_offsetof(doorbell[id].sq_tdbl); 319 qpair->cq_hdbl_off = nvme_mmio_offsetof(doorbell[id].cq_hdbl); 320 321 TAILQ_INIT(&qpair->free_tr); 322 TAILQ_INIT(&qpair->outstanding_tr); 323 STAILQ_INIT(&qpair->queued_req); 324 325 for (i = 0; i < qpair->num_trackers; i++) { | 305 0, BUS_SPACE_MAXADDR, PAGE_SIZE, 0); 306 307 bus_dmamap_create(qpair->dma_tag, 0, &qpair->cmd_dma_map); 308 bus_dmamap_create(qpair->dma_tag, 0, &qpair->cpl_dma_map); 309 310 bus_dmamap_load(qpair->dma_tag, qpair->cmd_dma_map, 311 qpair->cmd, qpair->num_entries * sizeof(struct nvme_command), 312 nvme_single_map, &qpair->cmd_bus_addr, 0); --- 4 unchanged lines hidden (view full) --- 317 qpair->sq_tdbl_off = nvme_mmio_offsetof(doorbell[id].sq_tdbl); 318 qpair->cq_hdbl_off = nvme_mmio_offsetof(doorbell[id].cq_hdbl); 319 320 TAILQ_INIT(&qpair->free_tr); 321 TAILQ_INIT(&qpair->outstanding_tr); 322 STAILQ_INIT(&qpair->queued_req); 323 324 for (i = 0; i < qpair->num_trackers; i++) { |
326 tr = malloc(sizeof(*tr), M_NVME, M_ZERO | M_NOWAIT); 327 328 if (tr == NULL) { 329 printf("warning: nvme tracker malloc failed\n"); 330 break; 331 } 332 | 325 tr = malloc(sizeof(*tr), M_NVME, M_ZERO | M_WAITOK); |
333 nvme_qpair_construct_tracker(qpair, tr, i); 334 TAILQ_INSERT_HEAD(&qpair->free_tr, tr, tailq); 335 } 336 337 qpair->act_tr = malloc(sizeof(struct nvme_tracker *) * qpair->num_entries, | 326 nvme_qpair_construct_tracker(qpair, tr, i); 327 TAILQ_INSERT_HEAD(&qpair->free_tr, tr, tailq); 328 } 329 330 qpair->act_tr = malloc(sizeof(struct nvme_tracker *) * qpair->num_entries, |
338 M_NVME, M_ZERO | M_NOWAIT); | 331 M_NVME, M_ZERO | M_WAITOK); |
339} 340 341static void 342nvme_qpair_destroy(struct nvme_qpair *qpair) 343{ 344 struct nvme_tracker *tr; 345 346 if (qpair->tag) --- 372 unchanged lines hidden --- | 332} 333 334static void 335nvme_qpair_destroy(struct nvme_qpair *qpair) 336{ 337 struct nvme_tracker *tr; 338 339 if (qpair->tag) --- 372 unchanged lines hidden --- |