|
1 | 1 | /** |
2 | 2 | * @author Dominic Eschweiler <[email protected]> |
| 3 | + * @author Dirk Hutter <[email protected]> |
3 | 4 | * |
4 | 5 | * @section LICENSE |
5 | 6 | * |
6 | 7 | * Copyright (c) 2015, Dominic Eschweiler |
| 8 | + * Copyright (c) 2017, Dirk Hutter |
7 | 9 | * All rights reserved. |
8 | 10 | * |
9 | 11 | * Redistribution and use in source and binary forms, with or without |
@@ -216,7 +218,7 @@ DMABuffer_loadSGList |
216 | 218 | { ERROR_EXIT( errno, exit, "Lookup failed!\n" ); } |
217 | 219 |
|
218 | 220 | snprintf(buffer->internal->uio_filepath_sg, PDA_STRING_LIMIT, |
219 | | - "%s/%04x:%02x:%02x.%1x/dma/%s/sg", |
| 221 | + "%s/"UIO_PATH_FORMAT"/dma/%s/sg", |
220 | 222 | UIO_BAR_PATH, domain_id, bus_id, device_id, function_id, |
221 | 223 | buffer->internal->name); |
222 | 224 |
|
@@ -369,20 +371,20 @@ DMABuffer_generatePaths |
369 | 371 |
|
370 | 372 |
|
371 | 373 | snprintf(buffer->internal->uio_filepath_request, PDA_STRING_LIMIT, |
372 | | - "%s/%04x:%02x:%02x.%1x/dma/request", |
| 374 | + "%s/"UIO_PATH_FORMAT"/dma/request", |
373 | 375 | UIO_BAR_PATH, domain_id, bus_id, device_id, function_id); |
374 | 376 |
|
375 | 377 | snprintf(buffer->internal->uio_filepath_delete, PDA_STRING_LIMIT, |
376 | | - "%s/%04x:%02x:%02x.%1x/dma/free", |
| 378 | + "%s/"UIO_PATH_FORMAT"/dma/free", |
377 | 379 | UIO_BAR_PATH, domain_id, bus_id, device_id, function_id); |
378 | 380 |
|
379 | 381 | snprintf(buffer->internal->uio_filepath_map, PDA_STRING_LIMIT, |
380 | | - "%s/%04x:%02x:%02x.%1x/dma/%s/map", |
| 382 | + "%s/"UIO_PATH_FORMAT"/dma/%s/map", |
381 | 383 | UIO_BAR_PATH, domain_id, bus_id, device_id, function_id, |
382 | 384 | buffer->internal->name); |
383 | 385 |
|
384 | 386 | snprintf(buffer->internal->uio_filepath_folder, PDA_STRING_LIMIT, |
385 | | - "%s/%04x:%02x:%02x.%1x/dma/%s/", |
| 387 | + "%s/"UIO_PATH_FORMAT"/dma/%s/", |
386 | 388 | UIO_BAR_PATH, domain_id, bus_id, device_id, function_id, |
387 | 389 | buffer->internal->name); |
388 | 390 |
|
@@ -442,21 +444,6 @@ DMABuffer_lockUserBuffer |
442 | 444 | { |
443 | 445 | DEBUG_PRINTF(PDADEBUG_ENTER, ""); |
444 | 446 |
|
445 | | - volatile uint64_t tmp = 0; |
446 | | - volatile uint64_t *page_pointer = 0; |
447 | | - for |
448 | | - ( |
449 | | - page_pointer = (uint64_t*) start; |
450 | | - page_pointer < (uint64_t*) (start + buffer->length); |
451 | | - page_pointer = (page_pointer + PAGE_SIZE) |
452 | | - ) |
453 | | - { |
454 | | - tmp = *page_pointer; |
455 | | - *page_pointer = tmp; |
456 | | - } |
457 | | - |
458 | | - mlock(start, buffer->length); |
459 | | - |
460 | 447 | if(mlock(start, buffer->length) != 0) |
461 | 448 | { RETURN(ERROR( errno, "Buffer locking failed!\n")); } |
462 | 449 |
|
@@ -497,7 +484,7 @@ DMABuffer_requestMemory |
497 | 484 | #endif /* NUMA_AVAIL */ |
498 | 485 | }; |
499 | 486 |
|
500 | | - snprintf(request.name, 1024, "%s", buffer->internal->name); |
| 487 | + snprintf(request.name, UIO_PCI_DMA_BUFFER_NAME_SIZE, "%s", buffer->internal->name); |
501 | 488 |
|
502 | 489 | buffer->internal->alloc_fd = |
503 | 490 | pda_spinOpen |
@@ -589,10 +576,14 @@ DMABuffer_new |
589 | 576 | if( ((long unsigned int)start)%PAGE_SIZE != 0 ) |
590 | 577 | { ERROR_EXIT( EINVAL, exit, "Input buffer is not page aligned!\n" ); } |
591 | 578 |
|
592 | | - ret += DMABuffer_generatePaths(buffer, device); |
593 | | - ret += DMABuffer_lockUserBuffer(start, buffer); |
594 | | - ret += DMABuffer_requestMemory(device, buffer, start); |
595 | | - ret += DMABuffer_mapUser(buffer, start); |
| 579 | + if(DMABuffer_generatePaths(buffer, device) != PDA_SUCCESS) |
| 580 | + { ERROR_EXIT( errno, exit, "Buffer registration generate paths failed!\n" ); } |
| 581 | + if(DMABuffer_lockUserBuffer(start, buffer) != PDA_SUCCESS) |
| 582 | + { ERROR_EXIT( errno, exit, "Buffer registration lock buffer failed!\n" ); } |
| 583 | + if(DMABuffer_requestMemory(device, buffer, start) != PDA_SUCCESS) |
| 584 | + { ERROR_EXIT( errno, exit, "Buffer registration request memory failed!\n" ); } |
| 585 | + if(DMABuffer_mapUser(buffer, start) != PDA_SUCCESS) |
| 586 | + { ERROR_EXIT( errno, exit, "Buffer registration map failed!\n" ); } |
596 | 587 | } |
597 | 588 | break; |
598 | 589 |
|
@@ -641,12 +632,12 @@ DMABuffer_delete_not_attached_buffers(PciDevice *device) |
641 | 632 |
|
642 | 633 | char uio_file_path[PDA_STRING_LIMIT]; |
643 | 634 | memset(uio_file_path, 0, PDA_STRING_LIMIT); |
644 | | - snprintf(uio_file_path, PDA_STRING_LIMIT, "%s/%04x:%02x:%02x.%1x/dma/", |
| 635 | + snprintf(uio_file_path, PDA_STRING_LIMIT, "%s/"UIO_PATH_FORMAT"/dma/", |
645 | 636 | UIO_BAR_PATH, domain_id, bus_id, device_id, function_id); |
646 | 637 |
|
647 | 638 | char uio_delete_path[PDA_STRING_LIMIT]; |
648 | 639 | memset(uio_delete_path, 0, PDA_STRING_LIMIT); |
649 | | - snprintf(uio_delete_path, PDA_STRING_LIMIT, "%s/%04x:%02x:%02x.%1x/dma/free", |
| 640 | + snprintf(uio_delete_path, PDA_STRING_LIMIT, "%s/"UIO_PATH_FORMAT"/dma/free", |
650 | 641 | UIO_BAR_PATH, domain_id, bus_id, device_id, function_id); |
651 | 642 |
|
652 | 643 | /** Iterate over all directories inside the dma directory */ |
@@ -718,7 +709,7 @@ DMABuffer_check_persistant(PciDevice *device) |
718 | 709 |
|
719 | 710 | char uio_file_path[PDA_STRING_LIMIT]; |
720 | 711 | memset(uio_file_path, 0, PDA_STRING_LIMIT); |
721 | | - snprintf(uio_file_path, PDA_STRING_LIMIT, "%s/%04x:%02x:%02x.%1x/dma/", |
| 712 | + snprintf(uio_file_path, PDA_STRING_LIMIT, "%s/"UIO_PATH_FORMAT"/dma/", |
722 | 713 | UIO_BAR_PATH, domain_id, bus_id, device_id, function_id); |
723 | 714 |
|
724 | 715 | /** Return pointer */ |
@@ -1087,9 +1078,12 @@ DMABuffer_wrapMap(DMABuffer *buffer) |
1087 | 1078 | { ERROR_EXIT( errno, exit, "Base allocation failed\n" ); } |
1088 | 1079 | else |
1089 | 1080 | { |
| 1081 | +#pragma GCC diagnostic push |
| 1082 | +#pragma GCC diagnostic ignored "-Wuse-after-free" |
1090 | 1083 | uint8_t *buffer_area_tmp = buffer_area; |
1091 | 1084 | free(buffer_area); |
1092 | 1085 | buffer_area = buffer_area_tmp; |
| 1086 | +#pragma GCC diagnostic pop |
1093 | 1087 | } |
1094 | 1088 |
|
1095 | 1089 | if(buffer->type == PDA_BUFFER_KERNEL) |
|
0 commit comments