rdma_utils.c 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /*
  2. * QEMU paravirtual RDMA - Generic RDMA backend
  3. *
  4. * Copyright (C) 2018 Oracle
  5. * Copyright (C) 2018 Red Hat Inc
  6. *
  7. * Authors:
  8. * Yuval Shaia <yuval.shaia@oracle.com>
  9. * Marcel Apfelbaum <marcel@redhat.com>
  10. *
  11. * This work is licensed under the terms of the GNU GPL, version 2 or later.
  12. * See the COPYING file in the top-level directory.
  13. *
  14. */
  15. #include "rdma_utils.h"
  16. void *rdma_pci_dma_map(PCIDevice *dev, dma_addr_t addr, dma_addr_t plen)
  17. {
  18. void *p;
  19. hwaddr len = plen;
  20. if (!addr) {
  21. pr_dbg("addr is NULL\n");
  22. return NULL;
  23. }
  24. p = pci_dma_map(dev, addr, &len, DMA_DIRECTION_TO_DEVICE);
  25. if (!p) {
  26. pr_dbg("Fail in pci_dma_map, addr=0x%" PRIx64 ", len=%" PRId64 "\n",
  27. addr, len);
  28. return NULL;
  29. }
  30. if (len != plen) {
  31. rdma_pci_dma_unmap(dev, p, len);
  32. return NULL;
  33. }
  34. pr_dbg("0x%" PRIx64 " -> %p (len=% " PRId64 ")\n", addr, p, len);
  35. return p;
  36. }
  37. void rdma_pci_dma_unmap(PCIDevice *dev, void *buffer, dma_addr_t len)
  38. {
  39. pr_dbg("%p\n", buffer);
  40. if (buffer) {
  41. pci_dma_unmap(dev, buffer, len, DMA_DIRECTION_TO_DEVICE, 0);
  42. }
  43. }