[PATCH] 2.0.35/6 dropped timer interrupts with serial console

Philip Gladstone (philip@raptor.com)
Tue, 06 Oct 1998 15:08:05 -0400


This is a cryptographically signed message in MIME format.

--------------ms04544A4F9FED96EC8D20B386
Content-Type: multipart/mixed; boundary="------------35D7CD768BF1A97532139B9B"

This is a multi-part message in MIME format.
--------------35D7CD768BF1A97532139B9B
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

It turns out that if you have a serial console, and printk
gets called, then the output is done with interrupts *disabled*.
This causes significant numbers of timer interrupts to be lost. In
particular, it causes interrupts to be lost during system
initialization, leading to a difference of the order of
a second by the time that the system starts.

This error is normally eliminated by the 'clock' command in
one of the system startup scripts. However, it doesn't fix any
subsequent drifting.

I attach a small patch to partially fix this for X86 architecture.
I'm not happy (to put it mildly) how this works as it tries
to guess how many interrupts were lost. The alternative of putting
extra code in the serial console area seemed even more yucky. I'll
take ideas on the 'right thing' to do.

Philip

-- 
Philip Gladstone                           +1 781 530 2461
Raptor Systems / Axent Technologies 
Waltham, MA         		    http://www.raptor.com/
--------------35D7CD768BF1A97532139B9B
Content-Type: text/plain; charset=us-ascii; name="p9_drop_ints.rpf"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline; filename="p9_drop_ints.rpf"

