Spdk/include/spdk/fd_group.h
Jim Harris 488570ebd4 Replace most BSD 3-clause license text with SPDX identifier.
Many open source projects have moved to using SPDX identifiers
to specify license information, reducing the amount of
boilerplate code in every source file.  This patch replaces
the bulk of SPDK .c, .cpp and Makefiles with the BSD-3-Clause
identifier.

Almost all of these files share the exact same license text,
and this patch only modifies the files that contain the
most common license text.  There can be slight variations
because the third clause contains company names - most say
"Intel Corporation", but there are instances for Nvidia,
Samsung, Eideticom and even "the copyright holder".

Used a bash script to automate replacement of the license text
with SPDX identifier which is checked into scripts/spdx.sh.

Signed-off-by: Jim Harris <james.r.harris@intel.com>
Change-Id: Iaa88ab5e92ea471691dc298cfe41ebfb5d169780
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/12904
Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Community-CI: Mellanox Build Bot
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Aleksey Marchuk <alexeymar@nvidia.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: Dong Yi <dongx.yi@intel.com>
Reviewed-by: Konrad Sztyber <konrad.sztyber@intel.com>
Reviewed-by: Paul Luse <paul.e.luse@intel.com>
Reviewed-by: <qun.wan@intel.com>
2022-06-09 07:35:12 +00:00

126 lines
3.3 KiB
C

/* SPDX-License-Identifier: BSD-3-Clause
* Copyright (c) Intel Corporation.
* All rights reserved.
*/
/**
* \file
* File descriptor group utility functions
*/
#ifndef SPDK_FD_GROUP_H
#define SPDK_FD_GROUP_H
#include "spdk/stdinc.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* Callback function registered for the event source file descriptor.
*
* \param ctx Context passed as arg to spdk_fd_group_add().
*
* \return 0 to indicate that event notification took place but no events were found;
* positive to indicate that event notification took place and some events were processed;
* negative if no event information is provided.
*/
typedef int (*spdk_fd_fn)(void *ctx);
/**
* A file descriptor group of event sources which gather the events to an epoll instance.
*
* Taking "fgrp" as short name for file descriptor group of event sources.
*/
struct spdk_fd_group;
/**
* Initialize one fd_group.
*
* \param fgrp A pointer to return the initialized fgrp.
*
* \return 0 if success or -errno if failed
*/
int spdk_fd_group_create(struct spdk_fd_group **fgrp);
/**
* Release all resources associated with this fgrp.
*
* Users need to remove all event sources from the fgrp before destroying it.
*
* \param fgrp The fgrp to destroy.
*/
void spdk_fd_group_destroy(struct spdk_fd_group *fgrp);
/**
* Wait for new events generated inside fgrp, and process them with their
* registered spdk_fd_fn.
*
* \param fgrp The fgrp to wait and process.
* \param timeout Specifies the number of milliseconds that will block.
* -1 causes indefinitely blocking; 0 causes immediately return.
*
* \return the number of processed events
* or -errno if failed
*/
int spdk_fd_group_wait(struct spdk_fd_group *fgrp, int timeout);
/**
* Return the internal epoll_fd of specific fd_group
*
* \param fgrp The pointer of specified fgrp.
*
* \return The epoll_fd of specific fgrp.
*/
int spdk_fd_group_get_fd(struct spdk_fd_group *fgrp);
/**
* Register one event source to specified fgrp.
*
* \param fgrp The fgrp registered to.
* \param efd File descriptor of the event source.
* \param fn Called each time there are events in event source.
* \param arg Function argument for fn.
* \param name Name of the event source.
*
* \return 0 if success or -errno if failed
*/
int spdk_fd_group_add(struct spdk_fd_group *fgrp, int efd,
spdk_fd_fn fn, void *arg, const char *name);
/*
* \brief Register an event source with the name set to the string of the
* callback function.
*/
#define SPDK_FD_GROUP_ADD(fgrp, efd, fn, arg) \
spdk_fd_group_add(fgrp, efd, fn, arg, #fn)
/**
* Unregister one event source from one fgrp.
*
* \param fgrp The fgrp registered to.
* \param efd File descriptor of the event source.
*/
void spdk_fd_group_remove(struct spdk_fd_group *fgrp, int efd);
/**
* Change the event notification types associated with the event source.
*
* Modules like nbd, need this api to add EPOLLOUT when having data to send, and remove EPOLLOUT if no data to send.
*
* \param fgrp The fgrp registered to.
* \param efd File descriptor of the event source.
* \param event_types The event notification types.
*
* \return 0 if success or -errno if failed
*/
int spdk_fd_group_event_modify(struct spdk_fd_group *fgrp,
int efd, int event_types);
#ifdef __cplusplus
}
#endif
#endif /* SPDK_FD_GROUP_H */