Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 9 additions & 2 deletions drivers/tty/serial/serial_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,10 @@ static DEFINE_MUTEX(port_mutex);
*/
static struct lock_class_key port_lock_key;

static struct device_type anon_dev_type = {
.name = "anon_port",
};

#define HIGH_BITS_OFFSET ((sizeof(long)-sizeof(int))*8)

/*
Expand Down Expand Up @@ -3396,6 +3400,7 @@ int serial_core_register_port(struct uart_driver *drv, struct uart_port *port)
{
struct serial_ctrl_device *ctrl_dev, *new_ctrl_dev = NULL;
int ret;
bool is_parent_anon_port = false;

mutex_lock(&port_mutex);

Expand All @@ -3419,6 +3424,8 @@ int serial_core_register_port(struct uart_driver *drv, struct uart_port *port)
}

port->dev = &pdev->dev;
port->dev->type = &anon_dev_type;
is_parent_anon_port = true;
}

/* Inititalize a serial core controller device if needed */
Expand Down Expand Up @@ -3457,7 +3464,7 @@ int serial_core_register_port(struct uart_driver *drv, struct uart_port *port)
err_unregister_ctrl_dev:
serial_base_ctrl_device_remove(new_ctrl_dev);

if (strncmp(to_platform_device(port->dev)->name, "anon_port", 9) == 0)
if (is_parent_anon_port)
platform_device_del(to_platform_device(port->dev));

err_unlock:
Expand Down Expand Up @@ -3490,7 +3497,7 @@ void serial_core_unregister_port(struct uart_driver *drv, struct uart_port *port
if (!serial_core_ctrl_find(drv, phys_dev, ctrl_id))
serial_base_ctrl_device_remove(ctrl_dev);

if (strncmp(to_platform_device(phys_dev)->name, "anon_port", 9) == 0)
if (phys_dev->type == &anon_dev_type)
platform_device_del(to_platform_device(phys_dev));

mutex_unlock(&port_mutex);
Expand Down