* [PATCH] tty: serial: Replace deprecated PCI API @ 2025-11-26 9:10 Philipp Stanner 2025-11-26 17:02 ` Guenter Roeck 0 siblings, 1 reply; 7+ messages in thread From: Philipp Stanner @ 2025-11-26 9:10 UTC (permalink / raw) To: Greg Kroah-Hartman, Jiri Slaby, Philipp Stanner, Peter Zijlstra Cc: linux-kernel, linux-serial, Guenter Roeck pcim_iomap_table() is deprecated. Moreover, its special usage in 8250, causes a WARN_ON to fire (in pcim_add_mapping_to_legacy_table()). 8250's function serial8250_pci_setup_port() effectively maps the same BAR multiple times and adds an offset to the start address. While mapping and adding offsets is not a bug, it can be achieved in a far more straightforward way by using the specialized function pcim_iomap_range(). pcim_iomap_range() does not add the mapping addresses to the deprecated iomap table - that's not a problem, however, because non of the users of serial8250_pci_setup_port() uses pcim_iomap_table(). Replace the deprecated PCI functions with pcim_iomap_range(). Cc: Guenter Roeck <linux@roeck-us.net> Link: https://lore.kernel.org/dri-devel/16cd212f-6ea0-471d-bf32-34f55d7292fe@roeck-us.net/ Signed-off-by: Philipp Stanner <phasta@kernel.org> --- @Guenther: Can you please test this? I hope it fixes your issue. --- drivers/tty/serial/8250/8250_pcilib.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/drivers/tty/serial/8250/8250_pcilib.c b/drivers/tty/serial/8250/8250_pcilib.c index d8d0ae0d7238..f98eb2ab1005 100644 --- a/drivers/tty/serial/8250/8250_pcilib.c +++ b/drivers/tty/serial/8250/8250_pcilib.c @@ -28,13 +28,14 @@ int serial8250_pci_setup_port(struct pci_dev *dev, struct uart_8250_port *port, return -EINVAL; if (pci_resource_flags(dev, bar) & IORESOURCE_MEM) { - if (!pcim_iomap(dev, bar, 0) && !pcim_iomap_table(dev)) - return -ENOMEM; - port->port.iotype = UPIO_MEM; port->port.iobase = 0; port->port.mapbase = pci_resource_start(dev, bar) + offset; - port->port.membase = pcim_iomap_table(dev)[bar] + offset; + + port->port.membase = pcim_iomap_range(dev, bar, offset, 0); + if (IS_ERR(port->port.membase)) + return PTR_ERR(port->port.membase); + port->port.regshift = regshift; } else if (IS_ENABLED(CONFIG_HAS_IOPORT)) { port->port.iotype = UPIO_PORT; -- 2.49.0 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH] tty: serial: Replace deprecated PCI API 2025-11-26 9:10 [PATCH] tty: serial: Replace deprecated PCI API Philipp Stanner @ 2025-11-26 17:02 ` Guenter Roeck 2025-12-11 13:57 ` Philipp Stanner 0 siblings, 1 reply; 7+ messages in thread From: Guenter Roeck @ 2025-11-26 17:02 UTC (permalink / raw) To: Philipp Stanner, Greg Kroah-Hartman, Jiri Slaby, Peter Zijlstra Cc: linux-kernel, linux-serial On 11/26/25 01:10, Philipp Stanner wrote: > pcim_iomap_table() is deprecated. Moreover, its special usage in 8250, > causes a WARN_ON to fire (in pcim_add_mapping_to_legacy_table()). > > 8250's function serial8250_pci_setup_port() effectively maps the same > BAR multiple times and adds an offset to the start address. While > mapping and adding offsets is not a bug, it can be achieved in a far > more straightforward way by using the specialized function > pcim_iomap_range(). > > pcim_iomap_range() does not add the mapping addresses to the deprecated > iomap table - that's not a problem, however, because non of the users of > serial8250_pci_setup_port() uses pcim_iomap_table(). > > Replace the deprecated PCI functions with pcim_iomap_range(). > > Cc: Guenter Roeck <linux@roeck-us.net> > Link: https://lore.kernel.org/dri-devel/16cd212f-6ea0-471d-bf32-34f55d7292fe@roeck-us.net/ > Signed-off-by: Philipp Stanner <phasta@kernel.org> > --- > @Guenther: Can you please test this? I hope it fixes your issue. Yes, it does. Thanks a lot for fixing this! Tested-by: Guenter Roeck <linux@roeck-us.net> > --- > drivers/tty/serial/8250/8250_pcilib.c | 9 +++++---- > 1 file changed, 5 insertions(+), 4 deletions(-) > > diff --git a/drivers/tty/serial/8250/8250_pcilib.c b/drivers/tty/serial/8250/8250_pcilib.c > index d8d0ae0d7238..f98eb2ab1005 100644 > --- a/drivers/tty/serial/8250/8250_pcilib.c > +++ b/drivers/tty/serial/8250/8250_pcilib.c > @@ -28,13 +28,14 @@ int serial8250_pci_setup_port(struct pci_dev *dev, struct uart_8250_port *port, > return -EINVAL; > > if (pci_resource_flags(dev, bar) & IORESOURCE_MEM) { > - if (!pcim_iomap(dev, bar, 0) && !pcim_iomap_table(dev)) > - return -ENOMEM; > - > port->port.iotype = UPIO_MEM; > port->port.iobase = 0; > port->port.mapbase = pci_resource_start(dev, bar) + offset; > - port->port.membase = pcim_iomap_table(dev)[bar] + offset; > + > + port->port.membase = pcim_iomap_range(dev, bar, offset, 0); > + if (IS_ERR(port->port.membase)) > + return PTR_ERR(port->port.membase); > + > port->port.regshift = regshift; > } else if (IS_ENABLED(CONFIG_HAS_IOPORT)) { > port->port.iotype = UPIO_PORT; ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] tty: serial: Replace deprecated PCI API 2025-11-26 17:02 ` Guenter Roeck @ 2025-12-11 13:57 ` Philipp Stanner 2025-12-17 14:06 ` Greg Kroah-Hartman 0 siblings, 1 reply; 7+ messages in thread From: Philipp Stanner @ 2025-12-11 13:57 UTC (permalink / raw) To: Guenter Roeck, Philipp Stanner, Greg Kroah-Hartman, Jiri Slaby, Peter Zijlstra Cc: linux-kernel, linux-serial On Wed, 2025-11-26 at 09:02 -0800, Guenter Roeck wrote: > On 11/26/25 01:10, Philipp Stanner wrote: > > pcim_iomap_table() is deprecated. Moreover, its special usage in 8250, > > causes a WARN_ON to fire (in pcim_add_mapping_to_legacy_table()). > > > > 8250's function serial8250_pci_setup_port() effectively maps the same > > BAR multiple times and adds an offset to the start address. While > > mapping and adding offsets is not a bug, it can be achieved in a far > > more straightforward way by using the specialized function > > pcim_iomap_range(). > > > > pcim_iomap_range() does not add the mapping addresses to the deprecated > > iomap table - that's not a problem, however, because non of the users of > > serial8250_pci_setup_port() uses pcim_iomap_table(). > > > > Replace the deprecated PCI functions with pcim_iomap_range(). > > > > Cc: Guenter Roeck <linux@roeck-us.net> > > Link: https://lore.kernel.org/dri-devel/16cd212f-6ea0-471d-bf32-34f55d7292fe@roeck-us.net/ > > Signed-off-by: Philipp Stanner <phasta@kernel.org> > > --- > > @Guenther: Can you please test this? I hope it fixes your issue. > > Yes, it does. Thanks a lot for fixing this! > > Tested-by: Guenter Roeck <linux@roeck-us.net> @Greg: Can you apply this? P. > > > --- > > drivers/tty/serial/8250/8250_pcilib.c | 9 +++++---- > > 1 file changed, 5 insertions(+), 4 deletions(-) > > > > diff --git a/drivers/tty/serial/8250/8250_pcilib.c b/drivers/tty/serial/8250/8250_pcilib.c > > index d8d0ae0d7238..f98eb2ab1005 100644 > > --- a/drivers/tty/serial/8250/8250_pcilib.c > > +++ b/drivers/tty/serial/8250/8250_pcilib.c > > @@ -28,13 +28,14 @@ int serial8250_pci_setup_port(struct pci_dev *dev, struct uart_8250_port *port, > > return -EINVAL; > > > > if (pci_resource_flags(dev, bar) & IORESOURCE_MEM) { > > - if (!pcim_iomap(dev, bar, 0) && !pcim_iomap_table(dev)) > > - return -ENOMEM; > > - > > port->port.iotype = UPIO_MEM; > > port->port.iobase = 0; > > port->port.mapbase = pci_resource_start(dev, bar) + offset; > > - port->port.membase = pcim_iomap_table(dev)[bar] + offset; > > + > > + port->port.membase = pcim_iomap_range(dev, bar, offset, 0); > > + if (IS_ERR(port->port.membase)) > > + return PTR_ERR(port->port.membase); > > + > > port->port.regshift = regshift; > > } else if (IS_ENABLED(CONFIG_HAS_IOPORT)) { > > port->port.iotype = UPIO_PORT; > ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] tty: serial: Replace deprecated PCI API 2025-12-11 13:57 ` Philipp Stanner @ 2025-12-17 14:06 ` Greg Kroah-Hartman 2025-12-17 16:11 ` Guenter Roeck 0 siblings, 1 reply; 7+ messages in thread From: Greg Kroah-Hartman @ 2025-12-17 14:06 UTC (permalink / raw) To: phasta Cc: Guenter Roeck, Jiri Slaby, Peter Zijlstra, linux-kernel, linux-serial On Thu, Dec 11, 2025 at 02:57:46PM +0100, Philipp Stanner wrote: > On Wed, 2025-11-26 at 09:02 -0800, Guenter Roeck wrote: > > On 11/26/25 01:10, Philipp Stanner wrote: > > > pcim_iomap_table() is deprecated. Moreover, its special usage in 8250, > > > causes a WARN_ON to fire (in pcim_add_mapping_to_legacy_table()). > > > > > > 8250's function serial8250_pci_setup_port() effectively maps the same > > > BAR multiple times and adds an offset to the start address. While > > > mapping and adding offsets is not a bug, it can be achieved in a far > > > more straightforward way by using the specialized function > > > pcim_iomap_range(). > > > > > > pcim_iomap_range() does not add the mapping addresses to the deprecated > > > iomap table - that's not a problem, however, because non of the users of > > > serial8250_pci_setup_port() uses pcim_iomap_table(). > > > > > > Replace the deprecated PCI functions with pcim_iomap_range(). > > > > > > Cc: Guenter Roeck <linux@roeck-us.net> > > > Link: https://lore.kernel.org/dri-devel/16cd212f-6ea0-471d-bf32-34f55d7292fe@roeck-us.net/ > > > Signed-off-by: Philipp Stanner <phasta@kernel.org> > > > --- > > > @Guenther: Can you please test this? I hope it fixes your issue. > > > > Yes, it does. Thanks a lot for fixing this! > > > > Tested-by: Guenter Roeck <linux@roeck-us.net> > > @Greg: > Can you apply this? Does not apply at all to 6.19-rc1 :( Can you please rebase and resend? thanks, greg k-h ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] tty: serial: Replace deprecated PCI API 2025-12-17 14:06 ` Greg Kroah-Hartman @ 2025-12-17 16:11 ` Guenter Roeck 2025-12-18 9:02 ` Philipp Stanner 0 siblings, 1 reply; 7+ messages in thread From: Guenter Roeck @ 2025-12-17 16:11 UTC (permalink / raw) To: Greg Kroah-Hartman, phasta Cc: Jiri Slaby, Peter Zijlstra, linux-kernel, linux-serial On 12/17/25 06:06, Greg Kroah-Hartman wrote: > On Thu, Dec 11, 2025 at 02:57:46PM +0100, Philipp Stanner wrote: >> On Wed, 2025-11-26 at 09:02 -0800, Guenter Roeck wrote: >>> On 11/26/25 01:10, Philipp Stanner wrote: >>>> pcim_iomap_table() is deprecated. Moreover, its special usage in 8250, >>>> causes a WARN_ON to fire (in pcim_add_mapping_to_legacy_table()). >>>> >>>> 8250's function serial8250_pci_setup_port() effectively maps the same >>>> BAR multiple times and adds an offset to the start address. While >>>> mapping and adding offsets is not a bug, it can be achieved in a far >>>> more straightforward way by using the specialized function >>>> pcim_iomap_range(). >>>> >>>> pcim_iomap_range() does not add the mapping addresses to the deprecated >>>> iomap table - that's not a problem, however, because non of the users of >>>> serial8250_pci_setup_port() uses pcim_iomap_table(). >>>> >>>> Replace the deprecated PCI functions with pcim_iomap_range(). >>>> >>>> Cc: Guenter Roeck <linux@roeck-us.net> >>>> Link: https://lore.kernel.org/dri-devel/16cd212f-6ea0-471d-bf32-34f55d7292fe@roeck-us.net/ >>>> Signed-off-by: Philipp Stanner <phasta@kernel.org> >>>> --- >>>> @Guenther: Can you please test this? I hope it fixes your issue. >>> >>> Yes, it does. Thanks a lot for fixing this! >>> >>> Tested-by: Guenter Roeck <linux@roeck-us.net> >> >> @Greg: >> Can you apply this? > > Does not apply at all to 6.19-rc1 :( > It conflicts with commit b7cefdb663382 ("serial: 8250_pcilib: Replace deprecated PCI functions"). Unfortunately that commit does not fix the problem; I still see it with v6.19-rc1. Guenter ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] tty: serial: Replace deprecated PCI API 2025-12-17 16:11 ` Guenter Roeck @ 2025-12-18 9:02 ` Philipp Stanner 2025-12-18 9:30 ` Philipp Stanner 0 siblings, 1 reply; 7+ messages in thread From: Philipp Stanner @ 2025-12-18 9:02 UTC (permalink / raw) To: Guenter Roeck, Greg Kroah-Hartman, phasta Cc: Jiri Slaby, Peter Zijlstra, linux-kernel, linux-serial, Florian Eckert +Cc Florian On Wed, 2025-12-17 at 08:11 -0800, Guenter Roeck wrote: > On 12/17/25 06:06, Greg Kroah-Hartman wrote: > > On Thu, Dec 11, 2025 at 02:57:46PM +0100, Philipp Stanner wrote: > > > On Wed, 2025-11-26 at 09:02 -0800, Guenter Roeck wrote: > > > > On 11/26/25 01:10, Philipp Stanner wrote: > > > > > pcim_iomap_table() is deprecated. Moreover, its special usage in 8250, > > > > > causes a WARN_ON to fire (in pcim_add_mapping_to_legacy_table()). > > > > > > > > > > 8250's function serial8250_pci_setup_port() effectively maps the same > > > > > BAR multiple times and adds an offset to the start address. While > > > > > mapping and adding offsets is not a bug, it can be achieved in a far > > > > > more straightforward way by using the specialized function > > > > > pcim_iomap_range(). > > > > > > > > > > pcim_iomap_range() does not add the mapping addresses to the deprecated > > > > > iomap table - that's not a problem, however, because non of the users of > > > > > serial8250_pci_setup_port() uses pcim_iomap_table(). > > > > > > > > > > Replace the deprecated PCI functions with pcim_iomap_range(). > > > > > > > > > > Cc: Guenter Roeck <linux@roeck-us.net> > > > > > Link: https://lore.kernel.org/dri-devel/16cd212f-6ea0-471d-bf32-34f55d7292fe@roeck-us.net/ > > > > > Signed-off-by: Philipp Stanner <phasta@kernel.org> > > > > > --- > > > > > @Guenther: Can you please test this? I hope it fixes your issue. > > > > > > > > Yes, it does. Thanks a lot for fixing this! > > > > > > > > Tested-by: Guenter Roeck <linux@roeck-us.net> > > > > > > @Greg: > > > Can you apply this? > > > > Does not apply at all to 6.19-rc1 :( > > > > It conflicts with commit b7cefdb663382 ("serial: 8250_pcilib: Replace deprecated > PCI functions"). Unfortunately that commit does not fix the problem; I still > see it with v6.19-rc1. Without me being too familiar with the code, it seems that that commit didn't do what it promised, which is getting rid of the multiple mappings of the same BAR. Presumably it is mapped multiple times through setup_port(): diff --git a/drivers/tty/serial/8250/8250_pci.c b/drivers/tty/serial/8250/8250_pci.c index 152f914c599d..f0f13fdda2df 100644 --- a/drivers/tty/serial/8250/8250_pci.c +++ b/drivers/tty/serial/8250/8250_pci.c @@ -165,7 +165,15 @@ static int setup_port(struct serial_private *priv, struct uart_8250_port *port, u8 bar, unsigned int offset, int regshift) { - return serial8250_pci_setup_port(priv->dev, port, bar, offset, regshift); + void __iomem *iomem = NULL; + + if (pci_resource_flags(priv->dev, bar) & IORESOURCE_MEM) { + iomem = pcim_iomap(priv->dev, bar, 0); + if (!iomem) + return -ENOMEM; + } + + return serial8250_pci_setup_port(priv->dev, port, bar, offset, regshift, iomem); } Note that pcim_iomap() is the party that is *adding* the mappings to the legacy table, whereas pcim_iomap_table() was just used to access those. In any case, I'm quite confident that this description of intended behavior from the commit message "the remapping should only be called once via 'pcim_iomap()'. Therefore the remapping moved to the caller of 'serial8250_pci_setup_port()'." has not been implemented in the actual code. Otherwise the WARN_ON couldn't fire. My personal opinion is that mapping the same BAR multiple times is not a bug and there is no real practical reason why it shouldn't be done when it can make sense. pci_iomap_range() exists for that reason since quite some time. So my suggested fix for this would be to revert b7cefdb663382 and apply my patch here instead. P. > > Guenter > ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH] tty: serial: Replace deprecated PCI API 2025-12-18 9:02 ` Philipp Stanner @ 2025-12-18 9:30 ` Philipp Stanner 0 siblings, 0 replies; 7+ messages in thread From: Philipp Stanner @ 2025-12-18 9:30 UTC (permalink / raw) To: phasta, Guenter Roeck, Greg Kroah-Hartman Cc: Jiri Slaby, Peter Zijlstra, linux-kernel, linux-serial, Florian Eckert On Thu, 2025-12-18 at 10:02 +0100, Philipp Stanner wrote: > +Cc Florian > > On Wed, 2025-12-17 at 08:11 -0800, Guenter Roeck wrote: > > On 12/17/25 06:06, Greg Kroah-Hartman wrote: > > > On Thu, Dec 11, 2025 at 02:57:46PM +0100, Philipp Stanner wrote: > > > > On Wed, 2025-11-26 at 09:02 -0800, Guenter Roeck wrote: > > > > > On 11/26/25 01:10, Philipp Stanner wrote: > > > > > > pcim_iomap_table() is deprecated. Moreover, its special usage in 8250, > > > > > > causes a WARN_ON to fire (in pcim_add_mapping_to_legacy_table()). > > > > > > > > > > > > 8250's function serial8250_pci_setup_port() effectively maps the same > > > > > > BAR multiple times and adds an offset to the start address. While > > > > > > mapping and adding offsets is not a bug, it can be achieved in a far > > > > > > more straightforward way by using the specialized function > > > > > > pcim_iomap_range(). > > > > > > > > > > > > pcim_iomap_range() does not add the mapping addresses to the deprecated > > > > > > iomap table - that's not a problem, however, because non of the users of > > > > > > serial8250_pci_setup_port() uses pcim_iomap_table(). > > > > > > > > > > > > Replace the deprecated PCI functions with pcim_iomap_range(). > > > > > > > > > > > > Cc: Guenter Roeck <linux@roeck-us.net> > > > > > > Link: https://lore.kernel.org/dri-devel/16cd212f-6ea0-471d-bf32-34f55d7292fe@roeck-us.net/ > > > > > > Signed-off-by: Philipp Stanner <phasta@kernel.org> > > > > > > --- > > > > > > @Guenther: Can you please test this? I hope it fixes your issue. > > > > > > > > > > Yes, it does. Thanks a lot for fixing this! > > > > > > > > > > Tested-by: Guenter Roeck <linux@roeck-us.net> > > > > > > > > @Greg: > > > > Can you apply this? > > > > > > Does not apply at all to 6.19-rc1 :( > > > > > > > It conflicts with commit b7cefdb663382 ("serial: 8250_pcilib: Replace deprecated > > PCI functions"). Unfortunately that commit does not fix the problem; I still > > see it with v6.19-rc1. > > Without me being too familiar with the code, it seems that that commit > didn't do what it promised, which is getting rid of the multiple > mappings of the same BAR. Presumably it is mapped multiple times > through setup_port(): > > diff --git a/drivers/tty/serial/8250/8250_pci.c b/drivers/tty/serial/8250/8250_pci.c > index 152f914c599d..f0f13fdda2df 100644 > --- a/drivers/tty/serial/8250/8250_pci.c > +++ b/drivers/tty/serial/8250/8250_pci.c > @@ -165,7 +165,15 @@ static int > setup_port(struct serial_private *priv, struct uart_8250_port *port, > u8 bar, unsigned int offset, int regshift) > { > - return serial8250_pci_setup_port(priv->dev, port, bar, offset, regshift); > + void __iomem *iomem = NULL; > + > + if (pci_resource_flags(priv->dev, bar) & IORESOURCE_MEM) { > + iomem = pcim_iomap(priv->dev, bar, 0); > + if (!iomem) > + return -ENOMEM; > + } > + > + return serial8250_pci_setup_port(priv->dev, port, bar, offset, regshift, iomem); > } > > > Note that pcim_iomap() is the party that is *adding* the mappings to > the legacy table, whereas pcim_iomap_table() was just used to access > those. > > In any case, I'm quite confident that this description of intended > behavior from the commit message > > "the remapping should only be called once via 'pcim_iomap()'. Therefore > the remapping moved to the caller of 'serial8250_pci_setup_port()'." > > has not been implemented in the actual code. Otherwise the WARN_ON > couldn't fire. > > > My personal opinion is that mapping the same BAR multiple times is not > a bug and there is no real practical reason why it shouldn't be done > when it can make sense. pci_iomap_range() exists for that reason since > quite some time. > > So my suggested fix for this would be to revert b7cefdb663382 and apply > my patch here instead. Ah, nevermind. I thought about it and it's probably safe to say that that WARN_ON is useless anyways. So since Florian has already done the work of getting rid of the deprecated function, I think the clean thing to do is to remove the WARN_ON from PCI. I proposed this to Bjorn today: https://lore.kernel.org/all/20251218092819.149665-2-phasta@kernel.org/ Sorry for the noise P. ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2025-12-18 9:30 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-11-26 9:10 [PATCH] tty: serial: Replace deprecated PCI API Philipp Stanner 2025-11-26 17:02 ` Guenter Roeck 2025-12-11 13:57 ` Philipp Stanner 2025-12-17 14:06 ` Greg Kroah-Hartman 2025-12-17 16:11 ` Guenter Roeck 2025-12-18 9:02 ` Philipp Stanner 2025-12-18 9:30 ` Philipp Stanner
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox