# Copyright 2019 syzkaller project authors. All rights reserved.
# Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.

include <linux/fcntl.h>
include <linux/ioctl.h>
include <uapi/linux/watch_queue.h>

resource fd_watch_queue[fd]

openat$watch_queue(fd const[AT_FDCWD], file ptr[in, string["/dev/fd_watch_queue"]], flags flags[open_flags], mode const[0]) fd_watch_queue
mmap$watch_queue(addr vma, len len[addr], prot flags[mmap_prot], flags flags[mmap_flags], fd fd_watch_queue, offset const[0])
ioctl$IOC_WATCH_QUEUE_SET_SIZE(fd fd_watch_queue, cmd const[IOC_WATCH_QUEUE_SET_SIZE], arg flags[watch_queue_size])
ioctl$IOC_WATCH_QUEUE_SET_FILTER(fd fd_watch_queue, cmd const[IOC_WATCH_QUEUE_SET_FILTER], arg ptr[in, watch_notification_filter])

watch_devices(watch_fd fd_watch_queue, watch_id intptr[-1:0xff], flags const[0])

watch_notification_filter {
	nr_filters	len[filters, int32]
	__reserved	const[0, int32]
	filters		array[watch_notification_type_filter]
}

watch_notification_type_filter {
	type		int32
	info_filter	int32
	info_mask	int32
	subtype_filter	array[int32, 8]
}

watch_queue_size = 1, 2, 4, 8, 16
_ = __NR_mmap2
