From mboxrd@z Thu Jan 1 00:00:00 1970 From: Taichi Kageyama Subject: [PATCH 2/2] serial: 8250: Allow to skip autoconfig_irq() for a console Date: Fri, 5 Jun 2015 10:03:23 +0000 Message-ID: <557173EC.5000307@cp.jp.nec.com> References: <55717224.9060104@cp.jp.nec.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <55717224.9060104@cp.jp.nec.com> Content-Language: ja-JP Content-ID: <3E255986E6AC2D4AB94ABB3243C8648A@gisp.nec.co.jp> Sender: linux-kernel-owner@vger.kernel.org To: "gregkh@linuxfoundation.org" Cc: "linux-serial@vger.kernel.org" , "jslaby@suse.cz" , "linux-kernel@vger.kernel.org" , "prarit@redhat.com" , Naoya Horiguchi List-Id: linux-serial@vger.kernel.org VGhpcyBwYXRjaCBwcm92aWRlcyBhIG5ldyBwYXJhbWV0ZXIgYXMgYSB3b3JrYXJvdW5kIG9mIHRo ZSBmb2xsb3dpbmcNCnByb2JsZW0uIEl0IGFsbG93cyB1cyB0byBza2lwIGF1dG9jb25maWdfaXJx KCkgYW5kIHRvIHVzZSBhIHdlbGwta25vd24gaXJxDQpudW1iZXIgZm9yIGEgY29uc29sZSBldmVu IGlmIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRIGlzIGRlZmluZWQuDQoNClRoZXJlJ3Jl IGNhc2VzIHdoZXJlIGF1dG9jb25maWdfaXJxKCkgZmFpbHMgZHVyaW5nIGJvb3QuDQpJbiB0aGVz ZSBjYXNlcywgdGhlIGNvbnNvbGUgZG9lc24ndCB3b3JrIGluIGludGVycnVwdCBtb2RlLA0KdGhl IG1vZGUgY2Fubm90IGJlIGNoYW5nZWQgYW55bW9yZSwgYW5kICJpbnB1dCBvdmVycnVuIg0KKHdo aWNoIGNhbiBtYWtlIG9wZXJhdGlvbiBtaXN0YWtlcykgaGFwcGVucyBlYXNpbHkuDQpUaGlzIHBy b2JsZW0gaGFwcGVucyB3aXRoIGhpZ2ggcmF0ZSBldmVyeSBib290IG9uY2UgaXQgb2NjdXJzDQpi ZWNhdXNlIHRoZSBib290IHNlcXVlbmNlIGlzIGFsd2F5cyBhbG1vc3Qgc2FtZS4NCg0KYXV0b2Nv bmZpZ19pcnEoKSBhc3N1bWVzIHRoYXQgYSBDUFUgY2FuIGhhbmRsZSBhbiBpbnRlcnJ1cHQgZnJv bSBhIHNlcmlhbA0KZHVyaW5nIHRoZSB3YWl0aW5nIHRpbWUsIGJ1dCB0aGVyZSdyZSBzb21lIGNh c2VzIHdoZXJlIHRoZSBDUFUgY2Fubm90DQpoYW5kbGUgdGhlIGludGVycnVwdCBmb3IgbG9uZ2Vy IHRoYW4gdGhlIHRpbWUuIEl0IGNvbXBsZXRlbHkgZGVwZW5kcyBvbg0KaG93IG90aGVyIGZ1bmN0 aW9ucyB3b3JrIG9uIHRoZSBDUFUuIElkZWFsbHksIGF1dG9jb25maWdfaXJxKCkgc2hvdWxkIGJl DQpmaXhlZCB0byBjb250cm9sIHRoZXNlIGNhc2VzIGJ1dCBhcyBsb25nIGFzIGF1dG9faXJxIGFs Z29yaXRobSBpcyB1c2VkLA0KaXQncyBoYXJkIHRvIGtub3cgd2hpY2ggQ1BVIGNhbiBoYW5kbGUg YW4gaW50ZXJydXB0IGZyb20gYSBzZXJpYWwgYW5kDQp0byBhc3N1cmUgdGhlIGludGVycnVwdCBv ZiB0aGUgQ1BVIGlzIGVuYWJsZWQgZHVyaW5nIGF1dG9faXJxLg0KTWVhbndoaWxlIGZvciBsZWdh Y3kgY29uc29sZXMsIHRoZXkgYWN0dWFsbHkgZG9uJ3QgcmVxdWlyZSBhdXRvX2lycQ0KYmVjYXVz ZSB0aGV5IGJhc2ljYWxseSB1c2Ugd2VsbC1rbm93biBpcnEgbnVtYmVyLg0KRm9yIG5vbi1jb25z b2xlIHNlcmlhbHMsIHRoaXMgd29ya2Fyb3VuZCBpcyBub3QgcmVxdWlyZWQNCmJlY2F1c2Ugc2V0 c2VyaWFsIGNvbW1hbmQgY2FuIGtpY2sgYXV0b2NvbmZpZ19pcnEoKSBhZ2FpbiBmb3IgdGhlbS4N Cg0KU2lnbmVkLW9mZi1ieTogVGFpY2hpIEthZ2V5YW1hIDx0LWthZ2V5YW1hQGNwLmpwLm5lYy5j b20+DQpDYzogTmFveWEgSG9yaWd1Y2hpIDxuLWhvcmlndWNoaUBhaC5qcC5uZWMuY29tPg0KLS0t DQogIGRyaXZlcnMvdHR5L3NlcmlhbC84MjUwLzgyNTBfY29yZS5jIHwgICAxNyArKysrKysrKysr KysrKysrKw0KICAxIGZpbGVzIGNoYW5nZWQsIDE3IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25z KC0pDQoNCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MC84MjUwX2NvcmUuYyBi L2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwLzgyNTBfY29yZS5jDQppbmRleCA2YmYzMWYyLi42MGZk YTI4IDEwMDY0NA0KLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsLzgyNTAvODI1MF9jb3JlLmMNCisr KyBiL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwLzgyNTBfY29yZS5jDQpAQCAtNjUsNiArNjUsOCBA QCBzdGF0aWMgaW50IHNlcmlhbF9pbmRleChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQ0KDQogIHN0 YXRpYyB1bnNpZ25lZCBpbnQgc2tpcF90eGVuX3Rlc3Q7IC8qIGZvcmNlIHNraXAgb2YgdHhlbiB0 ZXN0IGF0IGluaXQgdGltZSAqLw0KDQorc3RhdGljIHVuc2lnbmVkIGludCBza2lwX2NvbnNfYXV0 b2lycTsgLyogZm9yY2Ugc2tpcCBhdXRvaXJxIGZvciBjb25zb2xlICovDQorDQogIC8qDQogICAq IERlYnVnZ2luZy4NCiAgICovDQpAQCAtMzMzNiw2ICszMzM4LDkgQEAgc2VyaWFsODI1MF9yZWdp c3Rlcl9wb3J0cyhzdHJ1Y3QgdWFydF9kcml2ZXIgKmRydiwgc3RydWN0IGRldmljZSAqZGV2KQ0K ICAJCWlmIChza2lwX3R4ZW5fdGVzdCkNCiAgCQkJdXAtPnBvcnQuZmxhZ3MgfD0gVVBGX05PX1RY RU5fVEVTVDsNCg0KKwkJaWYgKHVhcnRfY29uc29sZSgmdXAtPnBvcnQpICYmIHNraXBfY29uc19h dXRvaXJxKQ0KKwkJCXVwLT5wb3J0LmZsYWdzICY9IH5VUEZfQVVUT19JUlE7DQorDQogIAkJdWFy dF9hZGRfb25lX3BvcnQoZHJ2LCAmdXAtPnBvcnQpOw0KICAJfQ0KICB9DQpAQCAtMzg3NSw2ICsz ODgwLDkgQEAgaW50IHNlcmlhbDgyNTBfcmVnaXN0ZXJfODI1MF9wb3J0KHN0cnVjdCB1YXJ0Xzgy NTBfcG9ydCAqdXApDQogIAkJaWYgKHNraXBfdHhlbl90ZXN0KQ0KICAJCQl1YXJ0LT5wb3J0LmZs YWdzIHw9IFVQRl9OT19UWEVOX1RFU1Q7DQoNCisJCWlmICh1YXJ0X2NvbnNvbGUoJnVhcnQtPnBv cnQpICYmIHNraXBfY29uc19hdXRvaXJxKQ0KKwkJCXVhcnQtPnBvcnQuZmxhZ3MgJj0gflVQRl9B VVRPX0lSUTsNCisNCiAgCQlpZiAodXAtPnBvcnQuZmxhZ3MgJiBVUEZfRklYRURfVFlQRSkNCiAg CQkJdWFydC0+cG9ydC50eXBlID0gdXAtPnBvcnQudHlwZTsNCg0KQEAgLTM5MzYsNiArMzk0NCwx MCBAQCB2b2lkIHNlcmlhbDgyNTBfdW5yZWdpc3Rlcl9wb3J0KGludCBsaW5lKQ0KICAJCXVhcnQt PnBvcnQuZmxhZ3MgJj0gflVQRl9CT09UX0FVVE9DT05GOw0KICAJCWlmIChza2lwX3R4ZW5fdGVz dCkNCiAgCQkJdWFydC0+cG9ydC5mbGFncyB8PSBVUEZfTk9fVFhFTl9URVNUOw0KKw0KKwkJaWYg KHVhcnRfY29uc29sZSgmdWFydC0+cG9ydCkgJiYgc2tpcF9jb25zX2F1dG9pcnEpDQorCQkJdWFy dC0+cG9ydC5mbGFncyAmPSB+VVBGX0FVVE9fSVJROw0KKw0KICAJCXVhcnQtPnBvcnQudHlwZSA9 IFBPUlRfVU5LTk9XTjsNCiAgCQl1YXJ0LT5wb3J0LmRldiA9ICZzZXJpYWw4MjUwX2lzYV9kZXZz LT5kZXY7DQogIAkJdWFydC0+Y2FwYWJpbGl0aWVzID0gMDsNCkBAIC00MDQ0LDYgKzQwNTYsOSBA QCBNT0RVTEVfUEFSTV9ERVNDKG5yX3VhcnRzLCAiTWF4aW11bSBudW1iZXIgb2YgVUFSVHMgc3Vw cG9ydGVkLiAoMS0iIF9fTU9EVUxFX1NUUg0KICBtb2R1bGVfcGFyYW0oc2tpcF90eGVuX3Rlc3Qs IHVpbnQsIDA2NDQpOw0KICBNT0RVTEVfUEFSTV9ERVNDKHNraXBfdHhlbl90ZXN0LCAiU2tpcCBj aGVja2luZyBmb3IgdGhlIFRYRU4gYnVnIGF0IGluaXQgdGltZSIpOw0KDQorbW9kdWxlX3BhcmFt KHNraXBfY29uc19hdXRvaXJxLCB1aW50LCAwNjQ0KTsNCitNT0RVTEVfUEFSTV9ERVNDKHNraXBf Y29uc19hdXRvaXJxLCAiU2tpcCBhdXRvIGlycSBmb3IgY29uc29sZSBkdXJpbmcgYm9vdCIpOw0K Kw0KICAjaWZkZWYgQ09ORklHX1NFUklBTF84MjUwX1JTQQ0KICBtb2R1bGVfcGFyYW1fYXJyYXko cHJvYmVfcnNhLCB1bG9uZywgJnByb2JlX3JzYV9jb3VudCwgMDQ0NCk7DQogIE1PRFVMRV9QQVJN X0RFU0MocHJvYmVfcnNhLCAiUHJvYmUgSS9PIHBvcnRzIGZvciBSU0EiKTsNCkBAIC00MDcwLDYg KzQwODUsOCBAQCBzdGF0aWMgdm9pZCBfX3VzZWQgczgyNTBfb3B0aW9ucyh2b2lkKQ0KICAJbW9k dWxlX3BhcmFtX2NiKHNoYXJlX2lycXMsICZwYXJhbV9vcHNfdWludCwgJnNoYXJlX2lycXMsIDA2 NDQpOw0KICAJbW9kdWxlX3BhcmFtX2NiKG5yX3VhcnRzLCAmcGFyYW1fb3BzX3VpbnQsICZucl91 YXJ0cywgMDY0NCk7DQogIAltb2R1bGVfcGFyYW1fY2Ioc2tpcF90eGVuX3Rlc3QsICZwYXJhbV9v cHNfdWludCwgJnNraXBfdHhlbl90ZXN0LCAwNjQ0KTsNCisJbW9kdWxlX3BhcmFtX2NiKHNraXBf Y29uc19hdXRvaXJxLCAmcGFyYW1fb3BzX3VpbnQsDQorCQkmc2tpcF9jb25zX2F1dG9pcnEsIDA2 NDQpOw0KICAjaWZkZWYgQ09ORklHX1NFUklBTF84MjUwX1JTQQ0KICAJX19tb2R1bGVfcGFyYW1f Y2FsbChNT0RVTEVfUEFSQU1fUFJFRklYLCBwcm9iZV9yc2EsDQogIAkJJnBhcmFtX2FycmF5X29w cywgLmFyciA9ICZfX3BhcmFtX2Fycl9wcm9iZV9yc2EsDQotLSANCjEuNy4xDQoNCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932593AbbFEKLI (ORCPT ); Fri, 5 Jun 2015 06:11:08 -0400 Received: from TYO200.gate.nec.co.jp ([210.143.35.50]:60648 "EHLO tyo200.gate.nec.co.jp" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932559AbbFEKLC (ORCPT ); Fri, 5 Jun 2015 06:11:02 -0400 From: Taichi Kageyama To: "gregkh@linuxfoundation.org" CC: "linux-serial@vger.kernel.org" , "jslaby@suse.cz" , "linux-kernel@vger.kernel.org" , "prarit@redhat.com" , Naoya Horiguchi Subject: [PATCH 2/2] serial: 8250: Allow to skip autoconfig_irq() for a console Thread-Topic: [PATCH 2/2] serial: 8250: Allow to skip autoconfig_irq() for a console Thread-Index: AQHQn3bbstCqjnq7WEa1Abzn0VnSqA== Date: Fri, 5 Jun 2015 10:03:23 +0000 Message-ID: <557173EC.5000307@cp.jp.nec.com> References: <55717224.9060104@cp.jp.nec.com> In-Reply-To: <55717224.9060104@cp.jp.nec.com> Accept-Language: en-US, ja-JP Content-Language: ja-JP X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.34.108.73] Content-Type: text/plain; charset="utf-8" Content-ID: <3E255986E6AC2D4AB94ABB3243C8648A@gisp.nec.co.jp> MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by nfs id t55ABEe1010003 This patch provides a new parameter as a workaround of the following problem. It allows us to skip autoconfig_irq() and to use a well-known irq number for a console even if CONFIG_SERIAL_8250_DETECT_IRQ is defined. There're cases where autoconfig_irq() fails during boot. In these cases, the console doesn't work in interrupt mode, the mode cannot be changed anymore, and "input overrun" (which can make operation mistakes) happens easily. This problem happens with high rate every boot once it occurs because the boot sequence is always almost same. autoconfig_irq() assumes that a CPU can handle an interrupt from a serial during the waiting time, but there're some cases where the CPU cannot handle the interrupt for longer than the time. It completely depends on how other functions work on the CPU. Ideally, autoconfig_irq() should be fixed to control these cases but as long as auto_irq algorithm is used, it's hard to know which CPU can handle an interrupt from a serial and to assure the interrupt of the CPU is enabled during auto_irq. Meanwhile for legacy consoles, they actually don't require auto_irq because they basically use well-known irq number. For non-console serials, this workaround is not required because setserial command can kick autoconfig_irq() again for them. Signed-off-by: Taichi Kageyama Cc: Naoya Horiguchi --- drivers/tty/serial/8250/8250_core.c | 17 +++++++++++++++++ 1 files changed, 17 insertions(+), 0 deletions(-) diff --git a/drivers/tty/serial/8250/8250_core.c b/drivers/tty/serial/8250/8250_core.c index 6bf31f2..60fda28 100644 --- a/drivers/tty/serial/8250/8250_core.c +++ b/drivers/tty/serial/8250/8250_core.c @@ -65,6 +65,8 @@ static int serial_index(struct uart_port *port) static unsigned int skip_txen_test; /* force skip of txen test at init time */ +static unsigned int skip_cons_autoirq; /* force skip autoirq for console */ + /* * Debugging. */ @@ -3336,6 +3338,9 @@ serial8250_register_ports(struct uart_driver *drv, struct device *dev) if (skip_txen_test) up->port.flags |= UPF_NO_TXEN_TEST; + if (uart_console(&up->port) && skip_cons_autoirq) + up->port.flags &= ~UPF_AUTO_IRQ; + uart_add_one_port(drv, &up->port); } } @@ -3875,6 +3880,9 @@ int serial8250_register_8250_port(struct uart_8250_port *up) if (skip_txen_test) uart->port.flags |= UPF_NO_TXEN_TEST; + if (uart_console(&uart->port) && skip_cons_autoirq) + uart->port.flags &= ~UPF_AUTO_IRQ; + if (up->port.flags & UPF_FIXED_TYPE) uart->port.type = up->port.type; @@ -3936,6 +3944,10 @@ void serial8250_unregister_port(int line) uart->port.flags &= ~UPF_BOOT_AUTOCONF; if (skip_txen_test) uart->port.flags |= UPF_NO_TXEN_TEST; + + if (uart_console(&uart->port) && skip_cons_autoirq) + uart->port.flags &= ~UPF_AUTO_IRQ; + uart->port.type = PORT_UNKNOWN; uart->port.dev = &serial8250_isa_devs->dev; uart->capabilities = 0; @@ -4044,6 +4056,9 @@ MODULE_PARM_DESC(nr_uarts, "Maximum number of UARTs supported. (1-" __MODULE_STR module_param(skip_txen_test, uint, 0644); MODULE_PARM_DESC(skip_txen_test, "Skip checking for the TXEN bug at init time"); +module_param(skip_cons_autoirq, uint, 0644); +MODULE_PARM_DESC(skip_cons_autoirq, "Skip auto irq for console during boot"); + #ifdef CONFIG_SERIAL_8250_RSA module_param_array(probe_rsa, ulong, &probe_rsa_count, 0444); MODULE_PARM_DESC(probe_rsa, "Probe I/O ports for RSA"); @@ -4070,6 +4085,8 @@ static void __used s8250_options(void) module_param_cb(share_irqs, ¶m_ops_uint, &share_irqs, 0644); module_param_cb(nr_uarts, ¶m_ops_uint, &nr_uarts, 0644); module_param_cb(skip_txen_test, ¶m_ops_uint, &skip_txen_test, 0644); + module_param_cb(skip_cons_autoirq, ¶m_ops_uint, + &skip_cons_autoirq, 0644); #ifdef CONFIG_SERIAL_8250_RSA __module_param_call(MODULE_PARAM_PREFIX, probe_rsa, ¶m_array_ops, .arr = &__param_arr_probe_rsa, -- 1.7.1 {.n++%ݶw{.n+{G{ayʇڙ,jfhz_(階ݢj"mG?&~iOzv^m ?I