Re: [PATCH 1/1] tty: serial: uartlite: allow 64 bit address

From: Lizhi Hou
Date: Tue Nov 23 2021 - 15:12:17 EST



On 11/23/21 10:59 AM, Greg KH wrote:

On Tue, Nov 23, 2021 at 10:45:06AM -0800, Lizhi Hou wrote:
Fix the uartlite probe failure when it is mapped to address above 4G.
Fix it how?

Does this detail comment look ok to you?

The base address of uartlite registers could be 64 bit address which is from device resource. When ulite_probe() calls ulite_assign(), this 64 bit address is casted to 32-bit. The fix is to replace "u32" type with "phys_addr_t" type for the base address in ulite_assign() argument list.


Signed-off-by: Lizhi Hou <lizhi.hou@xxxxxxxxxx>
What commit caused this problem? What commit does this fix? Should it
go to stable kernels?

I searched the history. This problem was introduced by https://github.com/torvalds/linux/commit/8fa7b6100693e0b648ffd34564f6f41226502a19

And yes, I agree this should go to stable kernels. I will add stable@xxxxxxxxxxxxxxx to cc list.


---
drivers/tty/serial/uartlite.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/tty/serial/uartlite.c b/drivers/tty/serial/uartlite.c
index d3d9566e5dbd..e1fa52d31474 100644
--- a/drivers/tty/serial/uartlite.c
+++ b/drivers/tty/serial/uartlite.c
@@ -626,7 +626,7 @@ static struct uart_driver ulite_uart_driver = {
*
* Returns: 0 on success, <0 otherwise
*/
-static int ulite_assign(struct device *dev, int id, u32 base, int irq,
+static int ulite_assign(struct device *dev, int id, phys_addr_t base, int irq,
struct uartlite_data *pdata)
So you changed the variable type which does what exactly here?

ulite_probe()

   -> ulite_assign(&pdev->dev, id, res->start, irq, pdata)

                                                       ^^^^^^ could be 64-bit address. Thus "u32 base" may lose the high 32-bit.

Hopefully this makes sense to you. And I can re-submit an updated patch.

Thanks,

Lizhi


thanks,

greg k-h