No description
Find a file
Linus Torvalds acc7d6d23e workqueue: clean up WORK_* constant types, clarify masking
commit afa4bb778e upstream.

Dave Airlie reports that gcc-13.1.1 has started complaining about some
of the workqueue code in 32-bit arm builds:

  kernel/workqueue.c: In function ‘get_work_pwq’:
  kernel/workqueue.c:713:24: error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]
    713 |                 return (void *)(data & WORK_STRUCT_WQ_DATA_MASK);
        |                        ^
  [ ... a couple of other cases ... ]

and while it's not immediately clear exactly why gcc started complaining
about it now, I suspect it's some C23-induced enum type handlign fixup in
gcc-13 is the cause.

Whatever the reason for starting to complain, the code and data types
are indeed disgusting enough that the complaint is warranted.

The wq code ends up creating various "helper constants" (like that
WORK_STRUCT_WQ_DATA_MASK) using an enum type, which is all kinds of
confused.  The mask needs to be 'unsigned long', not some unspecified
enum type.

To make matters worse, the actual "mask and cast to a pointer" is
repeated a couple of times, and the cast isn't even always done to the
right pointer, but - as the error case above - to a 'void *' with then
the compiler finishing the job.

That's now how we roll in the kernel.

So create the masks using the proper types rather than some ambiguous
enumeration, and use a nice helper that actually does the type
conversion in one well-defined place.

Incidentally, this magically makes clang generate better code.  That,
admittedly, is really just a sign of clang having been seriously
confused before, and cleaning up the typing unconfuses the compiler too.

Reported-by: Dave Airlie <airlied@gmail.com>
Link: https://lore.kernel.org/lkml/CAPM=9twNnV4zMCvrPkw3H-ajZOH-01JVh_kDrxdPYQErz8ZTdA@mail.gmail.com/
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Tejun Heo <tj@kernel.org>
Cc: Nick Desaulniers <ndesaulniers@google.com>
Cc: Nathan Chancellor <nathan@kernel.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2023-08-20 15:24:52 +08:00
arch ARM: orion5x: fix d2net gpio initialization 2023-08-20 15:24:50 +08:00
block block/partition: fix signedness issue for Amiga partitions 2023-08-20 15:24:51 +08:00
certs certs/blacklist_hashes.c: fix const confusion in certs blacklist 2023-04-19 17:50:34 +08:00
crypto KEYS: asymmetric: Copy sig and digest in public_key_verify_signature() 2023-08-20 15:21:12 +08:00
Documentation fs: Lock moved directories 2023-08-20 15:24:49 +08:00
drivers net: lan743x: Don't sleep in atomic context 2023-08-20 15:24:52 +08:00
fs fanotify: disallow mount/sb marks on kernel internal pseudo fs 2023-08-20 15:24:51 +08:00
include workqueue: clean up WORK_* constant types, clarify masking 2023-08-20 15:24:52 +08:00
init kbuild: Add CONFIG_PAHOLE_VERSION 2023-04-19 17:59:33 +08:00
io_uring io_uring: add reschedule point to handle_tw_list() 2023-08-20 15:24:52 +08:00
ipc ipc/sem: Fix dangling sem_array access in semtimedop race 2023-04-19 17:56:54 +08:00
kernel workqueue: clean up WORK_* constant types, clarify masking 2023-08-20 15:24:52 +08:00
lib test_firmware: return ENOMEM instead of ENOSPC on failed memory allocation 2023-08-20 15:24:43 +08:00
LICENSES LICENSES/dual/CC-BY-4.0: Git rid of "smart quotes" 2021-07-15 06:31:24 -06:00
mm shmem: use ramfs_kill_sb() for kill_sb method of ramfs-based tmpfs 2023-08-20 15:24:49 +08:00
net netfilter: nf_tables: prevent OOB access in nft_byteorder_eval 2023-08-20 15:24:51 +08:00
samples samples/bpf: Fix buffer overflow in tcp_basertt 2023-08-20 15:24:18 +08:00
scripts kbuild: Disable GCOV for *.mod.o 2023-08-20 15:24:38 +08:00
security integrity: Fix possible multiple allocation in integrity_inode_get() 2023-08-20 15:24:48 +08:00
sound ASoC: mediatek: mt8173: Fix snd_soc_component_initialize error path 2023-08-20 15:24:50 +08:00
tools wireguard: netlink: send staged packets when setting initial private key 2023-08-20 15:24:51 +08:00
usr usr/include/Makefile: add linux/nfc.h to the compile-test coverage 2023-04-19 17:44:58 +08:00
virt KVM: Avoid illegal stage2 mapping on invalid memory slot 2023-08-20 15:23:58 +08:00
.clang-format clang-format: Update with the latest for_each macro list 2021-05-12 23:32:39 +02:00
.cocciconfig
.get_maintainer.ignore Opt out of scripts/get_maintainer.pl 2019-05-16 10:53:40 -07:00
.gitattributes .gitattributes: use 'dts' diff driver for dts files 2019-12-04 19:44:11 -08:00
.gitignore .gitignore: ignore only top-level modules.builtin 2021-05-02 00:43:35 +09:00
.mailmap mailmap: add Andrej Shadura 2021-10-18 20:22:03 -10:00
COPYING COPYING: state that all contributions really are covered by this file 2020-02-10 13:32:20 -08:00
CREDITS MAINTAINERS: Move Daniel Drake to credits 2021-09-21 08:34:58 +03:00
Kbuild kbuild: rename hostprogs-y/always to hostprogs/always-y 2020-02-04 01:53:07 +09:00
Kconfig kbuild: ensure full rebuild when the compiler is updated 2020-05-12 13:28:33 +09:00
MAINTAINERS Remove DECnet support from kernel 2023-08-20 15:23:42 +08:00
Makefile Linux 5.15.120 2023-08-20 15:24:11 +08:00
README Drop all 00-INDEX files from Documentation/ 2018-09-09 15:08:58 -06:00

Linux kernel
============

There are several guides for kernel developers and users. These guides can
be rendered in a number of formats, like HTML and PDF. Please read
Documentation/admin-guide/README.rst first.

In order to build the documentation, use ``make htmldocs`` or
``make pdfdocs``.  The formatted documentation can also be read online at:

    https://www.kernel.org/doc/html/latest/

There are various text files in the Documentation/ subdirectory,
several of them using the Restructured Text markup notation.

Please read the Documentation/process/changes.rst file, as it contains the
requirements for building and running the kernel, and information about
the problems which may result by upgrading your kernel.