mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-09 12:17:12 +09:00
Merge tag 'android14-6.1-2023-11_r1' of https://android.googlesource.com/kernel/common
* commit 'android14-6.1-2023-11_r1': (3456 commits) ANDROID: fs/passthrough: Fix compatibility with R/O file system FROMLIST: usb: typec: tcpm: Fix sink caps op current check UPSTREAM: scsi: ufs: core: Add advanced RPMB support where UFSHCI 4.0 does not support EHS length in UTRD ANDROID: ABI: Update symbol list for MediatTek ANDROID: vendor_hooks: Add hook for mmc queue Revert "proc: allow pid_revalidate() during LOOKUP_RCU" UPSTREAM: scsi: ufs: ufs-qcom: Clear qunipro_g4_sel for HW major version > 5 ANDROID: GKI: Update symbols to symbol list ANDROID: vendor_hook: Add hook to tune readaround size ANDROID: add for tuning readahead size ANDROID: vendor_hooks: Add hooks to avoid key threads stalled in memory allocations ANDROID: GKI: Update oplus symbol list ANDROID: vendor_hooks: add hooks for adjust kvmalloc_node alloc_flags UPSTREAM: netfilter: ipset: add the missing IP_SET_HASH_WITH_NET0 macro for ip_set_hash_netportnet.c ANDROID: ABI: Update symbol list for imx ANDROID: abi_gki_aarch64_qcom: Add __netif_rx ANDROID: ABI: Update sony symbol list and stg ANDROID: mmc: Add vendor hooks for sdcard failure diagnostics ANDROID: Update symbol list for mtk UPSTREAM: scsi: ufs: mcq: Fix the search/wrap around logic ... Change-Id: I068babc9a4a733e7cff2e6be0620be36fbbee5a8 Conflicts: arch/arm64/boot/dts/rockchip/rk3568.dtsi arch/arm64/boot/dts/rockchip/rk356x.dtsi drivers/dma/pl330.c drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c drivers/gpu/drm/rockchip/rockchip_drm_vop.c drivers/mmc/core/card.h drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c drivers/nvme/host/nvme.h drivers/pci/controller/pcie-rockchip.c drivers/power/supply/rk817_charger.c drivers/tty/serial/8250/8250_port.c drivers/usb/gadget/function/f_uvc.c drivers/usb/host/xhci.h drivers/usb/typec/tcpm/tcpm.c
This commit is contained in:
@@ -706,12 +706,17 @@ static void clear_work_data(struct work_struct *work)
|
||||
set_work_data(work, WORK_STRUCT_NO_POOL, 0);
|
||||
}
|
||||
|
||||
static inline struct pool_workqueue *work_struct_pwq(unsigned long data)
|
||||
{
|
||||
return (struct pool_workqueue *)(data & WORK_STRUCT_WQ_DATA_MASK);
|
||||
}
|
||||
|
||||
static struct pool_workqueue *get_work_pwq(struct work_struct *work)
|
||||
{
|
||||
unsigned long data = atomic_long_read(&work->data);
|
||||
|
||||
if (data & WORK_STRUCT_PWQ)
|
||||
return (void *)(data & WORK_STRUCT_WQ_DATA_MASK);
|
||||
return work_struct_pwq(data);
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
@@ -739,8 +744,7 @@ static struct worker_pool *get_work_pool(struct work_struct *work)
|
||||
assert_rcu_or_pool_mutex();
|
||||
|
||||
if (data & WORK_STRUCT_PWQ)
|
||||
return ((struct pool_workqueue *)
|
||||
(data & WORK_STRUCT_WQ_DATA_MASK))->pool;
|
||||
return work_struct_pwq(data)->pool;
|
||||
|
||||
pool_id = data >> WORK_OFFQ_POOL_SHIFT;
|
||||
if (pool_id == WORK_OFFQ_POOL_NONE)
|
||||
@@ -761,8 +765,7 @@ static int get_work_pool_id(struct work_struct *work)
|
||||
unsigned long data = atomic_long_read(&work->data);
|
||||
|
||||
if (data & WORK_STRUCT_PWQ)
|
||||
return ((struct pool_workqueue *)
|
||||
(data & WORK_STRUCT_WQ_DATA_MASK))->pool->id;
|
||||
return work_struct_pwq(data)->pool->id;
|
||||
|
||||
return data >> WORK_OFFQ_POOL_SHIFT;
|
||||
}
|
||||
@@ -4867,10 +4870,16 @@ static void show_one_worker_pool(struct worker_pool *pool)
|
||||
struct worker *worker;
|
||||
bool first = true;
|
||||
unsigned long flags;
|
||||
unsigned long hung = 0;
|
||||
|
||||
raw_spin_lock_irqsave(&pool->lock, flags);
|
||||
if (pool->nr_workers == pool->nr_idle)
|
||||
goto next_pool;
|
||||
|
||||
/* How long the first pending work is waiting for a worker. */
|
||||
if (!list_empty(&pool->worklist))
|
||||
hung = jiffies_to_msecs(jiffies - pool->watchdog_ts) / 1000;
|
||||
|
||||
/*
|
||||
* Defer printing to avoid deadlocks in console drivers that
|
||||
* queue work while holding locks also taken in their write
|
||||
@@ -4879,9 +4888,7 @@ static void show_one_worker_pool(struct worker_pool *pool)
|
||||
printk_deferred_enter();
|
||||
pr_info("pool %d:", pool->id);
|
||||
pr_cont_pool_info(pool);
|
||||
pr_cont(" hung=%us workers=%d",
|
||||
jiffies_to_msecs(jiffies - pool->watchdog_ts) / 1000,
|
||||
pool->nr_workers);
|
||||
pr_cont(" hung=%lus workers=%d", hung, pool->nr_workers);
|
||||
if (pool->manager)
|
||||
pr_cont(" manager: %d",
|
||||
task_pid_nr(pool->manager->task));
|
||||
|
||||
Reference in New Issue
Block a user