Blame examples/pmem_kinds.c

Packit Service 724aca
/*
Packit Service 724aca
 * Copyright (c) 2018 - 2019 Intel Corporation
Packit Service 724aca
 *
Packit Service 724aca
 * Redistribution and use in source and binary forms, with or without
Packit Service 724aca
 * modification, are permitted provided that the following conditions
Packit Service 724aca
 * are met:
Packit Service 724aca
 *
Packit Service 724aca
 *     * Redistributions of source code must retain the above copyright
Packit Service 724aca
 *       notice, this list of conditions and the following disclaimer.
Packit Service 724aca
 *
Packit Service 724aca
 *     * Redistributions in binary form must reproduce the above copyright
Packit Service 724aca
 *       notice, this list of conditions and the following disclaimer in
Packit Service 724aca
 *       the documentation and/or other materials provided with the
Packit Service 724aca
 *       distribution.
Packit Service 724aca
 *
Packit Service 724aca
 *     * Neither the name of Intel Corporation nor the names of its
Packit Service 724aca
 *       contributors may be used to endorse or promote products derived
Packit Service 724aca
 *       from this software without specific prior written permission.
Packit Service 724aca
 *
Packit Service 724aca
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
Packit Service 724aca
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
Packit Service 724aca
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
Packit Service 724aca
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
Packit Service 724aca
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
Packit Service 724aca
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
Packit Service 724aca
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
Packit Service 724aca
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
Packit Service 724aca
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
Packit Service 724aca
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY LOG OF THE USE
Packit Service 724aca
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Packit Service 724aca
 */
Packit Service 724aca
Packit Service 724aca
#include <memkind.h>
Packit Service 724aca
Packit Service 724aca
#include <limits.h>
Packit Service 724aca
#include <stdio.h>
Packit Service 724aca
#include <stdlib.h>
Packit Service 724aca
Packit Service 724aca
#define PMEM_MAX_SIZE (1024 * 1024 * 32)
Packit Service 724aca
#define NUM_KINDS 10
Packit Service 724aca
Packit Service 724aca
static char path[PATH_MAX]="/tmp/";
Packit Service 724aca
Packit Service 724aca
static void print_err_message(int err)
Packit Service 724aca
{
Packit Service 724aca
    char error_message[MEMKIND_ERROR_MESSAGE_SIZE];
Packit Service 724aca
    memkind_error_message(err, error_message, MEMKIND_ERROR_MESSAGE_SIZE);
Packit Service 724aca
    fprintf(stderr, "%s\n", error_message);
Packit Service 724aca
}
Packit Service 724aca
Packit Service 724aca
int main(int argc, char *argv[])
Packit Service 724aca
{
Packit Service 724aca
    struct memkind *pmem_kinds[NUM_KINDS] = {NULL};
Packit Service 724aca
    struct memkind *pmem_kind = NULL;
Packit Service 724aca
    struct memkind *pmem_kind_unlimited = NULL;
Packit Service 724aca
Packit Service 724aca
    int err = 0, i = 0;
Packit Service 724aca
Packit Service 724aca
    if (argc > 2) {
Packit Service 724aca
        fprintf(stderr, "Usage: %s [pmem_kind_dir_path]\n", argv[0]);
Packit Service 724aca
        return 1;
Packit Service 724aca
    } else if (argc == 2 && (realpath(argv[1], path) == NULL)) {
Packit Service 724aca
        fprintf(stderr, "Incorrect pmem_kind_dir_path %s\n", argv[1]);
Packit Service 724aca
        return 1;
Packit Service 724aca
    }
Packit Service 724aca
Packit Service 724aca
    fprintf(stdout,
Packit Service 724aca
            "This example shows how to create and destroy pmem kind with defined or unlimited size."
Packit Service 724aca
            "\nPMEM kind directory: %s\n", path);
Packit Service 724aca
Packit Service 724aca
    // Create first PMEM partition with specific size
Packit Service 724aca
    err = memkind_create_pmem(path, PMEM_MAX_SIZE, &pmem_kind);
Packit Service 724aca
    if (err) {
Packit Service 724aca
        print_err_message(err);
Packit Service 724aca
        return 1;
Packit Service 724aca
    }
Packit Service 724aca
Packit Service 724aca
    // Create second PMEM partition with unlimited size
Packit Service 724aca
    err = memkind_create_pmem(path, 0, &pmem_kind_unlimited);
Packit Service 724aca
    if (err) {
Packit Service 724aca
        print_err_message(err);
Packit Service 724aca
        return 1;
Packit Service 724aca
    }
Packit Service 724aca
Packit Service 724aca
    // Destroy both PMEM partitions
Packit Service 724aca
    err = memkind_destroy_kind(pmem_kind);
Packit Service 724aca
    if (err) {
Packit Service 724aca
        print_err_message(err);
Packit Service 724aca
        return 1;
Packit Service 724aca
    }
Packit Service 724aca
Packit Service 724aca
    err = memkind_destroy_kind(pmem_kind_unlimited);
Packit Service 724aca
    if (err) {
Packit Service 724aca
        print_err_message(err);
Packit Service 724aca
        return 1;
Packit Service 724aca
    }
Packit Service 724aca
Packit Service 724aca
    // Create many PMEM kinds with same specific size
Packit Service 724aca
    for (i = 0; i < NUM_KINDS; i++) {
Packit Service 724aca
        err = memkind_create_pmem(path, PMEM_MAX_SIZE, &pmem_kinds[i]);
Packit Service 724aca
        if (err) {
Packit Service 724aca
            print_err_message(err);
Packit Service 724aca
            return 1;
Packit Service 724aca
        }
Packit Service 724aca
    }
Packit Service 724aca
Packit Service 724aca
    // Destroy all of them
Packit Service 724aca
    for (i = 0; i < NUM_KINDS; i++) {
Packit Service 724aca
        err = memkind_destroy_kind(pmem_kinds[i]);
Packit Service 724aca
        if (err) {
Packit Service 724aca
            print_err_message(err);
Packit Service 724aca
            return 1;
Packit Service 724aca
        }
Packit Service 724aca
    }
Packit Service 724aca
Packit Service 724aca
    fprintf(stdout, "PMEM kinds have been successfully created and destroyed.\n");
Packit Service 724aca
Packit Service 724aca
    return 0;
Packit Service 724aca
}