/* SPDX-License-Identifier: GPL-2.0-or-later */
#ifndef _LINUX_IO_URING_H
#define _LINUX_IO_URING_H

#include <linux/sched.h>
#include <linux/xarray.h>

#ifdef __GENKSYMS__
/*
 * ANDROID ABI HACK
 *
 * In the 5.10.162 release, the io_uring code was synced with the version
 * that is in the 5.15.y kernel tree in order to resolve a huge number of
 * potential, and known, problems with the codebase.  This makes for a more
 * secure and easier-to-update-and-maintain 5.10.y kernel tree, so this is
 * a great thing, however this caused some issues when it comes to the
 * Android KABI preservation and checking tools.
 *
 * A number of the io_uring structures get used in other core kernel
 * structures, only as "opaque" pointers, so there is not any real ABI
 * breakage.  But, due to the visibility of the structures going away, the
 * CRC values of many scheduler variables and functions were changed.
 *
 * In order to preserve the CRC values, to prevent all device kernels to be
 * forced to rebuild for no reason whatsoever from a functional point of
 * view, we need to keep around the "old" io_uring structures for the CRC
 * calculation only.  This is done by the following definitions of struct
 * io_identity and struct io_uring_task which will only be visible when the
 * CRC calculation build happens, not in any functional kernel build.
 *
 * Yes, this all is a horrible hack, and these really are not the true
 * structures that any code uses, but so life is in the world of stable
 * apis...
 * The real structures are in io_uring/io_uring.c, see the ones there if
 * you need to touch or do anything with it.
 *
 * NEVER touch these structure definitions, they are fake and not valid code.
 */
struct io_identity {
	struct files_struct		*files;
	struct mm_struct		*mm;
#ifdef CONFIG_BLK_CGROUP
	struct cgroup_subsys_state	*blkcg_css;
#endif
	const struct cred		*creds;
	struct nsproxy			*nsproxy;
	struct fs_struct		*fs;
	unsigned long			fsize;
#ifdef CONFIG_AUDIT
	kuid_t				loginuid;
	unsigned int			sessionid;
#endif
	refcount_t			count;
};

struct io_uring_task {
	/* submission side */
	struct xarray		xa;
	struct wait_queue_head	wait;
	struct file		*last;
	struct percpu_counter	inflight;
	struct io_identity	__identity;
	struct io_identity	*identity;
	atomic_t		in_idle;
	bool			sqpoll;
};
#endif	/* ANDROID ABI HACK */


#if defined(CONFIG_IO_URING)
void __io_uring_cancel(bool cancel_all);
void __io_uring_free(struct task_struct *tsk);
bool io_is_uring_fops(struct file *file);

static inline void io_uring_files_cancel(void)
{
	if (current->io_uring)
		__io_uring_cancel(false);
}
static inline void io_uring_task_cancel(void)
{
	if (current->io_uring)
		__io_uring_cancel(true);
}
static inline void io_uring_free(struct task_struct *tsk)
{
	if (tsk->io_uring)
		__io_uring_free(tsk);
}
#else
static inline void io_uring_task_cancel(void)
{
}
static inline void io_uring_files_cancel(void)
{
}
static inline void io_uring_free(struct task_struct *tsk)
{
}
static inline bool io_is_uring_fops(struct file *file)
{
	return false;
}
#endif

#endif
