aboutsummaryrefslogtreecommitdiff
path: root/samples/server.c
diff options
context:
space:
mode:
authorJohn Levon <john.levon@nutanix.com>2020-11-27 14:48:07 +0000
committerGitHub <noreply@github.com>2020-11-27 14:48:07 +0000
commite94bd44d10d8019ea2c39356363a5743136bdb5d (patch)
tree93f71114f5e57682a5a5a1182f7c1e19ce963ff8 /samples/server.c
parent40ac852fec651f54a4be8905ab8bb6b25ddb64e2 (diff)
downloadlibvfio-user-e94bd44d10d8019ea2c39356363a5743136bdb5d.zip
libvfio-user-e94bd44d10d8019ea2c39356363a5743136bdb5d.tar.gz
libvfio-user-e94bd44d10d8019ea2c39356363a5743136bdb5d.tar.bz2
rename to libvfio-user (#128)
The muser name no longer reflects the implementation, and will just serve to confuse. Bite the bullet now, and rename ourselves to reflect the actual implementation. Signed-off-by: John Levon <john.levon@nutanix.com> Reviewed-by: Thanos Makatos <thanos.makatos@nutanix.com> Reviewed-by: Swapnil Ingle <swapnil.ingle@nutanix.com>
Diffstat (limited to 'samples/server.c')
-rw-r--r--samples/server.c119
1 files changed, 60 insertions, 59 deletions
diff --git a/samples/server.c b/samples/server.c
index 2d8bd26..dd84f16 100644
--- a/samples/server.c
+++ b/samples/server.c
@@ -45,7 +45,7 @@
#include <sys/time.h>
#include "common.h"
-#include "muser.h"
+#include "libvfio-user.h"
#include "tran_sock.h"
struct dma_regions {
@@ -56,7 +56,7 @@ struct dma_regions {
#define NR_DMA_REGIONS 96
struct server_data {
- lm_ctx_t *lm_ctx;
+ vfu_ctx_t *vfu_ctx;
time_t bar0;
uint8_t *bar1;
struct dma_regions regions[NR_DMA_REGIONS];
@@ -65,12 +65,12 @@ struct server_data {
__u64 data_size;
void *migr_data;
size_t migr_data_len;
- lm_migr_state_t state;
+ vfu_migr_state_t state;
} migration;
};
static void
-_log(UNUSED void *pvt, UNUSED lm_log_lvl_t lvl, char const *msg)
+_log(UNUSED void *pvt, UNUSED vfu_log_lvl_t lvl, char const *msg)
{
fprintf(stderr, "server: %s\n", msg);
}
@@ -79,10 +79,10 @@ static int
arm_timer(struct server_data *server_data, time_t t)
{
struct itimerval new = {.it_value.tv_sec = t - time(NULL) };
- lm_log(server_data->lm_ctx, LM_DBG,
- "arming timer to trigger in %ld seconds", new.it_value.tv_sec);
+ vfu_log(server_data->vfu_ctx, VFU_DBG,
+ "arming timer to trigger in %ld seconds", new.it_value.tv_sec);
if (setitimer(ITIMER_REAL, &new, NULL) != 0) {
- lm_log(server_data->lm_ctx, LM_ERR, "failed to arm timer: %m");
+ vfu_log(server_data->vfu_ctx, VFU_ERR, "failed to arm timer: %m");
return -errno;
}
return 0;
@@ -95,14 +95,14 @@ bar0_access(void *pvt, char * const buf, size_t count, loff_t offset,
struct server_data *server_data = pvt;
if (count != sizeof(time_t) || offset != 0) {
- lm_log(server_data->lm_ctx, LM_ERR, "bad BAR0 access %#lx-%#lx",
- offset, offset + count - 1);
+ vfu_log(server_data->vfu_ctx, VFU_ERR, "bad BAR0 access %#lx-%#lx",
+ offset, offset + count - 1);
errno = EINVAL;
return -1;
}
if (is_write) {
- if (server_data->migration.state == LM_MIGR_STATE_RUNNING) {
+ if (server_data->migration.state == VFU_MIGR_STATE_RUNNING) {
int ret = arm_timer(server_data, *(time_t*)buf);
if (ret < 0) {
return ret;
@@ -188,7 +188,7 @@ void get_md5sum(unsigned char *buf, int len, unsigned char *md5sum)
* sparsely memory mappable. We should also have a test where the server does
* DMA directly on the client memory.
*/
-static void do_dma_io(lm_ctx_t *lm_ctx, struct server_data *server_data)
+static void do_dma_io(vfu_ctx_t *vfu_ctx, struct server_data *server_data)
{
int count = 4096;
unsigned char buf[count];
@@ -196,10 +196,10 @@ static void do_dma_io(lm_ctx_t *lm_ctx, struct server_data *server_data)
int i, ret;
dma_sg_t sg;
- assert(lm_ctx != NULL);
+ assert(vfu_ctx != NULL);
- ret = lm_addr_to_sg(lm_ctx, server_data->regions[0].addr, count, &sg,
- 1, PROT_WRITE);
+ ret = vfu_addr_to_sg(vfu_ctx, server_data->regions[0].addr, count, &sg,
+ 1, PROT_WRITE);
if (ret < 0) {
errx(EXIT_FAILURE, "failed to map %#lx-%#lx: %s\n",
server_data->regions[0].addr,
@@ -210,17 +210,17 @@ static void do_dma_io(lm_ctx_t *lm_ctx, struct server_data *server_data)
get_md5sum(buf, count, md5sum1);
printf("%s: WRITE addr %#lx count %d\n", __func__,
server_data->regions[0].addr, count);
- ret = lm_dma_write(lm_ctx, &sg, buf);
+ ret = vfu_dma_write(vfu_ctx, &sg, buf);
if (ret < 0) {
- errx(EXIT_FAILURE, "lm_dma_write failed: %s\n", strerror(-ret));
+ errx(EXIT_FAILURE, "vfu_dma_write failed: %s\n", strerror(-ret));
}
memset(buf, 0, count);
printf("%s: READ addr %#lx count %d\n", __func__,
server_data->regions[0].addr, count);
- ret = lm_dma_read(lm_ctx, &sg, buf);
+ ret = vfu_dma_read(vfu_ctx, &sg, buf);
if (ret < 0) {
- errx(EXIT_FAILURE, "lm_dma_read failed: %s\n", strerror(-ret));
+ errx(EXIT_FAILURE, "vfu_dma_read failed: %s\n", strerror(-ret));
}
get_md5sum(buf, count, md5sum2);
for(i = 0; i < MD5_DIGEST_LENGTH; i++) {
@@ -246,7 +246,7 @@ static int device_reset(UNUSED void *pvt)
}
static int
-migration_device_state_transition(void *pvt, lm_migr_state_t state)
+migration_device_state_transition(void *pvt, vfu_migr_state_t state)
{
int ret;
struct server_data *server_data = pvt;
@@ -254,16 +254,16 @@ migration_device_state_transition(void *pvt, lm_migr_state_t state)
printf("migration: transition to device state %d\n", state);
switch (state) {
- case LM_MIGR_STATE_STOP_AND_COPY:
+ case VFU_MIGR_STATE_STOP_AND_COPY:
/* TODO must be less than size of data region in migration region */
server_data->migration.pending_bytes = sysconf(_SC_PAGESIZE);
break;
- case LM_MIGR_STATE_STOP:
+ case VFU_MIGR_STATE_STOP:
assert(server_data->migration.pending_bytes == 0);
break;
- case LM_MIGR_STATE_RESUME:
+ case VFU_MIGR_STATE_RESUME:
break;
- case LM_MIGR_STATE_RUNNING:
+ case VFU_MIGR_STATE_RUNNING:
ret = arm_timer(server_data, server_data->bar0);
if (ret < 0) {
return ret;
@@ -303,9 +303,9 @@ migration_read_data(void *pvt, void *buf, __u64 size, __u64 offset)
struct server_data *server_data = pvt;
if (server_data->migration.data_size < size) {
- lm_log(server_data->lm_ctx, LM_ERR,
- "invalid migration data read %#llx-%#llx",
- offset, offset + size - 1);
+ vfu_log(server_data->vfu_ctx, VFU_ERR,
+ "invalid migration data read %#llx-%#llx",
+ offset, offset + size - 1);
return -EINVAL;
}
@@ -328,8 +328,8 @@ migration_write_data(void *pvt, void *data, __u64 size, __u64 offset)
assert(data != NULL);
if (offset + size > server_data->migration.migr_data_len) {
- lm_log(server_data->lm_ctx, LM_ERR,
- "invalid write %#llx-%#llx", offset, offset + size - 1);
+ vfu_log(server_data->vfu_ctx, VFU_ERR,
+ "invalid write %#llx-%#llx", offset, offset + size - 1);
}
memcpy(server_data->migration.migr_data + offset, data, size);
@@ -347,9 +347,9 @@ migration_data_written(void *pvt, __u64 count, __u64 offset)
assert(server_data != NULL);
if (offset + count > server_data->migration.migr_data_len) {
- lm_log(server_data->lm_ctx, LM_ERR,
- "bad migration data range %#llx-%#llx",
- offset, offset + count - 1);
+ vfu_log(server_data->vfu_ctx, VFU_ERR,
+ "bad migration data range %#llx-%#llx",
+ offset, offset + count - 1);
return -EINVAL;
}
@@ -377,15 +377,15 @@ int main(int argc, char *argv[])
.migration = {
/* one page so that we can memory map it */
.migr_data_len = sysconf(_SC_PAGESIZE),
- .state = LM_MIGR_STATE_RUNNING
+ .state = VFU_MIGR_STATE_RUNNING
}
};
int nr_sparse_areas = 2, size = 1024, i;
- struct lm_sparse_mmap_areas *sparse_areas;
- lm_ctx_t *lm_ctx;
- lm_pci_hdr_id_t id = {.raw = 0xdeadbeef};
- lm_pci_hdr_ss_t ss = {.raw = 0xcafebabe};
- lm_pci_hdr_cc_t cc = {.pi = 0xab, .scc = 0xcd, .bcc = 0xef};
+ struct vfu_sparse_mmap_areas *sparse_areas;
+ vfu_ctx_t *vfu_ctx;
+ vfu_pci_hdr_id_t id = {.raw = 0xdeadbeef};
+ vfu_pci_hdr_ss_t ss = {.raw = 0xcafebabe};
+ vfu_pci_hdr_cc_t cc = {.pi = 0xab, .scc = 0xcd, .bcc = 0xef};
while ((opt = getopt(argc, argv, "v")) != -1) {
switch (opt) {
@@ -398,7 +398,7 @@ int main(int argc, char *argv[])
}
if (optind >= argc) {
- errx(EXIT_FAILURE, "missing MUSER socket path");
+ errx(EXIT_FAILURE, "missing vfio-user socket path");
}
/* coverity[NEGATIVE_RETURNS] */
@@ -408,7 +408,7 @@ int main(int argc, char *argv[])
}
sparse_areas = calloc(1, sizeof(*sparse_areas) +
- (nr_sparse_areas * sizeof(struct lm_mmap_area)));
+ (nr_sparse_areas * sizeof(struct vfu_mmap_area)));
if (sparse_areas == NULL) {
err(EXIT_FAILURE, "MMAP sparse areas ENOMEM");
}
@@ -422,50 +422,51 @@ int main(int argc, char *argv[])
err(EXIT_FAILURE, "failed to register signal handler");
}
- server_data.lm_ctx = lm_ctx = lm_create_ctx(LM_TRANS_SOCK, argv[optind], 0,
- &server_data);
- if (lm_ctx == NULL) {
+ server_data.vfu_ctx = vfu_ctx = vfu_create_ctx(VFU_TRANS_SOCK, argv[optind],
+ 0, &server_data);
+ if (vfu_ctx == NULL) {
err(EXIT_FAILURE, "failed to initialize device emulation\n");
}
- ret = lm_setup_log(lm_ctx, _log, verbose ? LM_DBG : LM_ERR);
+ ret = vfu_setup_log(vfu_ctx, _log, verbose ? VFU_DBG : VFU_ERR);
if (ret < 0) {
err(EXIT_FAILURE, "failed to setup log");
}
- ret = lm_pci_setup_config_hdr(lm_ctx, id, ss, cc, false);
+ ret = vfu_pci_setup_config_hdr(vfu_ctx, id, ss, cc, false);
if (ret < 0) {
err(EXIT_FAILURE, "failed to setup PCI header");
}
- ret = lm_setup_region(lm_ctx, LM_PCI_DEV_BAR0_REGION_IDX, sizeof(time_t),
- &bar0_access, LM_REG_FLAG_RW, NULL, NULL);
+ ret = vfu_setup_region(vfu_ctx, VFU_PCI_DEV_BAR0_REGION_IDX, sizeof(time_t),
+ &bar0_access, VFU_REG_FLAG_RW, NULL, NULL);
if (ret < 0) {
err(EXIT_FAILURE, "failed to setup BAR0 region");
}
- ret = lm_setup_region(lm_ctx, LM_PCI_DEV_BAR1_REGION_IDX, sysconf(_SC_PAGESIZE),
- &bar1_access, LM_REG_FLAG_RW, sparse_areas, map_area);
+ ret = vfu_setup_region(vfu_ctx, VFU_PCI_DEV_BAR1_REGION_IDX,
+ sysconf(_SC_PAGESIZE), &bar1_access,
+ VFU_REG_FLAG_RW, sparse_areas, map_area);
if (ret < 0) {
err(EXIT_FAILURE, "failed to setup BAR1 region");
}
- ret = lm_setup_device_reset_cb(lm_ctx, &device_reset);
+ ret = vfu_setup_device_reset_cb(vfu_ctx, &device_reset);
if (ret < 0) {
err(EXIT_FAILURE, "failed to setup device reset callbacks");
}
- ret = lm_setup_device_dma_cb(lm_ctx, &map_dma, &unmap_dma);
+ ret = vfu_setup_device_dma_cb(vfu_ctx, &map_dma, &unmap_dma);
if (ret < 0) {
err(EXIT_FAILURE, "failed to setup device DMA callbacks");
}
- ret = lm_setup_device_nr_irqs(lm_ctx, LM_DEV_INTX_IRQ, 1);
+ ret = vfu_setup_device_nr_irqs(vfu_ctx, VFU_DEV_INTX_IRQ, 1);
if (ret < 0) {
err(EXIT_FAILURE, "failed to setup irq counts");
}
- lm_migration_t migration = {
+ vfu_migration_t migration = {
.size = server_data.migration.migr_data_len,
.mmap_areas = sparse_areas,
.callbacks = {
@@ -478,7 +479,7 @@ int main(int argc, char *argv[])
}
};
- ret = lm_setup_device_migration(lm_ctx, &migration);
+ ret = vfu_setup_device_migration(vfu_ctx, &migration);
if (ret < 0) {
err(EXIT_FAILURE, "failed to setup device migration");
}
@@ -490,18 +491,18 @@ int main(int argc, char *argv[])
}
do {
- ret = lm_ctx_drive(lm_ctx);
+ ret = vfu_ctx_drive(vfu_ctx);
if (ret == -EINTR) {
if (irq_triggered) {
irq_triggered = false;
- lm_irq_trigger(lm_ctx, 0);
+ vfu_irq_trigger(vfu_ctx, 0);
- ret = lm_irq_message(lm_ctx, 0);
+ ret = vfu_irq_message(vfu_ctx, 0);
if (ret < 0) {
- err(EXIT_FAILURE, "lm_irq_message() failed");
+ err(EXIT_FAILURE, "vfu_irq_message() failed");
}
- do_dma_io(lm_ctx, &server_data);
+ do_dma_io(vfu_ctx, &server_data);
ret = 0;
}
}
@@ -512,7 +513,7 @@ int main(int argc, char *argv[])
strerror(-ret));
}
- lm_ctx_destroy(lm_ctx);
+ vfu_ctx_destroy(vfu_ctx);
free(server_data.bar1);
free(sparse_areas);
return EXIT_SUCCESS;