--- time.c.orig Fri Oct 2 15:09:15 1998 +++ linux/arch/i386/kernel/time.c Tue Oct 6 14:57:45 1998 @@ -390,9 +409,18 @@ */ static void pentium_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) { - register unsigned long edx asm("dx"); + register unsigned long edx; int count, flags; + int usecs; + + for (usecs = do_fast_gettimeoffset(); + usecs >= 20000; + usecs -= 10000) { + /* Try and restore all the dropped interrupts */ + do_timer(regs); + } + /* It is important that these two operations happen almost at the * same time. We do the RDTSC stuff first, since it's faster. To * avoid any inconsistencies, we disable interrupts. @@ -566,9 +614,6 @@ void time_init(void) { - xtime.tv_sec = get_cmos_time(); - xtime.tv_usec = 0; - /* * If we have APM enabled or the CPU clock speed is variable * (CPU stops clock on HLT or slows clock to save power) @@ -600,5 +645,9 @@ printk("Detected %ld Hz processor.\n", cpu_hz); } } + + xtime.tv_sec = get_cmos_time(); + xtime.tv_usec = 0; + setup_x86_irq(0, &irq0); }

--------------35D7CD768BF1A97532139B9B--

--------------ms04544A4F9FED96EC8D20B386 Content-Type: application/x-pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" Content-Description: S/MIME Cryptographic Signature

MIILogYJKoZIhvcNAQcCoIILkzCCC48CAQExCzAJBgUrDgMCGgUAMAsGCSqGSIb3DQEHAaCC CVgwggLXMIICQKADAgECAgIwtDANBgkqhkiG9w0BAQQFADCByDELMAkGA1UEBhMCWkExFTAT BgNVBAgTDFdlc3Rlcm4gQ2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxGjAYBgNVBAoTEVRo YXd0ZSBDb25zdWx0aW5nMTMwMQYDVQQLEypDZXJ0aWZpY2F0ZSBTZXJ2aWNlcyBSU0EgSUsg MTk5OC4yLjI1IDg6MzUxOzA5BgNVBAMTMlRoYXd0ZSBQZXJzb25hbCBGcmVlbWFpbCBSU0Eg SXNzdWluZyBLZXkgMTk5OC4yLjI1MB4XDTk4MDgxMjE0NDIyOVoXDTk5MDgxMjE0NDIyOVow QzEfMB0GA1UEAxMWVGhhd3RlIEZyZWVtYWlsIE1lbWJlcjEgMB4GCSqGSIb3DQEJARYRcGhp bGlwQHJhcHRvci5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAONqzM373SGsMZ5C X1WU1vOr8pZFVRBVJC/WEfc5sR+Q4YAjRk5F4Yww6cHAXtTiptaSWcgK+dli46/5Sy60UX2s iVcl8i6pmcQ/m+kFodrJ1GjZd9SU2+IMnY7liBP2sdwAB02G9EX2B43nAh9/Y2Xl4T8uGV3L oz6CwP5YmUV1AgMBAAGjVDBSMBEGCWCGSAGG+EIBAQQEAwIFoDAOBgNVHQ8BAf8EBAMCBaAw DAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBTtNBduDiteS4eYkbg3p5i/kh+scjANBgkqhkiG 9w0BAQQFAAOBgQBZPzaRk5KnLZCwvJy/y/OaSAfGp1h/c8agEBoLclt3CSytNnT3FVZLq5w/ R0O9wIu8er/eivXt1CvWs/wYpqZpszhmbaIreRZHY9A93G/Zavv7yyMBpK5OVYpkAMUt4rAc 7/twlNMo/493FEBSAiYjdbhIqGOyBikq/R3iyFiyUjCCA0gwggKxoAMCAQICAQgwDQYJKoZI hvcNAQEEBQAwgdExCzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNV BAcTCUNhcGUgVG93bjEaMBgGA1UEChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0Nl cnRpZmljYXRpb24gU2VydmljZXMgRGl2aXNpb24xJDAiBgNVBAMTG1RoYXd0ZSBQZXJzb25h bCBGcmVlbWFpbCBDQTErMCkGCSqGSIb3DQEJARYccGVyc29uYWwtZnJlZW1haWxAdGhhd3Rl LmNvbTAeFw05ODAyMjUwODM1MzNaFw0wMDAyMjUwODM1MzNaMIHIMQswCQYDVQQGEwJaQTEV MBMGA1UECBMMV2VzdGVybiBDYXBlMRQwEgYDVQQHEwtEdXJiYW52aWxsZTEaMBgGA1UEChMR VGhhd3RlIENvbnN1bHRpbmcxMzAxBgNVBAsTKkNlcnRpZmljYXRlIFNlcnZpY2VzIFJTQSBJ SyAxOTk4LjIuMjUgODozNTE7MDkGA1UEAxMyVGhhd3RlIFBlcnNvbmFsIEZyZWVtYWlsIFJT QSBJc3N1aW5nIEtleSAxOTk4LjIuMjUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMcx w8QbmSNy0lGFlUzjWZLk6GyBtfQbXwnmxK2zRG+qONdX5LDFy7p0rkxhIyR2BvjZXQ2KKLK0 K+0Nu1Ik9LfFSaeDY/wKBLDvgSj35pHGTZfuknYmYshjN3Y8sZIP3K1SBopxxTcxaobbvQhp KFn87cd9JmfdTd7TxQL+d7bhAgMBAAGjNzA1MBIGA1UdEwEB/wQIMAYBAf8CAQAwHwYDVR0j BBgwFqAUcknCczTGVfQLdnKBfnf0h+fGsg4wDQYJKoZIhvcNAQEEBQADgYEAQurti2F+odRc Uqk8vZ6ceegJixKBrY8dWkbt8SUmW8iu/XohFs2gHjuXM4P7TjcqKJemSPUoGAIkfIB7U1C1 +2+a/G2qXCZFqC82IljTGwIDH+6UOfD+NFqISxs9jPPXftOfcFt29tjE4rY8JJ0JJYxZsdSL 8/wEgg6eKYZsxf8wggMtMIIClqADAgECAgEAMA0GCSqGSIb3DQEBBAUAMIHRMQswCQYDVQQG EwJaQTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xGjAYBgNV BAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2Vz IERpdmlzaW9uMSQwIgYDVQQDExtUaGF3dGUgUGVyc29uYWwgRnJlZW1haWwgQ0ExKzApBgkq hkiG9w0BCQEWHHBlcnNvbmFsLWZyZWVtYWlsQHRoYXd0ZS5jb20wHhcNOTYwMTAxMDAwMDAw WhcNMjAxMjMxMjM1OTU5WjCB0TELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4gQ2Fw ZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYDVQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYG A1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMbVGhhd3Rl IFBlcnNvbmFsIEZyZWVtYWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1mcmVlbWFp bEB0aGF3dGUuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDUadfUsJRkW3HpR9gM UbbqcpGwhF59LQ2PexLfhSV1KHQ6QixjJ5+Ve0vvfhmHHYbqo925zpZkGsIUbkSsfOaP6E0P cR9AOKYAo4d49vmUhl6t6sBeduvZFKNdbnp8DKVLVX8GGSl/npom1Wq7OCQIapjHsdqjmJH9 edvlWsQcuQIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBAUAA4GBAMfs kn5O+PWWpWdiKqTwTRFg0G+NYFhhrCa7UjVcCM8w+6hKloofYkIjjBcP9LpknBesRynfnZhe 0mxgcVyirNx54+duAEcftQ0o6AKd5Jr9E/Sm2Xyx+NxfIyYJkYBz0BQb3kOpgyXy5pwvFcr+ pquKB3WLDN1RhGvk+NHOd6KBMYICEjCCAg4CAQEwgc8wgcgxCzAJBgNVBAYTAlpBMRUwEwYD VQQIEwxXZXN0ZXJuIENhcGUxFDASBgNVBAcTC0R1cmJhbnZpbGxlMRowGAYDVQQKExFUaGF3 dGUgQ29uc3VsdGluZzEzMDEGA1UECxMqQ2VydGlmaWNhdGUgU2VydmljZXMgUlNBIElLIDE5 OTguMi4yNSA4OjM1MTswOQYDVQQDEzJUaGF3dGUgUGVyc29uYWwgRnJlZW1haWwgUlNBIElz c3VpbmcgS2V5IDE5OTguMi4yNQICMLQwCQYFKw4DAhoFAKCBmTAYBgkqhkiG9w0BCQMxCwYJ KoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw05ODEwMDYxOTA4MDZaMCMGCSqGSIb3DQEJBDEW BBTkuQ2dmj/uUtR2R3X7+lwV5GP1iDA6BgkqhkiG9w0BCQ8xLTArMAoGCCqGSIb3DQMHMA4G CCqGSIb3DQMCAgIAgDANBggqhkiG9w0DAgIBQDANBgkqhkiG9w0BAQEFAASBgDdw34NZEcCX rCJRnlMXuODNeqD9HTfmUjvpgBYSo/YBN7J+8ZyV14y2g5DP8tWMU3kaZlw41ZIA+H9crDdu aucvbkeYLaFByhz+OnPuWBDLTGJIzrs+tCeUKTKXiktnb2Ub+spSQd9iLjrWJOt4PZ2/dVJV TMQoB8nJxchigh+M --------------ms04544A4F9FED96EC8D20B386--

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/