X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=memory.c;h=04dc3be8bfda1b312298591bff312d8d2b39912a;hp=fe657225a2739bf878b2ddfb0909771ccb6e21ad;hb=e1c325d25dd977c28c9489c542a51ee05dfc620e;hpb=27fb9e8dfb5dbf8e7d14d71f0850a145db88fdf9 diff --git a/memory.c b/memory.c index fe657225..04dc3be8 100644 --- a/memory.c +++ b/memory.c @@ -138,6 +138,9 @@ static int alloc_mem_mmap(struct thread_data *td, size_t total_mem) } if (td->o.mmapfile) { + if (access(td->o.mmapfile, F_OK) == 0) + td->flags |= TD_F_MMAP_KEEP; + td->mmapfd = open(td->o.mmapfile, O_RDWR|O_CREAT, 0644); if (td->mmapfd < 0) { @@ -169,7 +172,7 @@ static int alloc_mem_mmap(struct thread_data *td, size_t total_mem) td->orig_buffer = NULL; if (td->mmapfd != 1 && td->mmapfd != -1) { close(td->mmapfd); - if (td->o.mmapfile) + if (td->o.mmapfile && !(td->flags & TD_F_MMAP_KEEP)) unlink(td->o.mmapfile); } @@ -187,7 +190,8 @@ static void free_mem_mmap(struct thread_data *td, size_t total_mem) if (td->o.mmapfile) { if (td->mmapfd != -1) close(td->mmapfd); - unlink(td->o.mmapfile); + if (!(td->flags & TD_F_MMAP_KEEP)) + unlink(td->o.mmapfile); free(td->o.mmapfile); } } @@ -207,10 +211,9 @@ static void free_mem_malloc(struct thread_data *td) free(td->orig_buffer); } -#ifdef CONFIG_CUDA - static int alloc_mem_cudamalloc(struct thread_data *td, size_t total_mem) { +#ifdef CONFIG_CUDA CUresult ret; char name[128]; @@ -264,17 +267,21 @@ static int alloc_mem_cudamalloc(struct thread_data *td, size_t total_mem) dprint(FD_MEM, "cudaMalloc %llu %p\n", \ (unsigned long long) total_mem, td->orig_buffer); return 0; +#else + return -EINVAL; +#endif } static void free_mem_cudamalloc(struct thread_data *td) { - if ((void *) td->dev_mem_ptr != NULL) +#ifdef CONFIG_CUDA + if (td->dev_mem_ptr != NULL) cuMemFree(td->dev_mem_ptr); if (cuCtxDestroy(td->cu_ctx) != CUDA_SUCCESS) log_err("fio: failed to destroy cuda context\n"); -} #endif +} /* * Set up the buffer area we need for io. @@ -315,10 +322,8 @@ int allocate_io_mem(struct thread_data *td) else if (td->o.mem_type == MEM_MMAP || td->o.mem_type == MEM_MMAPHUGE || td->o.mem_type == MEM_MMAPSHARED) ret = alloc_mem_mmap(td, total_mem); -#ifdef CONFIG_CUDA else if (td->o.mem_type == MEM_CUDA_MALLOC) ret = alloc_mem_cudamalloc(td, total_mem); -#endif else { log_err("fio: bad mem type: %d\n", td->o.mem_type); ret = 1; @@ -348,10 +353,8 @@ void free_io_mem(struct thread_data *td) else if (td->o.mem_type == MEM_MMAP || td->o.mem_type == MEM_MMAPHUGE || td->o.mem_type == MEM_MMAPSHARED) free_mem_mmap(td, total_mem); -#ifdef CONFIG_CUDA else if (td->o.mem_type == MEM_CUDA_MALLOC) free_mem_cudamalloc(td); -#endif else log_err("Bad memory type %u\n", td->o.mem_type);