From nobody Sun Feb 8 04:30:11 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 C7D18240604; Fri, 25 Apr 2025 11:13:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745579600; cv=none; b=LUysVKE5PVC1yIsz98kGKESQv2iFyxUc/LltU10b4y4KKVwv4TY8sk8PLJARiJXiWRQgc1iw1kdBRZYmhEW9BDwkHlGkmuAmgaEkt9dIQYxd0/pQbnyW4D0p8ZwY0eyWqJp+EitBrw0N0QMDjCiJlM8yXzL7qqKxnnq0C1DBLrE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745579600; c=relaxed/simple; bh=c3F1gW9ZPCR5oHtLAFds0q5hpGxchQa902GwA8/ZnVg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=oN8I2kGEt6Bb6Dd9xhUH5lytg7YEc7FseEE2NwcZ70bAHrN7vWouTmBJ+Ug7rOtKYj69HZ8CaY9bfzvOhmAoYpnQWsmCVB7ETvc11wkxtTGSRTBruSjlhkVyHAR4cS04D0xm5ExecvNMrxFa+1ZqWtfbqXRg8Wx3ByNYP91Bgac= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=lbvtIGdY; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="lbvtIGdY" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3BD83C4CEEB; Fri, 25 Apr 2025 11:13:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1745579600; bh=c3F1gW9ZPCR5oHtLAFds0q5hpGxchQa902GwA8/ZnVg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=lbvtIGdYxF4RFuOhlej2+RLOUz7SFQ9JsUnKoUHFceBhcL0f94AtmbtNOXrkxJpob xjJbRz7zCzO/nTy+j++nTSVAr+XuDvJmyQAsZkwHw3tKQyiQsKTzo6zUMZ+jHYPZvm Gs2aoGXwSL0I0ohYHJnm7FBRlfkrD30wEpz1iVmz3f0Jv94Nbpu1lfPb4mOnydZmQJ uNhpUrBGh3o3yA6xQnXSL6bNPttwwcSvbdVhCcUEFz91+3wXEIhfMm3FmpYslRqxeF wFFEHLjcwpMeOqugXDtKQMuvy/66t3wtX7hFn0M+/QOvS/pSARt4hfQmWdlk9T4gZi +QjfE1lFQG85A== From: "Jiri Slaby (SUSE)" To: gregkh@linuxfoundation.org Cc: linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org, "Jiri Slaby (SUSE)" Subject: [PATCH 1/6] tty: simplify throttling using guard()s Date: Fri, 25 Apr 2025 13:13:10 +0200 Message-ID: <20250425111315.1036184-2-jirislaby@kernel.org> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250425111315.1036184-1-jirislaby@kernel.org> References: <20250425111315.1036184-1-jirislaby@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" tty_throttle_safe() and tty_unthrottle_safe can be made less convoluted using guard()s. Switch them. Signed-off-by: Jiri Slaby (SUSE) --- drivers/tty/tty_ioctl.c | 50 +++++++++++++++++++---------------------- 1 file changed, 23 insertions(+), 27 deletions(-) diff --git a/drivers/tty/tty_ioctl.c b/drivers/tty/tty_ioctl.c index 85de90eebc7b..90c70d8d14e3 100644 --- a/drivers/tty/tty_ioctl.c +++ b/drivers/tty/tty_ioctl.c @@ -122,21 +122,19 @@ EXPORT_SYMBOL(tty_unthrottle); */ bool tty_throttle_safe(struct tty_struct *tty) { - bool ret =3D true; - - mutex_lock(&tty->throttle_mutex); - if (!tty_throttled(tty)) { - if (tty->flow_change !=3D TTY_THROTTLE_SAFE) - ret =3D false; - else { - set_bit(TTY_THROTTLED, &tty->flags); - if (tty->ops->throttle) - tty->ops->throttle(tty); - } - } - mutex_unlock(&tty->throttle_mutex); + guard(mutex)(&tty->throttle_mutex); =20 - return ret; + if (tty_throttled(tty)) + return true; + + if (tty->flow_change !=3D TTY_THROTTLE_SAFE) + return false; + + set_bit(TTY_THROTTLED, &tty->flags); + if (tty->ops->throttle) + tty->ops->throttle(tty); + + return true; } =20 /** @@ -152,21 +150,19 @@ bool tty_throttle_safe(struct tty_struct *tty) */ bool tty_unthrottle_safe(struct tty_struct *tty) { - bool ret =3D true; + guard(mutex)(&tty->throttle_mutex); =20 - mutex_lock(&tty->throttle_mutex); - if (tty_throttled(tty)) { - if (tty->flow_change !=3D TTY_UNTHROTTLE_SAFE) - ret =3D false; - else { - clear_bit(TTY_THROTTLED, &tty->flags); - if (tty->ops->unthrottle) - tty->ops->unthrottle(tty); - } - } - mutex_unlock(&tty->throttle_mutex); + if (!tty_throttled(tty)) + return true; =20 - return ret; + if (tty->flow_change !=3D TTY_UNTHROTTLE_SAFE) + return false; + + clear_bit(TTY_THROTTLED, &tty->flags); + if (tty->ops->unthrottle) + tty->ops->unthrottle(tty); + + return true; } =20 /** --=20 2.49.0 From nobody Sun Feb 8 04:30:11 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 637E124338F; Fri, 25 Apr 2025 11:13:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745579602; cv=none; b=MRR9tK9wT7paBPKfr2GL5cS8H6NLCRG4D/1FAFfR9qpu2a5inB2xs3u1aO0gRE6Pc1Jh8DeRz4dLRhL1VaDoWY5TEbWLFvdfqq3Oq5O2yTm9vuA3JTff7/6nJ97bYlVY+xpqKK2MYTKg7qmI899uO2vvic9TjcFjp28vyDcT3dg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745579602; c=relaxed/simple; bh=KJ//6wn7lzLUYBzt9g92iu6mOBp+OD5S2mTUu31bq6Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=knQz7qRM9pGbsy4KBSnl2tbRI3yIyJ8T9UPSB12iynkHPEv9YfFvNvsif1ADs5x2aFsB4UIwEqAFjKez4tFtF3N9LzKFZMEIabn5jWpWy4sv+JSir63qsVlAEHE2eBDQ8BPRMazE879w8817HGuQDrZ1eIGi4NWjxg4JiIlSO8U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=giBpK8lG; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="giBpK8lG" Received: by smtp.kernel.org (Postfix) with ESMTPSA id BA5B1C4CEEA; Fri, 25 Apr 2025 11:13:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1745579601; bh=KJ//6wn7lzLUYBzt9g92iu6mOBp+OD5S2mTUu31bq6Y=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=giBpK8lGGh1i1wNtGuMjgzpYFBwY/Kh8woLj6uvVKQXWs4lFwflV9g5JM5YvOPZe7 hiNKzn5knpkUiYnoFmTeeiX6Jn96fxYMUAcaKXycFloydSZg3Yn9X5r9mAuDI2TdDl RlzbZnt/tOynD7lO+a/sBFaDZq6peOy08sfRBSLaZZJ67dNUzZsdyjjZT+CWsMt/LJ Xdt9prQ9OaMjhLyObY16EcV0sqqFBlD8jkDDkuFva5XGJmiy3D8Jucq3Up3sYjFW9w JG68HyHGBd97yHV75LfROeivqU5LIK/p6Y1YAMMJs0y3I+iXnWsuwjc0qMv1qOVuyz K8JNCTsz+AxRg== From: "Jiri Slaby (SUSE)" To: gregkh@linuxfoundation.org Cc: linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org, "Jiri Slaby (SUSE)" Subject: [PATCH 2/6] tty: use lock guard()s in tty_io Date: Fri, 25 Apr 2025 13:13:11 +0200 Message-ID: <20250425111315.1036184-3-jirislaby@kernel.org> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250425111315.1036184-1-jirislaby@kernel.org> References: <20250425111315.1036184-1-jirislaby@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" guard()s and scoped_guard()s express more clearly what is protected by locks. And also makes the code cleaner as it can return immediately in case of short returns. Signed-off-by: Jiri Slaby (SUSE) --- drivers/tty/tty_io.c | 96 ++++++++++++++++++-------------------------- 1 file changed, 40 insertions(+), 56 deletions(-) diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c index ca9b7d7bad2b..e2d92cf70eb7 100644 --- a/drivers/tty/tty_io.c +++ b/drivers/tty/tty_io.c @@ -276,11 +276,10 @@ static void check_tty_count(struct tty_struct *tty, c= onst char *routine) struct list_head *p; int count =3D 0, kopen_count =3D 0; =20 - spin_lock(&tty->files_lock); - list_for_each(p, &tty->tty_files) { - count++; - } - spin_unlock(&tty->files_lock); + scoped_guard(spinlock, &tty->files_lock) + list_for_each(p, &tty->tty_files) + count++; + if (tty->driver->type =3D=3D TTY_DRIVER_TYPE_PTY && tty->driver->subtype =3D=3D PTY_TYPE_SLAVE && tty->link && tty->link->count) @@ -378,7 +377,7 @@ EXPORT_SYMBOL_GPL(tty_dev_name_to_number); */ struct tty_driver *tty_find_polling_driver(char *name, int *line) { - struct tty_driver *p, *res =3D NULL; + struct tty_driver *p; int tty_line =3D 0; int len; char *str, *stp; @@ -392,7 +391,8 @@ struct tty_driver *tty_find_polling_driver(char *name, = int *line) len =3D str - name; tty_line =3D simple_strtoul(str, &str, 10); =20 - mutex_lock(&tty_mutex); + guard(mutex)(&tty_mutex); + /* Search through the tty devices to look for a match */ list_for_each_entry(p, &tty_drivers, tty_drivers) { if (!len || strncmp(name, p->name, len) !=3D 0) @@ -405,14 +405,12 @@ struct tty_driver *tty_find_polling_driver(char *name= , int *line) =20 if (tty_line >=3D 0 && tty_line < p->num && p->ops && p->ops->poll_init && !p->ops->poll_init(p, tty_line, stp)) { - res =3D tty_driver_kref_get(p); *line =3D tty_line; - break; + return tty_driver_kref_get(p); } } - mutex_unlock(&tty_mutex); =20 - return res; + return NULL; } EXPORT_SYMBOL_GPL(tty_find_polling_driver); #endif @@ -531,16 +529,15 @@ EXPORT_SYMBOL_GPL(tty_wakeup); */ static struct file *tty_release_redirect(struct tty_struct *tty) { - struct file *f =3D NULL; + guard(spinlock)(&redirect_lock); =20 - spin_lock(&redirect_lock); if (redirect && file_tty(redirect) =3D=3D tty) { - f =3D redirect; + struct file *f =3D redirect; redirect =3D NULL; + return f; } - spin_unlock(&redirect_lock); =20 - return f; + return NULL; } =20 /** @@ -765,11 +762,8 @@ void __stop_tty(struct tty_struct *tty) */ void stop_tty(struct tty_struct *tty) { - unsigned long flags; - - spin_lock_irqsave(&tty->flow.lock, flags); + guard(spinlock_irqsave)(&tty->flow.lock); __stop_tty(tty); - spin_unlock_irqrestore(&tty->flow.lock, flags); } EXPORT_SYMBOL(stop_tty); =20 @@ -796,11 +790,8 @@ void __start_tty(struct tty_struct *tty) */ void start_tty(struct tty_struct *tty) { - unsigned long flags; - - spin_lock_irqsave(&tty->flow.lock, flags); + guard(spinlock_irqsave)(&tty->flow.lock); __start_tty(tty); - spin_unlock_irqrestore(&tty->flow.lock, flags); } EXPORT_SYMBOL(start_tty); =20 @@ -809,7 +800,8 @@ static void tty_update_time(struct tty_struct *tty, boo= l mtime) time64_t sec =3D ktime_get_real_seconds(); struct tty_file_private *priv; =20 - spin_lock(&tty->files_lock); + guard(spinlock)(&tty->files_lock); + list_for_each_entry(priv, &tty->tty_files, list) { struct inode *inode =3D file_inode(priv->file); struct timespec64 time =3D mtime ? inode_get_mtime(inode) : inode_get_at= ime(inode); @@ -827,7 +819,6 @@ static void tty_update_time(struct tty_struct *tty, boo= l mtime) inode_set_atime(inode, sec, 0); } } - spin_unlock(&tty->files_lock); } =20 /* @@ -2314,13 +2305,12 @@ static int tiocsti(struct tty_struct *tty, u8 __use= r *p) */ static int tiocgwinsz(struct tty_struct *tty, struct winsize __user *arg) { - int err; + guard(mutex)(&tty->winsize_mutex); =20 - mutex_lock(&tty->winsize_mutex); - err =3D copy_to_user(arg, &tty->winsize, sizeof(*arg)); - mutex_unlock(&tty->winsize_mutex); + if (copy_to_user(arg, &tty->winsize, sizeof(*arg))) + return -EFAULT; =20 - return err ? -EFAULT : 0; + return 0; } =20 /** @@ -2335,10 +2325,10 @@ int tty_do_resize(struct tty_struct *tty, struct wi= nsize *ws) { struct pid *pgrp; =20 - /* Lock the tty */ - mutex_lock(&tty->winsize_mutex); + guard(mutex)(&tty->winsize_mutex); + if (!memcmp(ws, &tty->winsize, sizeof(*ws))) - goto done; + return 0; =20 /* Signal the foreground process group */ pgrp =3D tty_get_pgrp(tty); @@ -2347,8 +2337,7 @@ int tty_do_resize(struct tty_struct *tty, struct wins= ize *ws) put_pid(pgrp); =20 tty->winsize =3D *ws; -done: - mutex_unlock(&tty->winsize_mutex); + return 0; } EXPORT_SYMBOL(tty_do_resize); @@ -2409,13 +2398,14 @@ static int tioccons(struct file *file) return -EBADF; if (!(file->f_mode & FMODE_CAN_WRITE)) return -EINVAL; - spin_lock(&redirect_lock); - if (redirect) { - spin_unlock(&redirect_lock); + + guard(spinlock)(&redirect_lock); + + if (redirect) return -EBUSY; - } + redirect =3D get_file(file); - spin_unlock(&redirect_lock); + return 0; } =20 @@ -3028,11 +3018,9 @@ void __do_SAK(struct tty_struct *tty) struct task_struct *g, *p; struct pid *session; int i; - unsigned long flags; =20 - spin_lock_irqsave(&tty->ctrl.lock, flags); - session =3D get_pid(tty->ctrl.session); - spin_unlock_irqrestore(&tty->ctrl.lock, flags); + scoped_guard(spinlock_irqsave, &tty->ctrl.lock) + session =3D get_pid(tty->ctrl.session); =20 tty_ldisc_flush(tty); =20 @@ -3055,7 +3043,7 @@ void __do_SAK(struct tty_struct *tty) PIDTYPE_SID); continue; } - task_lock(p); + guard(task_lock)(p); i =3D iterate_fd(p->files, 0, this_tty, tty); if (i !=3D 0) { tty_notice(tty, "SAK: killed process %d (%s): by fd#%d\n", @@ -3063,7 +3051,6 @@ void __do_SAK(struct tty_struct *tty) group_send_sig_info(SIGKILL, SEND_SIG_PRIV, p, PIDTYPE_SID); } - task_unlock(p); } read_unlock(&tasklist_lock); put_pid(session); @@ -3465,9 +3452,8 @@ int tty_register_driver(struct tty_driver *driver) goto err_unreg_char; } =20 - mutex_lock(&tty_mutex); - list_add(&driver->tty_drivers, &tty_drivers); - mutex_unlock(&tty_mutex); + scoped_guard(mutex, &tty_mutex) + list_add(&driver->tty_drivers, &tty_drivers); =20 if (!(driver->flags & TTY_DRIVER_DYNAMIC_DEV)) { for (i =3D 0; i < driver->num; i++) { @@ -3486,9 +3472,8 @@ int tty_register_driver(struct tty_driver *driver) for (i--; i >=3D 0; i--) tty_unregister_device(driver, i); =20 - mutex_lock(&tty_mutex); - list_del(&driver->tty_drivers); - mutex_unlock(&tty_mutex); + scoped_guard(mutex, &tty_mutex) + list_del(&driver->tty_drivers); =20 err_unreg_char: unregister_chrdev_region(dev, driver->num); @@ -3507,9 +3492,8 @@ void tty_unregister_driver(struct tty_driver *driver) { unregister_chrdev_region(MKDEV(driver->major, driver->minor_start), driver->num); - mutex_lock(&tty_mutex); - list_del(&driver->tty_drivers); - mutex_unlock(&tty_mutex); + scoped_guard(mutex, &tty_mutex) + list_del(&driver->tty_drivers); } EXPORT_SYMBOL(tty_unregister_driver); =20 --=20 2.49.0 From nobody Sun Feb 8 04:30:11 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 CD22B24468A; Fri, 25 Apr 2025 11:13:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745579603; cv=none; b=JB9A4m2N+x7HHmhgnQipBZplGyFHkhLmoSxHraclQInvOp82Ys5gJSDnM4Ot5XAI4h9fO5nvSH1DCKa7MdDd9lezXBUUNGqLCeN2dtTQuv8tsQqdATh3y1MKEIXZJCdX0ENEyP0VOuXvNVnYJgEjrXGQjXZq06h4Zp3rrIM6a/s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745579603; c=relaxed/simple; bh=ssThIJKeGvl3X5SWalgKQopEkvTDLH+DyEpRuPXOc18=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=TGjm4rWJ5hAwN44JQ49NhRbWy+dZOEhTpcs4/CeRY+sMXMQZBUnkdTuxvrN7D6Khk+yylhJaUhxucuk3n1SmXjheoUvk4l3pDk20yAg6eCEVXxnOnKqiO/7g0pLqXGu+WmTFxxxe1Uq0J2j8gTKVYoCu27HuzwmgNb3onSnSQDI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=YjrUYXFw; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="YjrUYXFw" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 42FA5C4CEEB; Fri, 25 Apr 2025 11:13:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1745579603; bh=ssThIJKeGvl3X5SWalgKQopEkvTDLH+DyEpRuPXOc18=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=YjrUYXFwR9JpqZP9S7TLq5J5fSAmOX6pwU47j7rJkbsBvFPlz76WB27iPclTJ/Be1 exe+6/1Xzu9OoLOLNv9j9WkSyvARyQAIFL1ef6vqahMJtK70An14Sox23mJRJzY5CE yA9+VZNC8Z7rSihTcECgdVUkRjd6Wyf6icNeiSUB10Us9ih1wveKT0o90Ur/qqvR6c 3QBz6WljoypklaXy4f4qPaYn1VXfG4ig5FPOc3kMTn8r+zG48dUg55d6VdVX8EXCUk 0PH7XM4dN02Z9r0fCVmbjoiZnCs9+4gHemIRsUJCuOuFcgMwc3WhPsF0kfioDJBv6M M2LEyJutNeY9Q== From: "Jiri Slaby (SUSE)" To: gregkh@linuxfoundation.org Cc: linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org, "Jiri Slaby (SUSE)" Subject: [PATCH 3/6] serial: switch uart_port::iotype to enum uart_iotype Date: Fri, 25 Apr 2025 13:13:12 +0200 Message-ID: <20250425111315.1036184-4-jirislaby@kernel.org> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250425111315.1036184-1-jirislaby@kernel.org> References: <20250425111315.1036184-1-jirislaby@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The inline-defined constants look weird. Instead, define a proper enum for them and type uart_port::iotype as that enum. This allows for proper checking in switch-case labels (somewhere, a default or UPIO_UNKNOWN label needs to be added/handled). Signed-off-by: Jiri Slaby (SUSE) --- drivers/tty/serial/8250/8250_core.c | 2 +- drivers/tty/serial/8250/8250_early.c | 2 ++ drivers/tty/serial/8250/8250_port.c | 4 ++++ drivers/tty/serial/8250/8250_rsa.c | 2 ++ drivers/tty/serial/amba-pl011.c | 2 +- drivers/tty/serial/fsl_lpuart.c | 5 ++++- drivers/tty/serial/samsung_tty.c | 4 ++++ drivers/tty/serial/serial_core.c | 8 ++++---- include/linux/serial_core.h | 30 +++++++++++++++------------- 9 files changed, 38 insertions(+), 21 deletions(-) diff --git a/drivers/tty/serial/8250/8250_core.c b/drivers/tty/serial/8250/= 8250_core.c index 5a56f853cf6d..68994a964321 100644 --- a/drivers/tty/serial/8250/8250_core.c +++ b/drivers/tty/serial/8250/8250_core.c @@ -461,7 +461,7 @@ static int univ8250_console_match(struct console *co, c= har *name, int idx, char *options) { char match[] =3D "uart"; /* 8250-specific earlycon name */ - unsigned char iotype; + enum uart_iotype iotype; resource_size_t addr; int i; =20 diff --git a/drivers/tty/serial/8250/8250_early.c b/drivers/tty/serial/8250= /8250_early.c index 842422921765..dc0371857ecb 100644 --- a/drivers/tty/serial/8250/8250_early.c +++ b/drivers/tty/serial/8250/8250_early.c @@ -77,6 +77,8 @@ static void serial8250_early_out(struct uart_port *port, = int offset, int value) outb(value, port->iobase + offset); break; #endif + default: + break; } } =20 diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/= 8250_port.c index 8ac452cea36c..8d9bb91d4bae 100644 --- a/drivers/tty/serial/8250/8250_port.c +++ b/drivers/tty/serial/8250/8250_port.c @@ -2993,6 +2993,8 @@ static int serial8250_request_std_resource(struct uar= t_8250_port *up) if (!request_region(port->iobase, size, "serial")) return -EBUSY; return 0; + case UPIO_UNKNOWN: + break; } =20 return 0; @@ -3025,6 +3027,8 @@ static void serial8250_release_std_resource(struct ua= rt_8250_port *up) case UPIO_PORT: release_region(port->iobase, size); break; + case UPIO_UNKNOWN: + break; } } =20 diff --git a/drivers/tty/serial/8250/8250_rsa.c b/drivers/tty/serial/8250/8= 250_rsa.c index 82f2593b4c59..4c8b9671bd41 100644 --- a/drivers/tty/serial/8250/8250_rsa.c +++ b/drivers/tty/serial/8250/8250_rsa.c @@ -43,6 +43,8 @@ static void rsa8250_release_resource(struct uart_8250_por= t *up) case UPIO_PORT: release_region(port->iobase + offset, size); break; + default: + break; } } =20 diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl01= 1.c index 11d65097578c..421ac22555df 100644 --- a/drivers/tty/serial/amba-pl011.c +++ b/drivers/tty/serial/amba-pl011.c @@ -2476,7 +2476,7 @@ static int pl011_console_setup(struct console *co, ch= ar *options) static int pl011_console_match(struct console *co, char *name, int idx, char *options) { - unsigned char iotype; + enum uart_iotype iotype; resource_size_t addr; int i; =20 diff --git a/drivers/tty/serial/fsl_lpuart.c b/drivers/tty/serial/fsl_lpuar= t.c index fe5aed99d55a..dff6a6c57b5f 100644 --- a/drivers/tty/serial/fsl_lpuart.c +++ b/drivers/tty/serial/fsl_lpuart.c @@ -403,6 +403,8 @@ static inline void lpuart32_write(struct uart_port *por= t, u32 val, case UPIO_MEM32BE: iowrite32be(val, port->membase + off); break; + default: + break; } } =20 @@ -563,8 +565,9 @@ static dma_addr_t lpuart_dma_datareg_addr(struct lpuart= _port *sport) return sport->port.mapbase + UARTDATA; case UPIO_MEM32BE: return sport->port.mapbase + UARTDATA + sizeof(u32) - 1; + default: + return sport->port.mapbase + UARTDR; } - return sport->port.mapbase + UARTDR; } =20 static int lpuart_dma_tx_request(struct uart_port *port) diff --git a/drivers/tty/serial/samsung_tty.c b/drivers/tty/serial/samsung_= tty.c index 210fff7164c1..73e2866febc1 100644 --- a/drivers/tty/serial/samsung_tty.c +++ b/drivers/tty/serial/samsung_tty.c @@ -190,6 +190,8 @@ static void wr_reg(const struct uart_port *port, u32 re= g, u32 val) case UPIO_MEM32: writel_relaxed(val, portaddr(port, reg)); break; + default: + break; } } =20 @@ -2713,6 +2715,8 @@ static void wr_reg_barrier(const struct uart_port *po= rt, u32 reg, u32 val) case UPIO_MEM32: writel(val, portaddr(port, reg)); break; + default: + break; } } =20 diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_c= ore.c index 88669972d9a0..5bc145643385 100644 --- a/drivers/tty/serial/serial_core.c +++ b/drivers/tty/serial/serial_core.c @@ -2178,8 +2178,8 @@ uart_get_console(struct uart_port *ports, int nr, str= uct console *co) * * Returns: 0 on success or -%EINVAL on failure */ -int uart_parse_earlycon(char *p, unsigned char *iotype, resource_size_t *a= ddr, - char **options) +int uart_parse_earlycon(char *p, enum uart_iotype *iotype, + resource_size_t *addr, char **options) { if (strncmp(p, "mmio,", 5) =3D=3D 0) { *iotype =3D UPIO_MEM; @@ -3289,9 +3289,9 @@ bool uart_match_port(const struct uart_port *port1, case UPIO_AU: case UPIO_TSI: return port1->mapbase =3D=3D port2->mapbase; + default: + return false; } - - return false; } EXPORT_SYMBOL(uart_match_port); =20 diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h index 743b4afaad4c..914b5e97e056 100644 --- a/include/linux/serial_core.h +++ b/include/linux/serial_core.h @@ -427,6 +427,18 @@ struct uart_icount { typedef u64 __bitwise upf_t; typedef unsigned int __bitwise upstat_t; =20 +enum uart_iotype { + UPIO_UNKNOWN =3D -1, + UPIO_PORT =3D SERIAL_IO_PORT, /* 8b I/O port access */ + UPIO_HUB6 =3D SERIAL_IO_HUB6, /* Hub6 ISA card */ + UPIO_MEM =3D SERIAL_IO_MEM, /* driver-specific */ + UPIO_MEM32 =3D SERIAL_IO_MEM32, /* 32b little endian */ + UPIO_AU =3D SERIAL_IO_AU, /* Au1x00 and RT288x type IO */ + UPIO_TSI =3D SERIAL_IO_TSI, /* Tsi108/109 type IO */ + UPIO_MEM32BE =3D SERIAL_IO_MEM32BE, /* 32b big endian */ + UPIO_MEM16 =3D SERIAL_IO_MEM16, /* 16b little endian */ +}; + struct uart_port { spinlock_t lock; /* port lock */ unsigned long iobase; /* in/out[bwl] */ @@ -469,23 +481,13 @@ struct uart_port { unsigned char x_char; /* xon/xoff char */ unsigned char regshift; /* reg offset shift */ =20 - unsigned char iotype; /* io access style */ - -#define UPIO_UNKNOWN ((unsigned char)~0U) /* UCHAR_MAX */ -#define UPIO_PORT (SERIAL_IO_PORT) /* 8b I/O port access */ -#define UPIO_HUB6 (SERIAL_IO_HUB6) /* Hub6 ISA card */ -#define UPIO_MEM (SERIAL_IO_MEM) /* driver-specific */ -#define UPIO_MEM32 (SERIAL_IO_MEM32) /* 32b little endian */ -#define UPIO_AU (SERIAL_IO_AU) /* Au1x00 and RT288x type IO */ -#define UPIO_TSI (SERIAL_IO_TSI) /* Tsi108/109 type IO */ -#define UPIO_MEM32BE (SERIAL_IO_MEM32BE) /* 32b big endian */ -#define UPIO_MEM16 (SERIAL_IO_MEM16) /* 16b little endian */ - unsigned char quirks; /* internal quirks */ =20 /* internal quirks must be updated while holding port mutex */ #define UPQ_NO_TXEN_TEST BIT(0) =20 + enum uart_iotype iotype; /* io access style */ + unsigned int read_status_mask; /* driver specific */ unsigned int ignore_status_mask; /* driver specific */ struct uart_state *state; /* pointer to parent state */ @@ -1101,8 +1103,8 @@ static inline bool uart_console_registered(struct uar= t_port *port) =20 struct uart_port *uart_get_console(struct uart_port *ports, int nr, struct console *c); -int uart_parse_earlycon(char *p, unsigned char *iotype, resource_size_t *a= ddr, - char **options); +int uart_parse_earlycon(char *p, enum uart_iotype *iotype, + resource_size_t *addr, char **options); void uart_parse_options(const char *options, int *baud, int *parity, int *= bits, int *flow); int uart_set_options(struct uart_port *port, struct console *co, int baud, --=20 2.49.0 From nobody Sun Feb 8 04:30:11 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 5A3EF2451F3; Fri, 25 Apr 2025 11:13:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745579605; cv=none; b=cQAjKPI7NFnG8boF+RP0t0prm8qmY0avMQVTJ5AbEoIILGFflMyMmxxaGHq3/PJrp5ZGrFSaf7+jTVtMm88xFWRf/XZ2kPc51IeBRQywuXcIlwEaZi/K1N5k1WuDO4WJDZi99soEvpvShYDcGQCqkC0lvLf3YZ7AkFBmeDElsfc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745579605; c=relaxed/simple; bh=filZUCZu1uVbN8m4LwHDnoGpoCMzzgYVOEeequd4tbo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HsJCrPHrhB2B07qXJZgHN88NEVmZys4WjjwUa0NnDRShj78lWgnhUhX+XZxo4D8vDvPDTiWlvdtFMghRHWSB6ioJyo7ESzCWS4yoK6cVy5xAZPs8y/hi8qdms49GR1ZVuLT5QCyd0q7YSZgkRpc3nqXXvzGud0XsJ3F8SQK9PBw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=u+6D1cBN; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="u+6D1cBN" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C0EC6C4CEEA; Fri, 25 Apr 2025 11:13:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1745579604; bh=filZUCZu1uVbN8m4LwHDnoGpoCMzzgYVOEeequd4tbo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=u+6D1cBNYAUgjXTHoAGcBbmgkWyaz5S6diid/vO3pA2yPTCGNrbQBlvtbG99PoEeY WLVnRfzDCk+/61DNIIUAs6PTx8arPZIX38v1nT5Zif/rJJmINSEan7Y6aWI4smUwZL 3BRivWN0NQy707Y7LiAVhrEBI4mY3osOEHTY9ZF+iDApffMtKt/MyVLzEDNxaWq0WJ hN4OQYuy+LaxscO4cS4cYswa3g3XWOwvZ4L5TTrvAIDyXFhET1ot/IQl7qhKQGmr7z ltJugZrXiZHJgaEOWz5LuN98QO2E4DTjd7t+oBIumrsWo1TwDk8t2+Bgi/4xaFVJDV uaukuUvSu15Vg== From: "Jiri Slaby (SUSE)" To: gregkh@linuxfoundation.org Cc: linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org, "Jiri Slaby (SUSE)" Subject: [PATCH 4/6] serial: rename local uart_port_lock() -> uart_port_ref_lock() Date: Fri, 25 Apr 2025 13:13:13 +0200 Message-ID: <20250425111315.1036184-5-jirislaby@kernel.org> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250425111315.1036184-1-jirislaby@kernel.org> References: <20250425111315.1036184-1-jirislaby@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" uart_port_lock() and uart_port_unlock() are (at the same time) defined as: * functions in include/linux/serial_core.h * macros in drivers/tty/serial/serial_core.c The former are sane uart port lock wrappers. The latter _lock() does something completely different: it inspects a uart_state, obtains a uart_port from it, and increases its reference count. And if that all succeeded, the port is locked too. Similarly, the _unlock() counterpart first unlocks and then decrements the refcount too. This state is REALLY CONFUSING. So rename the latter (local .c macros): * uart_port_lock() -> uart_port_ref_lock(), and * uart_port_unlock() -> uart_port_unlock_deref(). Now, the forbidden while-at-it part: convert from a macro to an inline -- do it here as the passed 'flags' have to be pointer to ulong now. So we avoid doubled changes on identical LOCs. Signed-off-by: Jiri Slaby (SUSE) --- drivers/tty/serial/serial_core.c | 75 ++++++++++++++++---------------- 1 file changed, 38 insertions(+), 37 deletions(-) diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_c= ore.c index 5bc145643385..52e764be42c4 100644 --- a/drivers/tty/serial/serial_core.c +++ b/drivers/tty/serial/serial_core.c @@ -75,22 +75,23 @@ static inline void uart_port_deref(struct uart_port *up= ort) wake_up(&uport->state->remove_wait); } =20 -#define uart_port_lock(state, flags) \ - ({ \ - struct uart_port *__uport =3D uart_port_ref(state); \ - if (__uport) \ - uart_port_lock_irqsave(__uport, &flags); \ - __uport; \ - }) - -#define uart_port_unlock(uport, flags) \ - ({ \ - struct uart_port *__uport =3D uport; \ - if (__uport) { \ - uart_port_unlock_irqrestore(__uport, flags); \ - uart_port_deref(__uport); \ - } \ - }) +static inline struct uart_port *uart_port_ref_lock(struct uart_state *stat= e, unsigned long *flags) +{ + struct uart_port *uport =3D uart_port_ref(state); + + if (uport) + uart_port_lock_irqsave(uport, flags); + + return uport; +} + +static inline void uart_port_unlock_deref(struct uart_port *uport, unsigne= d long flags) +{ + if (uport) { + uart_port_unlock_irqrestore(uport, flags); + uart_port_deref(uport); + } +} =20 static inline struct uart_port *uart_port_check(struct uart_state *state) { @@ -127,10 +128,10 @@ static void uart_stop(struct tty_struct *tty) struct uart_port *port; unsigned long flags; =20 - port =3D uart_port_lock(state, flags); + port =3D uart_port_ref_lock(state, &flags); if (port) port->ops->stop_tx(port); - uart_port_unlock(port, flags); + uart_port_unlock_deref(port, flags); } =20 static void __uart_start(struct uart_state *state) @@ -168,9 +169,9 @@ static void uart_start(struct tty_struct *tty) struct uart_port *port; unsigned long flags; =20 - port =3D uart_port_lock(state, flags); + port =3D uart_port_ref_lock(state, &flags); __uart_start(state); - uart_port_unlock(port, flags); + uart_port_unlock_deref(port, flags); } =20 static void @@ -258,14 +259,14 @@ static int uart_alloc_xmit_buf(struct tty_port *port) if (!page) return -ENOMEM; =20 - uport =3D uart_port_lock(state, flags); + uport =3D uart_port_ref_lock(state, &flags); if (!state->port.xmit_buf) { state->port.xmit_buf =3D (unsigned char *)page; kfifo_init(&state->port.xmit_fifo, state->port.xmit_buf, PAGE_SIZE); - uart_port_unlock(uport, flags); + uart_port_unlock_deref(uport, flags); } else { - uart_port_unlock(uport, flags); + uart_port_unlock_deref(uport, flags); /* * Do not free() the page under the port lock, see * uart_free_xmit_buf(). @@ -289,11 +290,11 @@ static void uart_free_xmit_buf(struct tty_port *port) * console driver may need to allocate/free a debug object, which * can end up in printk() recursion. */ - uport =3D uart_port_lock(state, flags); + uport =3D uart_port_ref_lock(state, &flags); xmit_buf =3D port->xmit_buf; port->xmit_buf =3D NULL; INIT_KFIFO(port->xmit_fifo); - uart_port_unlock(uport, flags); + uart_port_unlock_deref(uport, flags); =20 free_page((unsigned long)xmit_buf); } @@ -592,15 +593,15 @@ static int uart_put_char(struct tty_struct *tty, u8 c) unsigned long flags; int ret =3D 0; =20 - port =3D uart_port_lock(state, flags); + port =3D uart_port_ref_lock(state, &flags); if (!state->port.xmit_buf) { - uart_port_unlock(port, flags); + uart_port_unlock_deref(port, flags); return 0; } =20 if (port) ret =3D kfifo_put(&state->port.xmit_fifo, c); - uart_port_unlock(port, flags); + uart_port_unlock_deref(port, flags); return ret; } =20 @@ -623,9 +624,9 @@ static ssize_t uart_write(struct tty_struct *tty, const= u8 *buf, size_t count) if (WARN_ON(!state)) return -EL3HLT; =20 - port =3D uart_port_lock(state, flags); + port =3D uart_port_ref_lock(state, &flags); if (!state->port.xmit_buf) { - uart_port_unlock(port, flags); + uart_port_unlock_deref(port, flags); return 0; } =20 @@ -633,7 +634,7 @@ static ssize_t uart_write(struct tty_struct *tty, const= u8 *buf, size_t count) ret =3D kfifo_in(&state->port.xmit_fifo, buf, count); =20 __uart_start(state); - uart_port_unlock(port, flags); + uart_port_unlock_deref(port, flags); return ret; } =20 @@ -644,9 +645,9 @@ static unsigned int uart_write_room(struct tty_struct *= tty) unsigned long flags; unsigned int ret; =20 - port =3D uart_port_lock(state, flags); + port =3D uart_port_ref_lock(state, &flags); ret =3D kfifo_avail(&state->port.xmit_fifo); - uart_port_unlock(port, flags); + uart_port_unlock_deref(port, flags); return ret; } =20 @@ -657,9 +658,9 @@ static unsigned int uart_chars_in_buffer(struct tty_str= uct *tty) unsigned long flags; unsigned int ret; =20 - port =3D uart_port_lock(state, flags); + port =3D uart_port_ref_lock(state, &flags); ret =3D kfifo_len(&state->port.xmit_fifo); - uart_port_unlock(port, flags); + uart_port_unlock_deref(port, flags); return ret; } =20 @@ -678,13 +679,13 @@ static void uart_flush_buffer(struct tty_struct *tty) =20 pr_debug("uart_flush_buffer(%d) called\n", tty->index); =20 - port =3D uart_port_lock(state, flags); + port =3D uart_port_ref_lock(state, &flags); if (!port) return; kfifo_reset(&state->port.xmit_fifo); if (port->ops->flush_buffer) port->ops->flush_buffer(port); - uart_port_unlock(port, flags); + uart_port_unlock_deref(port, flags); tty_port_tty_wakeup(&state->port); } =20 --=20 2.49.0 From nobody Sun Feb 8 04:30:11 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 78DE723DEB6; Fri, 25 Apr 2025 11:13:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745579606; cv=none; b=ON95vbYj0mVpP721gcCk7diup4TxYWhEUC4IVM7BdIek8fxxUtaKZiMpttaJkyISyDUB296ZAgs7CBCBjdfFgLrEyNheVnFfeIDZ+kc4BXTiNHnMVPkUue0jlmkWdUUzVgx5H+o4kQHpCipvzsAT1zdWVomEF9bJ4FG/+Ye4ZAA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745579606; c=relaxed/simple; bh=RZuTYAp+J9porolOraxUHRSEcCgxu0uikSg3bbj46JA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KykBn7ONzZSonw43TQ/iFyDofiZWG4EJPmB8QCMWZC7d50BwlOozpw2sMoc9AL7DUYgrQkdSNzmRkMUfZSN9skKgBV3EEJG9Ohy9u8tx+jeX4efvu2s33b9pMpHJs8yW7xyfue0CvzZ7t9yL6qdRx7w6edyBHIMZdHEH6d+97Uc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=TfyezEZE; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="TfyezEZE" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4B8C6C4CEEC; Fri, 25 Apr 2025 11:13:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1745579606; bh=RZuTYAp+J9porolOraxUHRSEcCgxu0uikSg3bbj46JA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=TfyezEZEFWNzXJsKPa+kOVL3vke2LJUdz7kerX9AeX/hfajo6MRtRwCafeMgtyg4e kQy1L18mN5EFqh4kql7uF+umyW4buXYgqM4p50lFQjlT02KOC1YwazS9nKVAAiQqqn WpSikoT/fIzCtD4g6hepGaku5/7vfURqpjXYk/gTtVVfecy1Zj7rv5SoU106Xk6mia 4tlnKUOdXdZ2lbA4PJtuFxat3Vi6F50YaNe4EnaupWnAMtypvoxzA/csG098XLxUt/ cHMqlFjiW7sXXG3HmW4imBltPe08jNkeQnwUErc4DGEY1ZMY5lRtdoZ3q/9/Zp01Hk maVpZtIVkFTZQ== From: "Jiri Slaby (SUSE)" To: gregkh@linuxfoundation.org Cc: linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org, "Jiri Slaby (SUSE)" Subject: [PATCH 5/6] serial: use uart_port_ref_lock() helper Date: Fri, 25 Apr 2025 13:13:14 +0200 Message-ID: <20250425111315.1036184-6-jirislaby@kernel.org> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250425111315.1036184-1-jirislaby@kernel.org> References: <20250425111315.1036184-1-jirislaby@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" uart_get_icount() and uart_carrier_raised() open code uart_port_ref_lock(). Use the helper instead. The difference is we use _irqsave() variants of a spinlock now. But that's "safer" than _irq(). Signed-off-by: Jiri Slaby (SUSE) --- drivers/tty/serial/serial_core.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_c= ore.c index 52e764be42c4..1f7708a91fc6 100644 --- a/drivers/tty/serial/serial_core.c +++ b/drivers/tty/serial/serial_core.c @@ -1276,14 +1276,13 @@ static int uart_get_icount(struct tty_struct *tty, struct uart_state *state =3D tty->driver_data; struct uart_icount cnow; struct uart_port *uport; + unsigned long flags; =20 - uport =3D uart_port_ref(state); + uport =3D uart_port_ref_lock(state, &flags); if (!uport) return -EIO; - uart_port_lock_irq(uport); memcpy(&cnow, &uport->icount, sizeof(struct uart_icount)); - uart_port_unlock_irq(uport); - uart_port_deref(uport); + uart_port_unlock_deref(uport, flags); =20 icount->cts =3D cnow.cts; icount->dsr =3D cnow.dsr; @@ -1915,9 +1914,10 @@ static bool uart_carrier_raised(struct tty_port *por= t) { struct uart_state *state =3D container_of(port, struct uart_state, port); struct uart_port *uport; + unsigned long flags; int mctrl; =20 - uport =3D uart_port_ref(state); + uport =3D uart_port_ref_lock(state, &flags); /* * Should never observe uport =3D=3D NULL since checks for hangup should * abort the tty_port_block_til_ready() loop before checking for carrier @@ -1926,11 +1926,9 @@ static bool uart_carrier_raised(struct tty_port *por= t) */ if (WARN_ON(!uport)) return true; - uart_port_lock_irq(uport); uart_enable_ms(uport); mctrl =3D uport->ops->get_mctrl(uport); - uart_port_unlock_irq(uport); - uart_port_deref(uport); + uart_port_unlock_deref(uport, flags); =20 return mctrl & TIOCM_CAR; } --=20 2.49.0 From nobody Sun Feb 8 04:30:11 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 6BFB3247296; Fri, 25 Apr 2025 11:13:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745579608; cv=none; b=nwqTE2MCludY4s773l9uF54GqNgTGFzl1XuC1g4EMKEwwLJiTDH2gVKyp7CJIv6s1wG6hi+5pp1SEk8GhQx3AADoBRCykxUgIJ3ZcsDaoOfarDW9Qr+cySpNK3uCTYzNZZCtwbK/DEDAnwdfjpT3qm9xF6vIovotCIFDM3kNPuA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745579608; c=relaxed/simple; bh=eHzpMz9AO2Qs81JLFnHQfncC/xP1wFP/iEHlEzVp/R0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rU0SEI+6m+qSooWyxCDGRuaIQddUa1zXH05dT9QTORX7MgV+QwCMKiOpvDGJgmTOoOeW/NiQ2a+qFJzuxgvHdmwzdZpZNO0ue3jVeR/6/cXvpZOp+3ehAf5kh2sL5pb11tKITVs3Cm9jrSpP2jHXqHJwY1H1noEjyCZuphaDV6w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=pOilTSPn; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="pOilTSPn" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C9BCBC4CEEB; Fri, 25 Apr 2025 11:13:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1745579607; bh=eHzpMz9AO2Qs81JLFnHQfncC/xP1wFP/iEHlEzVp/R0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=pOilTSPn97sckrCaes4ytLfTlnasjomjxTYK1igsIYB+ZSi16VndVsaZnkqkarCfh KnaWhepPzzbZEXRII+QdsaybpZ+1PaTyNQjhM7nBy4/ywTxW+KOXtSAPgVTxqXFdlf xvnNeEaCGrbPkd/QHy85lhUaqpO2cEYtJkN84g5YFwsx0oPXdXY65m9Tl9kKohLpNj O6DJdfmXjPK2L4d5bCPIrdOHW//A58B4RQvJ+idi1WFN1ZcLgH7Z2ZWgsky4SgmyJm mbL5Li4JGW+3IWfKKZGtUDwkvkTc4tadvVIMBcHoY3OyvlWB/chWgRANWWnkQT5W/V r8fpajVN1VnrQ== From: "Jiri Slaby (SUSE)" To: gregkh@linuxfoundation.org Cc: linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org, "Jiri Slaby (SUSE)" Subject: [PATCH 6/6] serial: 8250: unexport serial8250_rpm_*() functions Date: Fri, 25 Apr 2025 13:13:15 +0200 Message-ID: <20250425111315.1036184-7-jirislaby@kernel.org> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250425111315.1036184-1-jirislaby@kernel.org> References: <20250425111315.1036184-1-jirislaby@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Since commit 8700a7ea5519 (serial: 8250_omap: Drop pm_runtime_irq_safe()), all the serial8250_rpm_*() functions are used solely in 8250_port. Unexport them. Signed-off-by: Jiri Slaby (SUSE) --- drivers/tty/serial/8250/8250.h | 6 ------ drivers/tty/serial/8250/8250_port.c | 12 ++++-------- 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/drivers/tty/serial/8250/8250.h b/drivers/tty/serial/8250/8250.h index b861585ca02a..18530c31a598 100644 --- a/drivers/tty/serial/8250/8250.h +++ b/drivers/tty/serial/8250/8250.h @@ -223,12 +223,6 @@ static inline bool serial8250_clear_THRI(struct uart_8= 250_port *up) struct uart_8250_port *serial8250_setup_port(int index); struct uart_8250_port *serial8250_get_port(int line); =20 -void serial8250_rpm_get(struct uart_8250_port *p); -void serial8250_rpm_put(struct uart_8250_port *p); - -void serial8250_rpm_get_tx(struct uart_8250_port *p); -void serial8250_rpm_put_tx(struct uart_8250_port *p); - int serial8250_em485_config(struct uart_port *port, struct ktermios *termi= os, struct serial_rs485 *rs485); void serial8250_em485_start_tx(struct uart_8250_port *p, bool toggle_ier); diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/= 8250_port.c index 8d9bb91d4bae..6d7b8c4667c9 100644 --- a/drivers/tty/serial/8250/8250_port.c +++ b/drivers/tty/serial/8250/8250_port.c @@ -517,22 +517,20 @@ void serial8250_clear_and_reinit_fifos(struct uart_82= 50_port *p) } EXPORT_SYMBOL_GPL(serial8250_clear_and_reinit_fifos); =20 -void serial8250_rpm_get(struct uart_8250_port *p) +static void serial8250_rpm_get(struct uart_8250_port *p) { if (!(p->capabilities & UART_CAP_RPM)) return; pm_runtime_get_sync(p->port.dev); } -EXPORT_SYMBOL_GPL(serial8250_rpm_get); =20 -void serial8250_rpm_put(struct uart_8250_port *p) +static void serial8250_rpm_put(struct uart_8250_port *p) { if (!(p->capabilities & UART_CAP_RPM)) return; pm_runtime_mark_last_busy(p->port.dev); pm_runtime_put_autosuspend(p->port.dev); } -EXPORT_SYMBOL_GPL(serial8250_rpm_put); =20 /** * serial8250_em485_init() - put uart_8250_port into rs485 emulating @@ -647,7 +645,7 @@ EXPORT_SYMBOL_GPL(serial8250_em485_config); * once and disable_runtime_pm_tx() will still disable RPM because the fif= o is * empty and the HW can idle again. */ -void serial8250_rpm_get_tx(struct uart_8250_port *p) +static void serial8250_rpm_get_tx(struct uart_8250_port *p) { unsigned char rpm_active; =20 @@ -659,9 +657,8 @@ void serial8250_rpm_get_tx(struct uart_8250_port *p) return; pm_runtime_get_sync(p->port.dev); } -EXPORT_SYMBOL_GPL(serial8250_rpm_get_tx); =20 -void serial8250_rpm_put_tx(struct uart_8250_port *p) +static void serial8250_rpm_put_tx(struct uart_8250_port *p) { unsigned char rpm_active; =20 @@ -674,7 +671,6 @@ void serial8250_rpm_put_tx(struct uart_8250_port *p) pm_runtime_mark_last_busy(p->port.dev); pm_runtime_put_autosuspend(p->port.dev); } -EXPORT_SYMBOL_GPL(serial8250_rpm_put_tx); =20 /* * IER sleep support. UARTs which have EFRs need the "extended --=20 2.49.0