• Arnd Bergmann's avatar
    workqueue: fix enum type for gcc-13 · 525ff9c2
    Arnd Bergmann authored
    In gcc-13, the WORK_STRUCT_WQ_DATA_MASK constant is a signed 64-bit
    type on 32-bit architectures because the enum definition has both
    negative numbers and numbers above LONG_MAX in it:
    
    kernel/workqueue.c: In function 'get_work_pwq':
    kernel/workqueue.c:709:24: error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]
      709 |                 return (void *)(data & WORK_STRUCT_WQ_DATA_MASK);
          |                        ^
    kernel/workqueue.c: In function 'get_work_pool':
    kernel/workqueue.c:737:25: error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]
      737 |                 return ((struct pool_workqueue *)
          |                         ^
    kernel/workqueue.c: In function 'get_work_pool_id':
    kernel/workqueue.c:759:25: error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]
      759 |                 return ((struct pool_workqueue *)
          |                         ^
    
    Change the enum definition to ensure all values can fit into
    the range of 'unsigned long' on all architectures.
    Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
    Tested-by: default avatarThierry Reding <treding@nvidia.com>
    Tested-by: Lai Jiangshan<jiangshanlai@gmail.com>
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    525ff9c2
workqueue.h 23.6 KB