* [git pull] vfs.git: poll annotations
@ 2018-01-30 18:39 Al Viro
2018-01-31 2:21 ` Linus Torvalds
0 siblings, 1 reply; 7+ messages in thread
From: Al Viro @ 2018-01-30 18:39 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-kernel, linux-fsdevel, linux-arch
Introduces a __bitwise type for POLL... bitmap, propagates
the annotations through the tree. Most of that stuff is as simple
as "make ->poll() instances return __poll_t and do the same to local
variables used to hold the future return value".
Some of the obvious brainos found in process are fixed (e.g.
POLLIN misspelled as POLL_IN). At that point the amount of sparse
warnings is low and most of them are for genuine bugs - e.g. ->poll()
instance deciding to return -EINVAL instead of a bitmap. I hadn't
touched those in this series - it's large enough as it is.
Another problem it has caught was eventpoll() ABI mess; select.c
and eventpoll.c assumed that corresponding POLL... and EPOLL... were equal.
That's true for some, but not all of them - EPOLL... are arch-independent,
but POLL... are not. The last commit in this series separates userland
POLL... values from the (now arch-independent) kernel-side ones, converting
between them in the few places where they are copied to/from userland.
AFAICS, this is the least disruptive fix preserving poll(2) ABI and
making epoll() work on all architectures. As it is, it's simply broken
on sparc - try to give it EPOLLWRNORM and it will trigger only on what
would've triggered EPOLLWRBAND on other architectures. EPOLLWRBAND
and EPOLLRDHUP, OTOH, are never triggered at all on sparc. With this
patch they should work consistently on all architectures.
This branch has sat in -next for the last cycle; it has accumulated
minor conflicts, but nothing non-trivial.
The following changes since commit 4fbd8d194f06c8a3fd2af1ce560ddb31f7ec8323:
Linux 4.15-rc1 (2017-11-26 16:01:47 -0800)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs.git misc.poll
for you to fetch changes up to c71d227fc4133f949dae620ed5e3a250b43f2415:
make kernel-side POLL... arch-independent (2017-11-29 19:00:41 -0500)
----------------------------------------------------------------
Al Viro (37):
orangefs: fix a braino in ->poll()
um: make sure to have generated headers for target
switch wrapper poll.h instances to generic-y
define __poll_t, annotate constants
->poll() methods should return __poll_t
anntotate the places where ->poll() return values go
annotate poll-related wait keys
annotate poll_table_struct ->_key
annotate poll_table_entry->key
scif: annotate scif_pollepd
vhost: annotate vhost_poll
dmabuf: annotate dma_buf->active
cris: annotate ->poll() instances
ia64: annotate ->poll() instances
mips: annotate ->poll() instances
ppc: annotate ->poll() instances
um: annotate ->poll() instances
x86: annotate ->poll() instances
block: annotate ->poll() instances
crypto: annotate ->poll() instances
acpi: annotate ->poll() instances
sound: annotate ->poll() instances
tomoyo: annotate ->poll() instances
apparmor: annotate ->poll() instances
net: annotate ->poll() instances
ipc, kernel, mm: annotate ->poll() instances
fs: annotate ->poll() instances
media: annotate ->poll() instances
the rest of drivers/*: annotate ->poll() instances
ring_buffer_poll_wait() return value used as return value of ->poll()
->si_band gets POLL... bitmap stored into a user-visible long field
9p: untangle ->poll() mess
annotate poll(2) guts
debugging printk in sg_poll() uses %x to print POLL... bitmap
eventpoll: constify struct epoll_event pointers
eventpoll: no need to mask the result of epi_item_poll() again
make kernel-side POLL... arch-independent
arch/alpha/include/uapi/asm/Kbuild | 2 +
arch/alpha/include/uapi/asm/poll.h | 2 -
arch/blackfin/include/uapi/asm/poll.h | 21 +++++++-
arch/cris/arch-v10/drivers/gpio.c | 6 +--
arch/cris/arch-v10/drivers/sync_serial.c | 8 +--
arch/cris/arch-v32/drivers/sync_serial.c | 8 +--
arch/frv/include/uapi/asm/poll.h | 21 ++++++--
arch/ia64/include/uapi/asm/Kbuild | 1 +
arch/ia64/include/uapi/asm/poll.h | 2 -
arch/ia64/kernel/perfmon.c | 4 +-
arch/m32r/include/uapi/asm/Kbuild | 1 +
arch/m32r/include/uapi/asm/poll.h | 2 -
arch/m68k/include/uapi/asm/poll.h | 19 ++++++-
arch/mips/include/uapi/asm/poll.h | 19 ++++++-
arch/mips/kernel/rtlx.c | 4 +-
arch/mn10300/include/uapi/asm/Kbuild | 1 +
arch/mn10300/include/uapi/asm/poll.h | 2 -
arch/powerpc/kernel/rtasd.c | 2 +-
arch/powerpc/platforms/cell/spufs/backing_ops.c | 6 +--
arch/powerpc/platforms/cell/spufs/file.c | 16 +++---
arch/powerpc/platforms/cell/spufs/hw_ops.c | 5 +-
arch/powerpc/platforms/cell/spufs/spufs.h | 3 +-
arch/powerpc/platforms/powernv/opal-prd.c | 2 +-
arch/score/include/uapi/asm/Kbuild | 1 +
arch/score/include/uapi/asm/poll.h | 7 ---
arch/sparc/include/uapi/asm/poll.h | 28 ++++++++--
arch/um/Makefile | 7 +++
arch/um/drivers/hostaudio_kern.c | 6 +--
arch/x86/include/uapi/asm/Kbuild | 1 +
arch/x86/include/uapi/asm/poll.h | 1 -
arch/x86/kernel/apm_32.c | 2 +-
arch/x86/kernel/cpu/mcheck/dev-mcelog.c | 2 +-
arch/xtensa/include/uapi/asm/poll.h | 21 +++++++-
block/bsg.c | 4 +-
crypto/af_alg.c | 4 +-
crypto/algif_skcipher.c | 1 -
drivers/acpi/acpi_dbg.c | 4 +-
drivers/android/binder.c | 2 +-
drivers/bluetooth/hci_ldisc.c | 2 +-
drivers/bluetooth/hci_vhci.c | 2 +-
drivers/char/apm-emulation.c | 2 +-
drivers/char/dsp56k.c | 2 +-
drivers/char/dtlk.c | 6 +--
drivers/char/hpet.c | 2 +-
drivers/char/ipmi/bt-bmc.c | 4 +-
drivers/char/ipmi/ipmi_devintf.c | 4 +-
drivers/char/ipmi/ipmi_watchdog.c | 4 +-
drivers/char/pcmcia/cm4040_cs.c | 4 +-
drivers/char/ppdev.c | 4 +-
drivers/char/random.c | 4 +-
drivers/char/rtc.c | 4 +-
drivers/char/snsc.c | 4 +-
drivers/char/sonypi.c | 2 +-
drivers/char/tpm/tpm_vtpm_proxy.c | 4 +-
drivers/char/virtio_console.c | 4 +-
drivers/char/xillybus/xillybus_core.c | 4 +-
drivers/dma-buf/dma-buf.c | 6 +--
drivers/dma-buf/sync_file.c | 2 +-
drivers/firewire/core-cdev.c | 4 +-
drivers/firewire/nosy.c | 4 +-
drivers/gpio/gpiolib.c | 4 +-
drivers/gpu/drm/drm_file.c | 4 +-
drivers/gpu/drm/i915/i915_perf.c | 8 +--
drivers/gpu/drm/vmwgfx/vmwgfx_drv.h | 2 +-
drivers/gpu/drm/vmwgfx/vmwgfx_ioctl.c | 2 +-
drivers/gpu/vga/vgaarb.c | 2 +-
drivers/hid/hid-debug.c | 2 +-
drivers/hid/hid-roccat.c | 2 +-
drivers/hid/hid-sensor-custom.c | 4 +-
drivers/hid/hidraw.c | 2 +-
drivers/hid/uhid.c | 2 +-
drivers/hid/usbhid/hiddev.c | 2 +-
drivers/hsi/clients/cmt_speech.c | 4 +-
drivers/hv/hv_utils_transport.c | 2 +-
drivers/iio/iio_core.h | 2 +-
drivers/iio/industrialio-buffer.c | 2 +-
drivers/iio/industrialio-event.c | 4 +-
drivers/infiniband/core/ucm.c | 4 +-
drivers/infiniband/core/ucma.c | 4 +-
drivers/infiniband/core/user_mad.c | 4 +-
drivers/infiniband/core/uverbs_main.c | 8 +--
drivers/infiniband/hw/hfi1/file_ops.c | 18 +++----
drivers/infiniband/hw/qib/qib_file_ops.c | 14 ++---
drivers/input/evdev.c | 4 +-
drivers/input/input.c | 2 +-
drivers/input/joydev.c | 2 +-
drivers/input/misc/hp_sdc_rtc.c | 2 +-
drivers/input/misc/uinput.c | 2 +-
drivers/input/mousedev.c | 4 +-
drivers/input/serio/serio_raw.c | 4 +-
drivers/input/serio/userio.c | 2 +-
drivers/isdn/capi/capi.c | 4 +-
drivers/isdn/divert/divert_procfs.c | 4 +-
drivers/isdn/hardware/eicon/divamnt.c | 4 +-
drivers/isdn/hardware/eicon/divasi.c | 4 +-
drivers/isdn/hardware/eicon/divasmain.c | 2 +-
drivers/isdn/hardware/eicon/divasproc.c | 2 +-
drivers/isdn/hysdn/hysdn_proclog.c | 4 +-
drivers/isdn/i4l/isdn_common.c | 4 +-
drivers/isdn/i4l/isdn_ppp.c | 4 +-
drivers/isdn/i4l/isdn_ppp.h | 2 +-
drivers/isdn/mISDN/timerdev.c | 4 +-
drivers/leds/uleds.c | 2 +-
drivers/macintosh/smu.c | 4 +-
drivers/macintosh/via-pmu.c | 4 +-
drivers/mailbox/mailbox-test.c | 2 +-
drivers/md/dm-ioctl.c | 4 +-
drivers/md/md.c | 4 +-
drivers/media/cec/cec-api.c | 4 +-
drivers/media/common/saa7146/saa7146_fops.c | 8 +--
drivers/media/common/siano/smsdvb-debugfs.c | 7 +--
drivers/media/dvb-core/dmxdev.c | 8 +--
drivers/media/dvb-core/dvb_ca_en50221.c | 4 +-
drivers/media/dvb-core/dvb_frontend.c | 2 +-
drivers/media/firewire/firedtv-ci.c | 2 +-
drivers/media/media-devnode.c | 2 +-
drivers/media/pci/bt8xx/bttv-driver.c | 12 ++---
drivers/media/pci/cx18/cx18-fileops.c | 8 +--
drivers/media/pci/cx18/cx18-fileops.h | 2 +-
drivers/media/pci/ddbridge/ddbridge-core.c | 4 +-
drivers/media/pci/ivtv/ivtv-fileops.c | 10 ++--
drivers/media/pci/ivtv/ivtv-fileops.h | 4 +-
drivers/media/pci/meye/meye.c | 4 +-
drivers/media/pci/saa7134/saa7134-video.c | 4 +-
drivers/media/pci/saa7164/saa7164-encoder.c | 6 +--
drivers/media/pci/saa7164/saa7164-vbi.c | 4 +-
drivers/media/pci/ttpci/av7110_av.c | 8 +--
drivers/media/pci/ttpci/av7110_ca.c | 4 +-
drivers/media/pci/zoran/zoran_driver.c | 4 +-
drivers/media/platform/davinci/vpfe_capture.c | 2 +-
drivers/media/platform/exynos-gsc/gsc-m2m.c | 4 +-
drivers/media/platform/fsl-viu.c | 6 +--
drivers/media/platform/m2m-deinterlace.c | 4 +-
drivers/media/platform/mx2_emmaprp.c | 4 +-
drivers/media/platform/omap/omap_vout.c | 2 +-
drivers/media/platform/omap3isp/ispvideo.c | 4 +-
drivers/media/platform/s3c-camif/camif-capture.c | 4 +-
drivers/media/platform/s5p-mfc/s5p_mfc.c | 4 +-
drivers/media/platform/sh_veu.c | 2 +-
.../platform/soc_camera/sh_mobile_ceu_camera.c | 2 +-
drivers/media/platform/soc_camera/soc_camera.c | 4 +-
drivers/media/platform/via-camera.c | 2 +-
drivers/media/platform/vivid/vivid-core.c | 2 +-
drivers/media/platform/vivid/vivid-radio-rx.c | 2 +-
drivers/media/platform/vivid/vivid-radio-rx.h | 2 +-
drivers/media/platform/vivid/vivid-radio-tx.c | 2 +-
drivers/media/platform/vivid/vivid-radio-tx.h | 2 +-
drivers/media/radio/radio-cadet.c | 6 +--
drivers/media/radio/radio-si476x.c | 6 +--
drivers/media/radio/radio-wl1273.c | 2 +-
drivers/media/radio/si470x/radio-si470x-common.c | 6 +--
drivers/media/radio/wl128x/fmdrv_v4l2.c | 2 +-
drivers/media/rc/lirc_dev.c | 4 +-
drivers/media/usb/cpia2/cpia2.h | 2 +-
drivers/media/usb/cpia2/cpia2_core.c | 4 +-
drivers/media/usb/cpia2/cpia2_v4l.c | 4 +-
drivers/media/usb/cx231xx/cx231xx-417.c | 6 +--
drivers/media/usb/cx231xx/cx231xx-video.c | 6 +--
drivers/media/usb/gspca/gspca.c | 6 +--
drivers/media/usb/hdpvr/hdpvr-video.c | 6 +--
drivers/media/usb/pvrusb2/pvrusb2-v4l2.c | 4 +-
drivers/media/usb/stkwebcam/stk-webcam.c | 4 +-
drivers/media/usb/tm6000/tm6000-video.c | 10 ++--
drivers/media/usb/uvc/uvc_queue.c | 4 +-
drivers/media/usb/uvc/uvc_v4l2.c | 2 +-
drivers/media/usb/uvc/uvcvideo.h | 2 +-
drivers/media/usb/zr364xx/zr364xx.c | 4 +-
drivers/media/v4l2-core/v4l2-ctrls.c | 2 +-
drivers/media/v4l2-core/v4l2-dev.c | 4 +-
drivers/media/v4l2-core/v4l2-mem2mem.c | 10 ++--
drivers/media/v4l2-core/v4l2-subdev.c | 2 +-
drivers/media/v4l2-core/videobuf-core.c | 6 +--
drivers/media/v4l2-core/videobuf2-core.c | 4 +-
drivers/media/v4l2-core/videobuf2-v4l2.c | 10 ++--
drivers/misc/cxl/api.c | 2 +-
drivers/misc/cxl/cxl.h | 2 +-
drivers/misc/cxl/file.c | 4 +-
drivers/misc/hpilo.c | 2 +-
drivers/misc/lis3lv02d/lis3lv02d.c | 2 +-
drivers/misc/mei/main.c | 6 +--
drivers/misc/mic/scif/scif_api.c | 7 +--
drivers/misc/mic/scif/scif_epd.h | 2 +-
drivers/misc/mic/scif/scif_fd.c | 2 +-
drivers/misc/mic/vop/vop_vringh.c | 4 +-
drivers/misc/phantom.c | 4 +-
drivers/misc/vmw_vmci/vmci_host.c | 4 +-
drivers/net/ieee802154/ca8210.c | 4 +-
drivers/net/ppp/ppp_async.c | 2 +-
drivers/net/ppp/ppp_generic.c | 4 +-
drivers/net/ppp/ppp_synctty.c | 2 +-
drivers/net/tap.c | 4 +-
drivers/net/tun.c | 4 +-
drivers/net/wan/cosa.c | 2 +-
drivers/net/wireless/ralink/rt2x00/rt2x00debug.c | 2 +-
drivers/pci/switch/switchtec.c | 4 +-
drivers/platform/chrome/cros_ec_debugfs.c | 4 +-
drivers/platform/goldfish/goldfish_pipe.c | 4 +-
drivers/platform/x86/sony-laptop.c | 2 +-
drivers/pps/pps.c | 2 +-
drivers/ptp/ptp_chardev.c | 2 +-
drivers/ptp/ptp_private.h | 2 +-
drivers/rapidio/devices/rio_mport_cdev.c | 2 +-
drivers/rpmsg/qcom_smd.c | 4 +-
drivers/rpmsg/rpmsg_char.c | 4 +-
drivers/rpmsg/rpmsg_core.c | 2 +-
drivers/rpmsg/rpmsg_internal.h | 2 +-
drivers/rtc/rtc-dev.c | 2 +-
drivers/s390/block/dasd_eer.c | 4 +-
drivers/s390/char/monreader.c | 2 +-
drivers/scsi/megaraid/megaraid_sas_base.c | 4 +-
drivers/scsi/mpt3sas/mpt3sas_ctl.c | 2 +-
drivers/scsi/sg.c | 6 +--
drivers/staging/comedi/comedi_fops.c | 4 +-
drivers/staging/comedi/drivers/serial2002.c | 2 +-
drivers/staging/irda/net/af_irda.c | 4 +-
drivers/staging/irda/net/irnet/irnet_ppp.c | 8 +--
drivers/staging/irda/net/irnet/irnet_ppp.h | 2 +-
.../media/atomisp/pci/atomisp2/atomisp_fops.c | 2 +-
drivers/staging/media/bcm2048/radio-bcm2048.c | 4 +-
drivers/staging/media/davinci_vpfe/vpfe_video.c | 2 +-
drivers/staging/media/lirc/lirc_zilog.c | 4 +-
drivers/staging/media/omap4iss/iss_video.c | 2 +-
drivers/staging/most/aim-cdev/cdev.c | 4 +-
drivers/staging/most/aim-v4l2/video.c | 4 +-
drivers/staging/speakup/speakup_soft.c | 4 +-
drivers/tty/n_gsm.c | 4 +-
drivers/tty/n_hdlc.c | 6 +--
drivers/tty/n_r3964.c | 6 +--
drivers/tty/n_tty.c | 4 +-
drivers/tty/tty_io.c | 8 +--
drivers/tty/vt/vc_screen.c | 4 +-
drivers/uio/uio.c | 2 +-
drivers/usb/class/cdc-wdm.c | 4 +-
drivers/usb/class/usblp.c | 4 +-
drivers/usb/class/usbtmc.c | 4 +-
drivers/usb/core/devices.c | 2 +-
drivers/usb/core/devio.c | 4 +-
drivers/usb/gadget/function/f_fs.c | 4 +-
drivers/usb/gadget/function/f_hid.c | 4 +-
drivers/usb/gadget/function/f_printer.c | 4 +-
drivers/usb/gadget/function/uvc_queue.c | 2 +-
drivers/usb/gadget/function/uvc_queue.h | 2 +-
drivers/usb/gadget/function/uvc_v4l2.c | 2 +-
drivers/usb/gadget/legacy/inode.c | 4 +-
drivers/usb/misc/iowarrior.c | 4 +-
drivers/usb/misc/ldusb.c | 4 +-
drivers/usb/misc/legousbtower.c | 6 +--
drivers/usb/mon/mon_bin.c | 4 +-
drivers/vfio/virqfd.c | 4 +-
drivers/vhost/net.c | 2 +-
drivers/vhost/vhost.c | 12 ++---
drivers/vhost/vhost.h | 6 +--
drivers/virt/fsl_hypervisor.c | 4 +-
drivers/xen/evtchn.c | 4 +-
drivers/xen/mcelog.c | 2 +-
drivers/xen/pvcalls-front.c | 10 ++--
drivers/xen/xenbus/xenbus_dev_frontend.c | 2 +-
fs/cachefiles/daemon.c | 6 +--
fs/coda/psdev.c | 4 +-
fs/debugfs/file.c | 4 +-
fs/dlm/plock.c | 4 +-
fs/dlm/user.c | 2 +-
fs/ecryptfs/miscdev.c | 4 +-
fs/eventfd.c | 4 +-
fs/eventpoll.c | 28 +++++-----
fs/fcntl.c | 4 +-
fs/fuse/dev.c | 4 +-
fs/fuse/file.c | 6 +--
fs/fuse/fuse_i.h | 2 +-
fs/kernfs/file.c | 2 +-
fs/notify/fanotify/fanotify_user.c | 4 +-
fs/notify/inotify/inotify_user.c | 4 +-
fs/ocfs2/dlmfs/dlmfs.c | 4 +-
fs/orangefs/devorangefs-req.c | 6 +--
fs/pipe.c | 4 +-
fs/proc/inode.c | 6 +--
fs/proc/kmsg.c | 2 +-
fs/proc/proc_sysctl.c | 4 +-
fs/proc_namespace.c | 4 +-
fs/select.c | 27 ++++++----
fs/signalfd.c | 4 +-
fs/timerfd.c | 4 +-
fs/userfaultfd.c | 4 +-
include/crypto/if_alg.h | 2 +-
include/drm/drm_file.h | 2 +-
include/linux/dma-buf.h | 2 +-
include/linux/fs.h | 2 +-
include/linux/net.h | 2 +-
include/linux/poll.h | 10 ++--
include/linux/posix-clock.h | 2 +-
include/linux/ring_buffer.h | 2 +-
include/linux/rpmsg.h | 4 +-
include/linux/scif.h | 4 +-
include/linux/skbuff.h | 2 +-
include/linux/tty_ldisc.h | 2 +-
include/linux/wait.h | 10 ++--
include/media/lirc_dev.h | 2 +-
include/media/media-devnode.h | 2 +-
include/media/soc_camera.h | 2 +-
include/media/v4l2-ctrls.h | 2 +-
include/media/v4l2-dev.h | 2 +-
include/media/v4l2-mem2mem.h | 4 +-
include/media/videobuf-core.h | 2 +-
include/media/videobuf2-core.h | 2 +-
include/media/videobuf2-v4l2.h | 5 +-
include/misc/cxl.h | 2 +-
include/net/bluetooth/bluetooth.h | 2 +-
include/net/inet_connection_sock.h | 2 +-
include/net/iucv/af_iucv.h | 2 +-
include/net/sctp/sctp.h | 2 +-
include/net/sock.h | 2 +-
include/net/tcp.h | 2 +-
include/net/udp.h | 2 +-
include/sound/hwdep.h | 2 +-
include/sound/info.h | 2 +-
include/uapi/asm-generic/poll.h | 44 ++++++++++------
include/uapi/linux/types.h | 6 +++
ipc/mqueue.c | 4 +-
kernel/events/core.c | 4 +-
kernel/printk/printk.c | 4 +-
kernel/relay.c | 4 +-
kernel/time/posix-clock.c | 4 +-
kernel/trace/ring_buffer.c | 2 +-
kernel/trace/trace.c | 6 +--
mm/memcontrol.c | 2 +-
mm/swapfile.c | 2 +-
net/9p/trans_fd.c | 60 +++++++++++-----------
net/atm/common.c | 4 +-
net/atm/common.h | 2 +-
net/batman-adv/icmp_socket.c | 2 +-
net/batman-adv/log.c | 2 +-
net/bluetooth/af_bluetooth.c | 6 +--
net/caif/caif_socket.c | 4 +-
net/core/datagram.c | 8 ++-
net/core/sock.c | 2 +-
net/dccp/dccp.h | 2 +-
net/dccp/proto.c | 4 +-
net/decnet/af_decnet.c | 4 +-
net/ipv4/tcp.c | 4 +-
net/ipv4/udp.c | 4 +-
net/iucv/af_iucv.c | 6 +--
net/nfc/llcp_sock.c | 6 +--
net/nfc/nci/uart.c | 2 +-
net/packet/af_packet.c | 4 +-
net/phonet/socket.c | 4 +-
net/rds/af_rds.c | 4 +-
net/rfkill/core.c | 4 +-
net/rxrpc/af_rxrpc.c | 4 +-
net/sctp/socket.c | 4 +-
net/smc/af_smc.c | 6 +--
net/socket.c | 6 +--
net/sunrpc/cache.c | 8 +--
net/sunrpc/rpc_pipe.c | 4 +-
net/tipc/socket.c | 4 +-
net/unix/af_unix.c | 15 +++---
net/vmw_vsock/af_vsock.c | 4 +-
security/apparmor/apparmorfs.c | 4 +-
security/tomoyo/audit.c | 2 +-
security/tomoyo/common.c | 4 +-
security/tomoyo/common.h | 6 +--
security/tomoyo/securityfs_if.c | 2 +-
sound/core/compress_offload.c | 6 +--
sound/core/control.c | 4 +-
sound/core/hwdep.c | 2 +-
sound/core/info.c | 4 +-
sound/core/init.c | 2 +-
sound/core/oss/pcm_oss.c | 4 +-
sound/core/pcm_native.c | 8 +--
sound/core/rawmidi.c | 4 +-
sound/core/seq/oss/seq_oss.c | 4 +-
sound/core/seq/oss/seq_oss_device.h | 2 +-
sound/core/seq/oss/seq_oss_rw.c | 4 +-
sound/core/seq/seq_clientmgr.c | 4 +-
sound/core/timer.c | 4 +-
sound/firewire/bebob/bebob_hwdep.c | 4 +-
sound/firewire/dice/dice-hwdep.c | 4 +-
sound/firewire/digi00x/digi00x-hwdep.c | 4 +-
sound/firewire/fireface/ff-hwdep.c | 4 +-
sound/firewire/fireworks/fireworks_hwdep.c | 4 +-
sound/firewire/motu/motu-hwdep.c | 4 +-
sound/firewire/oxfw/oxfw-hwdep.c | 4 +-
sound/firewire/tascam/tascam-hwdep.c | 4 +-
sound/oss/dmasound/dmasound_core.c | 4 +-
sound/usb/mixer_quirks.c | 2 +-
sound/usb/usx2y/us122l.c | 4 +-
sound/usb/usx2y/usX2Yhwdep.c | 4 +-
virt/kvm/eventfd.c | 4 +-
387 files changed, 929 insertions(+), 810 deletions(-)
delete mode 100644 arch/alpha/include/uapi/asm/poll.h
delete mode 100644 arch/ia64/include/uapi/asm/poll.h
delete mode 100644 arch/m32r/include/uapi/asm/poll.h
delete mode 100644 arch/mn10300/include/uapi/asm/poll.h
delete mode 100644 arch/score/include/uapi/asm/poll.h
delete mode 100644 arch/x86/include/uapi/asm/poll.h
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [git pull] vfs.git: poll annotations
2018-01-30 18:39 [git pull] vfs.git: poll annotations Al Viro
@ 2018-01-31 2:21 ` Linus Torvalds
2018-01-31 3:13 ` Al Viro
0 siblings, 1 reply; 7+ messages in thread
From: Linus Torvalds @ 2018-01-31 2:21 UTC (permalink / raw)
To: Al Viro; +Cc: Linux Kernel Mailing List, linux-fsdevel, linux-arch
On Tue, Jan 30, 2018 at 10:39 AM, Al Viro <viro@zeniv.linux.org.uk> wrote:
> Introduces a __bitwise type for POLL... bitmap, propagates
> the annotations through the tree.
Ok, I'm not entirely happy with this.
I don't think the mangle/demangle_poll() stuff should be in the uapi
headers, and it really worries me that we use the same names - with
different values - for the kernel and user versions of the POLLxyz
macros.
So honestly, like the structure translations we do (ie termios <->
ktermios, stat <-> kstat), I really think we'd be better off having
explicit naming when some kernel data is different from user data.
That could make the mangling be automated too, ie assuming gcc gets it
right, maybe done with
#define pollmask_to_kernel(uval, UMASK, KMASK) \
((force __poll_t)(((uval)&UMASK)/UMASK*KMASK))
static inline __poll_t unmangle_poll(unsigned int uval)
{
return pollmask_to_kernel(uval, POLLIN, KPOLLIN) |
pollmask_to_kernel(uval, POLLOUT, KPOLLOUT) |
pollmask_to_kernel(uval, POLLERR, KPOLLERR) |
...
or similar. With no arch-specific hardcoded bit knowledge except for
the actual values of POLLIN/etc.
I dunno. Maybe it ends up being too painful.
So I've pulled this, but I just wanted to state that I'm not entirely
happy about it all.
Linus
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [git pull] vfs.git: poll annotations
2018-01-31 2:21 ` Linus Torvalds
@ 2018-01-31 3:13 ` Al Viro
2018-01-31 3:19 ` Linus Torvalds
0 siblings, 1 reply; 7+ messages in thread
From: Al Viro @ 2018-01-31 3:13 UTC (permalink / raw)
To: Linus Torvalds; +Cc: Linux Kernel Mailing List, linux-fsdevel, linux-arch
On Tue, Jan 30, 2018 at 06:21:37PM -0800, Linus Torvalds wrote:
> On Tue, Jan 30, 2018 at 10:39 AM, Al Viro <viro@zeniv.linux.org.uk> wrote:
> > Introduces a __bitwise type for POLL... bitmap, propagates
> > the annotations through the tree.
>
> Ok, I'm not entirely happy with this.
>
> I don't think the mangle/demangle_poll() stuff should be in the uapi
> headers, and it really worries me that we use the same names - with
> different values - for the kernel and user versions of the POLLxyz
> macros.
I'm not happy with that either, but the alternative would be to
rename almost every instance of POLL... in the tree. All of them
except for poll.h, actually. And then keep playing whack-a-mole
for resurfacing POLL... in drivers.
Sure, we can do that, but at least let's do that as a single
search-and-replace job in -rc1. Too many conflicts otherwise.
No need to invent KPOLLIN et.al. - we have perfectly usable
EPOLLIN and friends.
A bit of a problem in places like
mask & POLLOUT ? "POLLOUT" : "",
but it's not too terrible. I'll experiment a bit - should be able to
post a script to run.
As for the place for mangle/demangle... where would you prefer them?
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [git pull] vfs.git: poll annotations
2018-01-31 3:13 ` Al Viro
@ 2018-01-31 3:19 ` Linus Torvalds
2018-01-31 4:46 ` Al Viro
0 siblings, 1 reply; 7+ messages in thread
From: Linus Torvalds @ 2018-01-31 3:19 UTC (permalink / raw)
To: Al Viro; +Cc: Linux Kernel Mailing List, linux-fsdevel, linux-arch
On Tue, Jan 30, 2018 at 7:13 PM, Al Viro <viro@zeniv.linux.org.uk> wrote:
>
> As for the place for mangle/demangle... where would you prefer them?
If we can make gcc generate ok code for the generic case and not need
any arch-specific ones, why not just do in <linux/poll.h>?
(And I guess POLLIN/OUT/ERR are standard, so it's only a couple that
need to have potential help translating? That would make the helper
inline smaller and simpler)
Linus
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [git pull] vfs.git: poll annotations
2018-01-31 3:19 ` Linus Torvalds
@ 2018-01-31 4:46 ` Al Viro
2018-01-31 17:50 ` Al Viro
2018-02-01 22:00 ` Al Viro
0 siblings, 2 replies; 7+ messages in thread
From: Al Viro @ 2018-01-31 4:46 UTC (permalink / raw)
To: Linus Torvalds; +Cc: Linux Kernel Mailing List, linux-fsdevel, linux-arch
On Tue, Jan 30, 2018 at 07:19:19PM -0800, Linus Torvalds wrote:
> On Tue, Jan 30, 2018 at 7:13 PM, Al Viro <viro@zeniv.linux.org.uk> wrote:
> >
> > As for the place for mangle/demangle... where would you prefer them?
>
> If we can make gcc generate ok code for the generic case and not need
> any arch-specific ones, why not just do in <linux/poll.h>?
Umm... I'll try and see how well does that work.
> (And I guess POLLIN/OUT/ERR are standard, so it's only a couple that
> need to have potential help translating? That would make the helper
> inline smaller and simpler)
To quote a mail from last July:
|| common bfin,frv,m68k,mips xtensa sparc
||WRNORM bit 8 2 2 2
||WRBAND bit 9 8 8 8
||MSG bit 10 10 10 9
||REMOVE bit 12 12 11 10
||RDHUP bit 13 13 13 11
||
||Now, POLLREMOVE doesn't have EPOLL... equivalent, but others
||do. As the result, blackfin, frv, m68k, mips and xtensa have
||EPOLLWRNORM matching POLLWRBAND and EPOLLWRBAND not matching
||anything. sparc has EPOLLWRNORM matching POLLWRBAND, EPOLLWRBAND
||matching POLLMSG (and never triggered), EPOLLMSG matching POLLREMOVE
||(and also never triggered) and EPOLLRDHUP not matching anything.
||
||I don't believe that anything tries to use EPOLLMSG; EPOLLWRBAND
||and EPOLLWRNORM might be used (even though our manpage doesn't
||document either). EPOLLRDHUP _is_ documented and flat-out does
||not work on sparc; the only way to catch POLLRDHUP via epoll
||there is to give it a value that is not any of EPOLL... constants.
||Hell knows if anything tries to do it there...
MSG and REMOVE are never triggered, so it's all down to {WR{NORM,BAND},RDHUP}.
Logics for mangle should be uniform - lower 8 bits left as is,
EPOLLWRBAND -> POLLWRBAND, EPOLLWRNORM -> POLLWRNORM, EPOLLRDHUP -> POLLRDHUP.
For demangle it's
if POLLOUT != POLLWRNORM
pass as is
else
lower 8 bits left as-is,
if POLLOUT
add EPOLLWRNORM
POLLWRBAND -> EPOLLWRBAND
POLLRDHUP -> EPOLLRDHUP
Frankly, it's a bloody mess - we either shouldn't have bothered with separate
POLLRDNORM and POLLWRNORM at all (they should be equivalent to POLLIN and POLLOUT
resp.) or kept them separate on all architectures. What's more, we don't have
only one instance of POLLRDNORM that would not be a part of POLLIN | POLLRDNORM | ...
(modulo reordering). Its definition, that is. We do have a few instances of
->poll() that raise POLLIN without POLLRDNORM, but AFAICS they have only one
thing in common - "forgot to add POLLRDNORM or hadn't heard of it". The set is
pretty much random...
It started in 2.1.23pre1; looks like the original braindamage came from SunOS compat
(in 1.3.93) and got propagated into generic when poll(2) was implemented. Probably
we should've kept alpha and i386 POLL... definitions same as sparc ones... Anyway,
it's at least 20 years too late for that.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [git pull] vfs.git: poll annotations
2018-01-31 4:46 ` Al Viro
@ 2018-01-31 17:50 ` Al Viro
2018-02-01 22:00 ` Al Viro
1 sibling, 0 replies; 7+ messages in thread
From: Al Viro @ 2018-01-31 17:50 UTC (permalink / raw)
To: Linus Torvalds; +Cc: Linux Kernel Mailing List, linux-fsdevel, linux-arch
On Wed, Jan 31, 2018 at 04:46:20AM +0000, Al Viro wrote:
> MSG and REMOVE are never triggered, so it's all down to {WR{NORM,BAND},RDHUP}.
Actually, POLLREMOVE is an amusing story (FSVO amusing): it's a part of
UnixWare /dev/poll ABI. It had _not_ lasted in Linux - epoll_ctl()
EPOLL_CTL_DEL is used for the same purpose. Chronology:
Oct 29 2002: davidel introduces it into the tree (and defines for i386)
Oct 31 2002: jgarzik has noticed broken alpha build and added definition
within a few hours the same had been done for itanic (davidm)
afternoon of the same day: Alan's merge of v850 adds definition there
Nov 1 2002: rmk adds definition for arm
Nov 2 2002: anton does the same for ppc64
Nov 2 2002: ak does the same for amd64
Nov 2 2002: davidel removes the sole user of that thing.
But that, of course, does not stop the propagation of the (now and forever)
useless definition - the same day it infects m68k; next day it's
parisc and sparc. On Nov 8 it hits ppc32, Nov 17 - s390.
In June 2003 mips gets it, in July sh is brought in with that
thing already in it and the damn thing spreads to cris. And so it goes;
the last flash of infection had been in 2007 when asm-generic/poll.h
had been introduced.
Its only user has lasted in the tree for four days. Definitions
will probably stay forever...
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [git pull] vfs.git: poll annotations
2018-01-31 4:46 ` Al Viro
2018-01-31 17:50 ` Al Viro
@ 2018-02-01 22:00 ` Al Viro
1 sibling, 0 replies; 7+ messages in thread
From: Al Viro @ 2018-02-01 22:00 UTC (permalink / raw)
To: Linus Torvalds; +Cc: Linux Kernel Mailing List, linux-fsdevel, linux-arch
On Wed, Jan 31, 2018 at 04:46:20AM +0000, Al Viro wrote:
> On Tue, Jan 30, 2018 at 07:19:19PM -0800, Linus Torvalds wrote:
> > On Tue, Jan 30, 2018 at 7:13 PM, Al Viro <viro@zeniv.linux.org.uk> wrote:
> > >
> > > As for the place for mangle/demangle... where would you prefer them?
> >
> > If we can make gcc generate ok code for the generic case and not need
> > any arch-specific ones, why not just do in <linux/poll.h>?
>
> Umm... I'll try and see how well does that work.
FWIW, it does generate sane code and bulk rename itself is not hard.
What I've got is in vfs.git#work.poll:
smc: missing poll annotations
xen: fix poll misannotation
use linux/poll.h instead of asm/poll.h
add EPOLLNVAL, annotate EPOLL... and event_poll->event
preparation to switching ->poll() to returning EPOLL...
ep_send_events_proc(): return result via esed->res
annotate ep_scan_ready_list()
switch users of kernel-side POLL... to EPOLL...
unify {de,}mangle_poll(), get rid of kernel-side POLL...
The first 7 commits are preparation, then mechanical bulk rename with
for V in IN OUT PRI ERR RDNORM RDBAND WRNORM WRBAND HUP RDHUP NVAL MSG; do
L=`git grep -l -w POLL$V | grep -v '^t' | grep -v /um/ | grep -v '^sa' | grep -v '/poll.h$'|grep -v '^D'`
for f in $L; do sed -i "-es/^\([^\"]*\)\(\<POLL$V\>\)/\\1E\\2/" $f; done
done
then consolidation of mangle_poll/demangle_poll and making those
ifndef __KERNEL__ poll.h unconditional.
FWIW, with the entire series applied __poll_t warnings (with CF=-D__CHECK_POLL)
are down to the following:
* genuine bugs in ->poll() instances, of the "return -EINVAL/-ERESTARTSYS/etc."
sort -
kernel/trace/ring_buffer.c:643:32: expected restricted __poll_t
drivers/media/pci/saa7164/saa7164-vbi.c:632:24: expected restricted __poll_t
drivers/media/pci/saa7164/saa7164-vbi.c:637:40: expected restricted __poll_t
drivers/media/pci/saa7164/saa7164-vbi.c:647:40: expected restricted __poll_t
drivers/media/platform/exynos-gsc/gsc-m2m.c:718:24: expected restricted __poll_t
drivers/media/platform/s3c-camif/camif-capture.c:602:21: expected restricted __poll_t [usertype] ret
drivers/media/radio/radio-wl1273.c:1099:24: expected restricted __poll_t
drivers/platform/goldfish/goldfish_pipe.c:549:24: expected restricted __poll_t
drivers/tty/n_r3964.c:1239:24: expected restricted __poll_t [assigned] [usertype] result
drivers/uio/uio.c:505:24: expected restricted __poll_t
drivers/xen/pvcalls-front.c:921:24: expected restricted __poll_t
sound/core/seq/seq_clientmgr.c:1097:24: expected restricted __poll_t
sound/core/seq/oss/seq_oss.c:206:24: expected restricted __poll_t
* misannotation around SAA6588_CMD_POLL and struct saa6588_command -
drivers/media/i2c/saa6588.c:416:35: right side has type restricted __poll_t
drivers/media/pci/bt8xx/bttv-driver.c:3347:20: got restricted __poll_t [assigned] [usertype] res
drivers/media/pci/bt8xx/bttv-driver.c:3350:19: expected restricted __poll_t
drivers/media/pci/saa7134/saa7134-video.c:1243:16: warning: restricted __poll_t degrades to integer
drivers/media/pci/saa7134/saa7134-video.c:1243:19: expected restricted __poll_t
* misannotations around perf ring_buffer->poll -
kernel/events/core.c:4541:24: expected restricted __poll_t [usertype] events
kernel/events/ring_buffer.c:22:39: got restricted __poll_t [usertype] <noident>
IOW, not much and fairly low on false positives.
Are you OK with that approach? I could send a pull request for the first 7
in that series (it should be bisect-safe), then you'd run the bulk rename
script just before -rc1 and apply the last one on top of that.
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2018-02-01 22:00 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-01-30 18:39 [git pull] vfs.git: poll annotations Al Viro
2018-01-31 2:21 ` Linus Torvalds
2018-01-31 3:13 ` Al Viro
2018-01-31 3:19 ` Linus Torvalds
2018-01-31 4:46 ` Al Viro
2018-01-31 17:50 ` Al Viro
2018-02-01 22:00 ` Al Viro
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).