restore lost packages from 0.2.3 + fix overwritten 0.2.4 files
- Restore 29 recipe symlinks (libdrm, qtbase, dbus, sddm, pipewire, etc.) - Restore 33 patches (KDE, libdrm, mesa, pipewire, sddm, wireplumber) - Restore 20+ local/scripts (audit, lint, test, build helpers) - Restore src/cook/scheduler.rs, status.rs, gnu-config/ - Restore scripts/patch-inclusion-gate.sh, run_mini1.sh, validate-collision-log.sh - Recover TLC source from HEAD (was overwritten by 0.2.3 checkout) - Recover 11 local/docs plans from HEAD (were overwritten) - Recover qt6-wayland-smoke symlink from HEAD - Fix MOTD: remove garbled ASCII art, use clean text - Update version: 0.2.0 -> 0.2.4 in os-release, motd, config - Reduce filesystem_size: 1536 -> 512 MiB - Add ABSOLUTE RULE to AGENTS.md: never delete/ignore packages - Reduce pcid scheme log verbosity: info -> debug
This commit is contained in:
@@ -0,0 +1,141 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#ifndef _LINUX_POLL_H
|
||||
#define _LINUX_POLL_H
|
||||
|
||||
|
||||
#include <linux/compiler.h>
|
||||
#include <linux/ktime.h>
|
||||
#include <linux/wait.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/uaccess.h>
|
||||
#include <uapi/linux/poll.h>
|
||||
#include <uapi/linux/eventpoll.h>
|
||||
|
||||
/* ~832 bytes of stack space used max in sys_select/sys_poll before allocating
|
||||
additional memory. */
|
||||
#define MAX_STACK_ALLOC 832
|
||||
#define FRONTEND_STACK_ALLOC 256
|
||||
#define SELECT_STACK_ALLOC FRONTEND_STACK_ALLOC
|
||||
#define POLL_STACK_ALLOC FRONTEND_STACK_ALLOC
|
||||
#define WQUEUES_STACK_ALLOC (MAX_STACK_ALLOC - FRONTEND_STACK_ALLOC)
|
||||
#define N_INLINE_POLL_ENTRIES (WQUEUES_STACK_ALLOC / sizeof(struct poll_table_entry))
|
||||
|
||||
#define DEFAULT_POLLMASK (EPOLLIN | EPOLLOUT | EPOLLRDNORM | EPOLLWRNORM)
|
||||
|
||||
struct poll_table_struct;
|
||||
|
||||
/*
|
||||
* structures and helpers for f_op->poll implementations
|
||||
*/
|
||||
typedef void (*poll_queue_proc)(struct file *, wait_queue_head_t *, struct poll_table_struct *);
|
||||
|
||||
/*
|
||||
* Do not touch the structure directly, use the access function
|
||||
* poll_requested_events() instead.
|
||||
*/
|
||||
typedef struct poll_table_struct {
|
||||
poll_queue_proc _qproc;
|
||||
__poll_t _key;
|
||||
} poll_table;
|
||||
|
||||
static inline void poll_wait(struct file * filp, wait_queue_head_t * wait_address, poll_table *p)
|
||||
{
|
||||
if (p && p->_qproc) {
|
||||
p->_qproc(filp, wait_address, p);
|
||||
/*
|
||||
* This memory barrier is paired in the wq_has_sleeper().
|
||||
* See the comment above prepare_to_wait(), we need to
|
||||
* ensure that subsequent tests in this thread can't be
|
||||
* reordered with __add_wait_queue() in _qproc() paths.
|
||||
*/
|
||||
smp_mb();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Return the set of events that the application wants to poll for.
|
||||
* This is useful for drivers that need to know whether a DMA transfer has
|
||||
* to be started implicitly on poll(). You typically only want to do that
|
||||
* if the application is actually polling for POLLIN and/or POLLOUT.
|
||||
*/
|
||||
static inline __poll_t poll_requested_events(const poll_table *p)
|
||||
{
|
||||
return p ? p->_key : ~(__poll_t)0;
|
||||
}
|
||||
|
||||
static inline void init_poll_funcptr(poll_table *pt, poll_queue_proc qproc)
|
||||
{
|
||||
pt->_qproc = qproc;
|
||||
pt->_key = ~(__poll_t)0; /* all events enabled */
|
||||
}
|
||||
|
||||
static inline bool file_can_poll(struct file *file)
|
||||
{
|
||||
return file->f_op->poll;
|
||||
}
|
||||
|
||||
static inline __poll_t vfs_poll(struct file *file, struct poll_table_struct *pt)
|
||||
{
|
||||
if (unlikely(!file->f_op->poll))
|
||||
return DEFAULT_POLLMASK;
|
||||
return file->f_op->poll(file, pt);
|
||||
}
|
||||
|
||||
struct poll_table_entry {
|
||||
struct file *filp;
|
||||
__poll_t key;
|
||||
wait_queue_entry_t wait;
|
||||
wait_queue_head_t *wait_address;
|
||||
};
|
||||
|
||||
/*
|
||||
* Structures and helpers for select/poll syscall
|
||||
*/
|
||||
struct poll_wqueues {
|
||||
poll_table pt;
|
||||
struct poll_table_page *table;
|
||||
struct task_struct *polling_task;
|
||||
int triggered;
|
||||
int error;
|
||||
int inline_index;
|
||||
struct poll_table_entry inline_entries[N_INLINE_POLL_ENTRIES];
|
||||
};
|
||||
|
||||
extern void poll_initwait(struct poll_wqueues *pwq);
|
||||
extern void poll_freewait(struct poll_wqueues *pwq);
|
||||
extern u64 select_estimate_accuracy(struct timespec64 *tv);
|
||||
|
||||
#define MAX_INT64_SECONDS (((s64)(~((u64)0)>>1)/HZ)-1)
|
||||
|
||||
extern int core_sys_select(int n, fd_set __user *inp, fd_set __user *outp,
|
||||
fd_set __user *exp, struct timespec64 *end_time);
|
||||
|
||||
extern int poll_select_set_timeout(struct timespec64 *to, time64_t sec,
|
||||
long nsec);
|
||||
|
||||
#define __MAP(v, from, to) \
|
||||
(from < to ? (v & from) * (to/from) : (v & from) / (from/to))
|
||||
|
||||
static inline __u16 mangle_poll(__poll_t val)
|
||||
{
|
||||
__u16 v = (__force __u16)val;
|
||||
#define M(X) __MAP(v, (__force __u16)EPOLL##X, POLL##X)
|
||||
return M(IN) | M(OUT) | M(PRI) | M(ERR) | M(NVAL) |
|
||||
M(RDNORM) | M(RDBAND) | M(WRNORM) | M(WRBAND) |
|
||||
M(HUP) | M(RDHUP) | M(MSG);
|
||||
#undef M
|
||||
}
|
||||
|
||||
static inline __poll_t demangle_poll(u16 val)
|
||||
{
|
||||
#define M(X) (__force __poll_t)__MAP(val, POLL##X, (__force __u16)EPOLL##X)
|
||||
return M(IN) | M(OUT) | M(PRI) | M(ERR) | M(NVAL) |
|
||||
M(RDNORM) | M(RDBAND) | M(WRNORM) | M(WRBAND) |
|
||||
M(HUP) | M(RDHUP) | M(MSG);
|
||||
#undef M
|
||||
}
|
||||
#undef __MAP
|
||||
|
||||
|
||||
#endif /* _LINUX_POLL_H */
|
||||
Reference in New Issue
Block a user