You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge 3.9-rc5 into tty-next
We need the fixes here as well. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
@@ -3422,6 +3422,7 @@ MODULE_PARM_DESC(probe_rsa, "Probe I/O ports for RSA");
|
||||
#endif
|
||||
MODULE_ALIAS_CHARDEV_MAJOR(TTY_MAJOR);
|
||||
|
||||
#ifdef CONFIG_SERIAL_8250_DEPRECATED_OPTIONS
|
||||
#ifndef MODULE
|
||||
/* This module was renamed to 8250_core in 3.7. Keep the old "8250" name
|
||||
* working as well for the module options so we don't break people. We
|
||||
@@ -3436,7 +3437,7 @@ MODULE_ALIAS_CHARDEV_MAJOR(TTY_MAJOR);
|
||||
static void __used s8250_options(void)
|
||||
{
|
||||
#undef MODULE_PARAM_PREFIX
|
||||
#define MODULE_PARAM_PREFIX "8250."
|
||||
#define MODULE_PARAM_PREFIX "8250_core."
|
||||
|
||||
module_param_cb(share_irqs, ¶m_ops_uint, &share_irqs, 0644);
|
||||
module_param_cb(nr_uarts, ¶m_ops_uint, &nr_uarts, 0644);
|
||||
@@ -3448,5 +3449,6 @@ static void __used s8250_options(void)
|
||||
#endif
|
||||
}
|
||||
#else
|
||||
MODULE_ALIAS("8250");
|
||||
MODULE_ALIAS("8250_core");
|
||||
#endif
|
||||
#endif
|
||||
@@ -1554,6 +1554,7 @@ pci_wch_ch353_setup(struct serial_private *priv,
|
||||
#define PCI_DEVICE_ID_PLX_CRONYX_OMEGA 0xc001
|
||||
#define PCI_DEVICE_ID_INTEL_PATSBURG_KT 0x1d3d
|
||||
#define PCI_VENDOR_ID_WCH 0x4348
|
||||
#define PCI_DEVICE_ID_WCH_CH352_2S 0x3253
|
||||
#define PCI_DEVICE_ID_WCH_CH353_4S 0x3453
|
||||
#define PCI_DEVICE_ID_WCH_CH353_2S1PF 0x5046
|
||||
#define PCI_DEVICE_ID_WCH_CH353_2S1P 0x7053
|
||||
@@ -2172,6 +2173,14 @@ static struct pci_serial_quirk pci_serial_quirks[] __refdata = {
|
||||
.subdevice = PCI_ANY_ID,
|
||||
.setup = pci_wch_ch353_setup,
|
||||
},
|
||||
/* WCH CH352 2S card (16550 clone) */
|
||||
{
|
||||
.vendor = PCI_VENDOR_ID_WCH,
|
||||
.device = PCI_DEVICE_ID_WCH_CH352_2S,
|
||||
.subvendor = PCI_ANY_ID,
|
||||
.subdevice = PCI_ANY_ID,
|
||||
.setup = pci_wch_ch353_setup,
|
||||
},
|
||||
/*
|
||||
* ASIX devices with FIFO bug
|
||||
*/
|
||||
@@ -4870,6 +4879,10 @@ static struct pci_device_id serial_pci_tbl[] = {
|
||||
PCI_ANY_ID, PCI_ANY_ID,
|
||||
0, 0, pbn_b0_bt_2_115200 },
|
||||
|
||||
{ PCI_VENDOR_ID_WCH, PCI_DEVICE_ID_WCH_CH352_2S,
|
||||
PCI_ANY_ID, PCI_ANY_ID,
|
||||
0, 0, pbn_b0_bt_2_115200 },
|
||||
|
||||
/*
|
||||
* Commtech, Inc. Fastcom adapters
|
||||
*/
|
||||
|
||||
@@ -33,6 +33,23 @@ config SERIAL_8250
|
||||
Most people will say Y or M here, so that they can use serial mice,
|
||||
modems and similar devices connecting to the standard serial ports.
|
||||
|
||||
config SERIAL_8250_DEPRECATED_OPTIONS
|
||||
bool "Support 8250_core.* kernel options (DEPRECATED)"
|
||||
depends on SERIAL_8250
|
||||
default y
|
||||
---help---
|
||||
In 3.7 we renamed 8250 to 8250_core by mistake, so now we have to
|
||||
accept kernel parameters in both forms like 8250_core.nr_uarts=4 and
|
||||
8250.nr_uarts=4. We now renamed the module back to 8250, but if
|
||||
anybody noticed in 3.7 and changed their userspace we still have to
|
||||
keep the 8350_core.* options around until they revert the changes
|
||||
they already did.
|
||||
|
||||
If 8250 is built as a module, this adds 8250_core alias instead.
|
||||
|
||||
If you did not notice yet and/or you have userspace from pre-3.7, it
|
||||
is safe (and recommended) to say N here.
|
||||
|
||||
config SERIAL_8250_PNP
|
||||
bool "8250/16550 PNP device support" if EXPERT
|
||||
depends on SERIAL_8250 && PNP
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
# Makefile for the 8250 serial device drivers.
|
||||
#
|
||||
|
||||
obj-$(CONFIG_SERIAL_8250) += 8250_core.o
|
||||
8250_core-y := 8250.o
|
||||
8250_core-$(CONFIG_SERIAL_8250_PNP) += 8250_pnp.o
|
||||
8250_core-$(CONFIG_SERIAL_8250_DMA) += 8250_dma.o
|
||||
obj-$(CONFIG_SERIAL_8250) += 8250.o
|
||||
8250-y := 8250_core.o
|
||||
8250-$(CONFIG_SERIAL_8250_PNP) += 8250_pnp.o
|
||||
8250-$(CONFIG_SERIAL_8250_DMA) += 8250_dma.o
|
||||
obj-$(CONFIG_SERIAL_8250_GSC) += 8250_gsc.o
|
||||
obj-$(CONFIG_SERIAL_8250_PCI) += 8250_pci.o
|
||||
obj-$(CONFIG_SERIAL_8250_HP300) += 8250_hp300.o
|
||||
|
||||
@@ -158,7 +158,7 @@ struct atmel_uart_port {
|
||||
};
|
||||
|
||||
static struct atmel_uart_port atmel_ports[ATMEL_MAX_UART];
|
||||
static unsigned long atmel_ports_in_use;
|
||||
static DECLARE_BITMAP(atmel_ports_in_use, ATMEL_MAX_UART);
|
||||
|
||||
#ifdef SUPPORT_SYSRQ
|
||||
static struct console atmel_console;
|
||||
@@ -1769,15 +1769,14 @@ static int atmel_serial_probe(struct platform_device *pdev)
|
||||
if (ret < 0)
|
||||
/* port id not found in platform data nor device-tree aliases:
|
||||
* auto-enumerate it */
|
||||
ret = find_first_zero_bit(&atmel_ports_in_use,
|
||||
sizeof(atmel_ports_in_use));
|
||||
ret = find_first_zero_bit(atmel_ports_in_use, ATMEL_MAX_UART);
|
||||
|
||||
if (ret > ATMEL_MAX_UART) {
|
||||
if (ret >= ATMEL_MAX_UART) {
|
||||
ret = -ENODEV;
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (test_and_set_bit(ret, &atmel_ports_in_use)) {
|
||||
if (test_and_set_bit(ret, atmel_ports_in_use)) {
|
||||
/* port already in use */
|
||||
ret = -EBUSY;
|
||||
goto err;
|
||||
@@ -1857,7 +1856,7 @@ static int atmel_serial_remove(struct platform_device *pdev)
|
||||
|
||||
/* "port" is allocated statically, so we shouldn't free it */
|
||||
|
||||
clear_bit(port->line, &atmel_ports_in_use);
|
||||
clear_bit(port->line, atmel_ports_in_use);
|
||||
|
||||
clk_put(atmel_port->clk);
|
||||
|
||||
|
||||
@@ -968,6 +968,7 @@ static struct uart_ops sunsu_pops = {
|
||||
#define UART_NR 4
|
||||
|
||||
static struct uart_sunsu_port sunsu_ports[UART_NR];
|
||||
static int nr_inst; /* Number of already registered ports */
|
||||
|
||||
#ifdef CONFIG_SERIO
|
||||
|
||||
@@ -1337,13 +1338,8 @@ static int __init sunsu_console_setup(struct console *co, char *options)
|
||||
printk("Console: ttyS%d (SU)\n",
|
||||
(sunsu_reg.minor - 64) + co->index);
|
||||
|
||||
/*
|
||||
* Check whether an invalid uart number has been specified, and
|
||||
* if so, search for the first available port that does have
|
||||
* console support.
|
||||
*/
|
||||
if (co->index >= UART_NR)
|
||||
co->index = 0;
|
||||
if (co->index > nr_inst)
|
||||
return -ENODEV;
|
||||
port = &sunsu_ports[co->index].port;
|
||||
|
||||
/*
|
||||
@@ -1408,7 +1404,6 @@ static enum su_type su_get_type(struct device_node *dp)
|
||||
|
||||
static int su_probe(struct platform_device *op)
|
||||
{
|
||||
static int inst;
|
||||
struct device_node *dp = op->dev.of_node;
|
||||
struct uart_sunsu_port *up;
|
||||
struct resource *rp;
|
||||
@@ -1418,16 +1413,16 @@ static int su_probe(struct platform_device *op)
|
||||
|
||||
type = su_get_type(dp);
|
||||
if (type == SU_PORT_PORT) {
|
||||
if (inst >= UART_NR)
|
||||
if (nr_inst >= UART_NR)
|
||||
return -EINVAL;
|
||||
up = &sunsu_ports[inst];
|
||||
up = &sunsu_ports[nr_inst];
|
||||
} else {
|
||||
up = kzalloc(sizeof(*up), GFP_KERNEL);
|
||||
if (!up)
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
up->port.line = inst;
|
||||
up->port.line = nr_inst;
|
||||
|
||||
spin_lock_init(&up->port.lock);
|
||||
|
||||
@@ -1461,6 +1456,8 @@ static int su_probe(struct platform_device *op)
|
||||
}
|
||||
dev_set_drvdata(&op->dev, up);
|
||||
|
||||
nr_inst++;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1488,7 +1485,7 @@ static int su_probe(struct platform_device *op)
|
||||
|
||||
dev_set_drvdata(&op->dev, up);
|
||||
|
||||
inst++;
|
||||
nr_inst++;
|
||||
|
||||
return 0;
|
||||
|
||||
|
||||
@@ -578,6 +578,8 @@ static int xuartps_startup(struct uart_port *port)
|
||||
/* Receive Timeout register is enabled with value of 10 */
|
||||
xuartps_writel(10, XUARTPS_RXTOUT_OFFSET);
|
||||
|
||||
/* Clear out any pending interrupts before enabling them */
|
||||
xuartps_writel(xuartps_readl(XUARTPS_ISR_OFFSET), XUARTPS_ISR_OFFSET);
|
||||
|
||||
/* Set the Interrupt Registers with desired interrupts */
|
||||
xuartps_writel(XUARTPS_IXR_TXEMPTY | XUARTPS_IXR_PARITY |
|
||||
|
||||
@@ -93,7 +93,7 @@ vcs_poll_data_free(struct vcs_poll_data *poll)
|
||||
static struct vcs_poll_data *
|
||||
vcs_poll_data_get(struct file *file)
|
||||
{
|
||||
struct vcs_poll_data *poll = file->private_data;
|
||||
struct vcs_poll_data *poll = file->private_data, *kill = NULL;
|
||||
|
||||
if (poll)
|
||||
return poll;
|
||||
@@ -122,10 +122,12 @@ vcs_poll_data_get(struct file *file)
|
||||
file->private_data = poll;
|
||||
} else {
|
||||
/* someone else raced ahead of us */
|
||||
vcs_poll_data_free(poll);
|
||||
kill = poll;
|
||||
poll = file->private_data;
|
||||
}
|
||||
spin_unlock(&file->f_lock);
|
||||
if (kill)
|
||||
vcs_poll_data_free(kill);
|
||||
|
||||
return poll;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user