From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail.mainlining.org (mail.mainlining.org [5.75.144.95]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 240863CB56D; Sat, 29 Aug 2026 15:58:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=5.75.144.95 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788019142; cv=none; b=fvGNigGUsJ0sdOi2dNrgdl+TPTC/9tt89rQnKZ1hxr/I7U2WXPLzJ279vdCPYYH8bhpUpSbGsLHLhxkFN5WpQ9NiEwGqxIUMI42VOUCUrXtJb6jQbXnJmGKr9XR6PFrxAdsAhfM05UlR7A6pmzJQWrY8LWZggsF5v+wv1RVn7Nk= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788019142; c=relaxed/simple; bh=mMN9QqRnJUj18c3qYawSslLuAcpjtpQ/jQxX2r9fvzs=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=tdj9RZ6qS9c9ZiprDZUGkFtZBCjqixzPpmmH/+f8vMH3cvb0GKs1eBkGnLYYnq120gzaf5WQCtu/u0wuTNh7fSX4OIJDYTqsowGQzz5mJFwHcen5FN5XIq6nIA7DnSb//ETWlPEING7M+RFlB8QFI2PfyQPTgikCxbnhrWmlpac= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=fail (p=reject dis=none) header.from=grrlz.net; spf=pass smtp.mailfrom=mainlining.org; dkim=pass (2048-bit key) header.d=mainlining.org header.i=@mainlining.org header.b=I1+/i1Ey; dkim=permerror (0-bit key) header.d=mainlining.org header.i=@mainlining.org header.b=JjnZPDdY; arc=none smtp.client-ip=5.75.144.95 Authentication-Results: smtp.subspace.kernel.org; dmarc=fail (p=reject dis=none) header.from=grrlz.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=mainlining.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=mainlining.org header.i=@mainlining.org header.b="I1+/i1Ey"; dkim=permerror (0-bit key) header.d=mainlining.org header.i=@mainlining.org header.b="JjnZPDdY" DKIM-Signature: v=1; a=rsa-sha256; s=202507r; d=mainlining.org; c=relaxed/relaxed; h=Message-ID:Date:Subject:To:From; t=1788019120; bh=cfVMFIJrg+09/nJj00CWZEw QgKdYXaKHGfOUSAKISi4=; b=I1+/i1Ey4HgnFsNhKVHPefbKSFnOalnILLkHU/21RBhqd4ddY/ vXqd29DxHjR4BfxsyARsjvLXT2e95Az0rwiOO3Fo1s7vFchbv8U/MGz+XK/UDtssIbxNqE7rgk5 MziPZU1sRmZDM0mVyxnUzMXIbpIx8HkPym9aq61jtCk/bmbjix+HiOVSSq4SP46XNBrPfQB+mIe vlC+uY7ZFMrwYF/zEPQPtoPF4j8j106VzqEETjhVdTc3yx14FlNgG/YM66iV3pXHwo28lA3LLki rc2DlFE8WHLS6/Bbts4Lwty9rfVnCcwBHLxv7SI1MCHIMeK7s1pSD2cdOtj8QqtTSNA==; DKIM-Signature: v=1; a=ed25519-sha256; s=202507e; d=mainlining.org; c=relaxed/relaxed; h=Message-ID:Date:Subject:To:From; t=1788019120; bh=cfVMFIJrg+09/nJj00CWZEw QgKdYXaKHGfOUSAKISi4=; b=JjnZPDdYW4NREKEP0v0rtbDEKTGr6SyrcmKYXFKjzBqQytDIjh dtddp/x+rTkjdrWB5ThKs8c9UU49gR/aTDAQ==; From: Bradley Morgan To: Greg Kroah-Hartman , Jiri Slaby Cc: Hugo Villeneuve , linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org, brads@mainlining.org Subject: [PATCH 3/5] tty: sc16is7xx: convert to kthread_run_worker Date: Sat, 29 Aug 2026 15:58:41 +0000 Message-ID: <20260829155841.5627-1-include@grrlz.net> X-Mailer: git-send-email 2.47.3 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: Bradley Morgan Embedding a kthread_worker and running kthread_worker_fn yourself is the old way. Convert sc16is7xx to kthread_run_worker(), dropping the separate kworker_task pointer. This is part of removing the worker->task self-assignment in kthread_worker_fn(). Signed-off-by: Bradley Morgan --- drivers/tty/serial/sc16is7xx.c | 39 ++++++++++++++++------------------ 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/drivers/tty/serial/sc16is7xx.c b/drivers/tty/serial/sc16is7xx.c index 7107a0fb1e7b..2cfc1f290009 100644 --- a/drivers/tty/serial/sc16is7xx.c +++ b/drivers/tty/serial/sc16is7xx.c @@ -306,8 +306,7 @@ struct sc16is7xx_port { unsigned long gpio_valid_mask; #endif u8 mctrl_mask; - struct kthread_worker kworker; - struct task_struct *kworker_task; + struct kthread_worker *kworker; struct kthread_delayed_work poll_work; bool polling; struct sc16is7xx_one p[]; @@ -434,7 +433,7 @@ static void sc16is7xx_ier_clear(struct uart_port *port, u8 bit) one->config.flags |= SC16IS7XX_RECONF_IER; one->config.ier_mask |= bit; one->config.ier_val &= ~bit; - kthread_queue_work(&s->kworker, &one->reg_work); + kthread_queue_work(s->kworker, &one->reg_work); } static void sc16is7xx_ier_set(struct uart_port *port, u8 bit) @@ -447,7 +446,7 @@ static void sc16is7xx_ier_set(struct uart_port *port, u8 bit) one->config.flags |= SC16IS7XX_RECONF_IER; one->config.ier_mask |= bit; one->config.ier_val |= bit; - kthread_queue_work(&s->kworker, &one->reg_work); + kthread_queue_work(s->kworker, &one->reg_work); } static void sc16is7xx_stop_tx(struct uart_port *port) @@ -813,7 +812,7 @@ static void sc16is7xx_poll_proc(struct kthread_work *ws) sc16is7xx_irq(0, s); /* Setup delay based on SC16IS7XX_POLL_PERIOD_MS */ - kthread_queue_delayed_work(&s->kworker, &s->poll_work, + kthread_queue_delayed_work(s->kworker, &s->poll_work, msecs_to_jiffies(SC16IS7XX_POLL_PERIOD_MS)); } @@ -900,7 +899,7 @@ static void sc16is7xx_ms_proc(struct kthread_work *ws) scoped_guard(mutex, &one->lock) sc16is7xx_update_mlines(one); - kthread_queue_delayed_work(&s->kworker, &one->ms_work, HZ); + kthread_queue_delayed_work(s->kworker, &one->ms_work, HZ); } } @@ -911,7 +910,7 @@ static void sc16is7xx_enable_ms(struct uart_port *port) lockdep_assert_held_once(&port->lock); - kthread_queue_delayed_work(&s->kworker, &one->ms_work, 0); + kthread_queue_delayed_work(s->kworker, &one->ms_work, 0); } static void sc16is7xx_start_tx(struct uart_port *port) @@ -919,7 +918,7 @@ static void sc16is7xx_start_tx(struct uart_port *port) struct sc16is7xx_port *s = dev_get_drvdata(port->dev); struct sc16is7xx_one *one = to_sc16is7xx_one(port); - kthread_queue_work(&s->kworker, &one->tx_work); + kthread_queue_work(s->kworker, &one->tx_work); } static void sc16is7xx_throttle(struct uart_port *port) @@ -968,7 +967,7 @@ static void sc16is7xx_set_mctrl(struct uart_port *port, unsigned int mctrl) struct sc16is7xx_one *one = to_sc16is7xx_one(port); one->config.flags |= SC16IS7XX_RECONF_MD; - kthread_queue_work(&s->kworker, &one->reg_work); + kthread_queue_work(s->kworker, &one->reg_work); } static void sc16is7xx_break_ctl(struct uart_port *port, int break_state) @@ -1098,7 +1097,7 @@ static int sc16is7xx_config_rs485(struct uart_port *port, struct ktermios *termi } one->config.flags |= SC16IS7XX_RECONF_RS485; - kthread_queue_work(&s->kworker, &one->reg_work); + kthread_queue_work(s->kworker, &one->reg_work); return 0; } @@ -1159,7 +1158,7 @@ static int sc16is7xx_startup(struct uart_port *port) uart_port_unlock_irqrestore(port, flags); if (s->polling) - kthread_queue_delayed_work(&s->kworker, &s->poll_work, + kthread_queue_delayed_work(s->kworker, &s->poll_work, msecs_to_jiffies(SC16IS7XX_POLL_PERIOD_MS)); return 0; @@ -1186,7 +1185,7 @@ static void sc16is7xx_shutdown(struct uart_port *port) if (s->polling) kthread_cancel_delayed_work_sync(&s->poll_work); - kthread_flush_worker(&s->kworker); + kthread_flush_worker(s->kworker); } static const char *sc16is7xx_type(struct uart_port *port) @@ -1595,14 +1594,12 @@ int sc16is7xx_probe(struct device *dev, const struct sc16is7xx_devtype *devtype, s->devtype = devtype; dev_set_drvdata(dev, s); - kthread_init_worker(&s->kworker); - s->kworker_task = kthread_run(kthread_worker_fn, &s->kworker, - "sc16is7xx"); - if (IS_ERR(s->kworker_task)) { - ret = PTR_ERR(s->kworker_task); + s->kworker = kthread_run_worker(0, "sc16is7xx"); + if (IS_ERR(s->kworker)) { + ret = PTR_ERR(s->kworker); goto out_clk; } - sched_set_fifo(s->kworker_task); + sched_set_fifo(s->kworker->task); ret = sc16is7xx_reset(dev, regmaps[0]); if (ret) @@ -1676,7 +1673,7 @@ int sc16is7xx_probe(struct device *dev, const struct sc16is7xx_devtype *devtype, } out_kthread: - kthread_stop(s->kworker_task); + kthread_destroy_worker(s->kworker); out_clk: clk_disable_unprepare(s->clk); @@ -1705,8 +1702,8 @@ void sc16is7xx_remove(struct device *dev) if (s->polling) kthread_cancel_delayed_work_sync(&s->poll_work); - kthread_flush_worker(&s->kworker); - kthread_stop(s->kworker_task); + kthread_flush_worker(s->kworker); + kthread_destroy_worker(s->kworker); clk_disable_unprepare(s->clk); } -- 2.47.3