Spdk/include/spdk/fd_group.h
paul luse a6dbe3721e update Intel copyright notices
per Intel policy to include file commit date using git cmd
below.  The policy does not apply to non-Intel (C) notices.

git log --follow -C90% --format=%ad --date default <file> | tail -1

and then pull just the 4 digit year from the result.

Intel copyrights were not added to files where Intel either had
no contribution ot the contribution lacked substance (ie license
header updates, formatting changes, etc).  Contribution date used
"--follow -C95%" to get the most accurate date.

Note that several files in this patch didn't end the license/(c)
block with a blank comment line so these were added as the vast
majority of files do have this last blank line.  Simply there for
consistency.

Signed-off-by: paul luse <paul.e.luse@intel.com>
Change-Id: Id5b7ce4f658fe87132f14139ead58d6e285c04d4
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15192
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Community-CI: Mellanox Build Bot
2022-11-10 08:28:53 +00:00

126 lines
3.3 KiB
C

/* SPDX-License-Identifier: BSD-3-Clause
* Copyright (C) 2020 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 */