From: Jaswinder Singh Rajput <jaswinderlinux@gmail.com>
To: Clemens Ladisch <clemens@ladisch.de>
Cc: "the arch/x86 maintainers" <x86@kernel.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: Hungry for hardware timers
Date: Tue, 7 Sep 2010 13:53:23 +0530 [thread overview]
Message-ID: <AANLkTi=-=88y=6kvV-WC3b5Pw7cf_ZoPaxhUnYugQK81@mail.gmail.com> (raw)
In-Reply-To: <4C85F0E3.2050908@ladisch.de>
Hello,
On Tue, Sep 7, 2010 at 1:29 PM, Clemens Ladisch <clemens@ladisch.de> wrote:
> Jaswinder Singh Rajput wrote:
>> I am investigating how many hardware timers are available for kernel,
>> system applications and user applications for x86 platforms.
>
> Why would you want to have a separate timer for your application?
>
I need a programmable periodic interrupt for an embedded project.
>> Is there any help available for it so that systems developers can use
>> a hook up an interrupt and use any hardware timer.
>
> The kernel is supposed to abstract away the hardware; just use POSIX
> timers.
>
>> In APIC timer, but each core is having only one timer and it is
>> already utilized by Linux :
>> ... APIC TMICT: 00002078
>> ... APIC TMCCT: 00000b5f
>> ... APIC TDCR: 00000003
>
> Having per-CPU timers allows the kernel to avoid synchronizing between
> CPUs.
>
>> HPET have 3 timers :
>> [ 0.328157] hpet: ID: 0x8086a201, PERIOD: 0x429b17f
>> [ 0.328315] hpet: CFG: 0x3, STATUS: 0x0
>> [ 0.328472] hpet: COUNTER_l: 0x6ff120, COUNTER_h: 0x0
>> [ 0.329006] hpet: T0: CFG_l: 0x138, CFG_h: 0xf00000
>> [ 0.329165] hpet: T0: CMP_l: 0x701baa, CMP_h: 0x0
>> [ 0.329324] hpet: T0 ROUTE_l: 0x0, ROUTE_h: 0x0
>> [ 0.329483] hpet: T1: CFG_l: 0x0, CFG_h: 0xf00000
>> [ 0.330006] hpet: T1: CMP_l: 0xffffffff, CMP_h: 0x0
>> [ 0.330166] hpet: T1 ROUTE_l: 0x0, ROUTE_h: 0x0
>> [ 0.331005] hpet: T2: CFG_l: 0x0, CFG_h: 0xf00800
>> [ 0.331168] hpet: T2: CMP_l: 0xdf751c, CMP_h: 0x0
>> [ 0.331328] hpet: T2 ROUTE_l: 0x0, ROUTE_h: 0x0
>>
>> T0 and T2 is already used by Linux and T1 is used for RTC
>
> T2 shouldn't be used.
[ 0.323613] hpet: hpet_msi_capability_lookup(621):
..
[ 0.325323] hpet: T2: CFG_l: 0x0, CFG_h: 0xf00800
[ 0.325483] hpet: T2: CMP_l: 0xffffffff, CMP_h: 0x0
[ 0.325639] hpet: T2 ROUTE_l: 0x0, ROUTE_h: 0x0
[ 0.325958] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0
[ 0.326279] hpet0: 3 comparators, 64-bit 14.318180 MHz counter
[ 0.328003] hpet: hpet_late_init(951):
..
[ 0.331006] hpet: T2: CFG_l: 0x0, CFG_h: 0xf00800
[ 0.331167] hpet: T2: CMP_l: 0xdfe12a, CMP_h: 0x0
[ 0.331327] hpet: T2 ROUTE_l: 0x0, ROUTE_h: 0x0
As you can see after hpet_late_init(951) T2 CMP_l is changed.
> What does /proc/interrupts say?
>
$ cat /proc/interrupts
CPU0 CPU1
0: 192286 0 IO-APIC-edge timer
1: 1039 0 IO-APIC-edge i8042
8: 50 0 IO-APIC-edge rtc0
9: 637 1903 IO-APIC-fasteoi acpi
12: 163 515 IO-APIC-edge i8042
16: 21285 0 IO-APIC-fasteoi i915, ath9k,
ehci_hcd:usb1, uhci_hcd:usb2
17: 0 0 IO-APIC-fasteoi uhci_hcd:usb3
18: 0 0 IO-APIC-fasteoi uhci_hcd:usb4
19: 0 0 IO-APIC-fasteoi uhci_hcd:usb5
44: 3511 9569 PCI-MSI-edge ahci
45: 515 1569 PCI-MSI-edge hda_intel
46: 2 0 PCI-MSI-edge eth0
NMI: 0 0 Non-maskable interrupts
LOC: 164087 274764 Local timer interrupts
SPU: 0 0 Spurious interrupts
PMI: 0 0 Performance monitoring interrupts
PND: 0 0 Performance pending work
RES: 56164 64218 Rescheduling interrupts
CAL: 650 484 Function call interrupts
TLB: 1165 625 TLB shootdowns
TRM: 0 0 Thermal event interrupts
THR: 0 0 Threshold APIC interrupts
MCE: 0 0 Machine check exceptions
MCP: 2 2 Machine check polls
ERR: 1
MIS: 0
$
>> System 8254 timer have 3 timers but it seems it is also used by Linux :
>> [ 4923.510233] 0: 83ae 1: 1102 2: 37f2
>> [ 4923.510251] 0: 8382 1: d10 2: 37dc
>
> That thing is horribly slow; nobody would want to use this, if possible.
>
As you seen timers are running may be due to these code :
arch/x86/kernel/apm_32.c: outb_pit(0x34, PIT_MODE);
/* binary, mode 2, LSB/MSB, ch 0 */
arch/x86/kernel/i8253.c: outb_pit(0x34, PIT_MODE);
arch/x86/kernel/i8253.c: outb_pit(0x30, PIT_MODE);
arch/x86/kernel/i8253.c: outb_pit(0x38, PIT_MODE);
arch/x86/kernel/i8253.c: outb_pit(0x00, PIT_MODE); /*
latch the count ASAP */
arch/x86/kernel/i8253.c: outb_pit(0x34, PIT_MODE);
arch/x86/kernel/vmiclock_32.c: outb_pit(0x3a, PIT_MODE); /* binary,
mode 5, LSB/MSB, ch 0 */
It is also used secretly :
arch/x86/include/asm/mach_timer.h: outb(0xb0, 0x43);
/* binary, mode 0, LSB/MSB, Ch 2 */
arch/x86/kernel/acpi/realmode/wakemain.c: outb(0xb6,
0x43); /* Ctr 2, squarewave, load, binary */
arch/x86/kernel/tsc.c: outb(0xb0, 0x43);
arch/x86/kernel/tsc.c: outb(0xb0, 0x43);
By the way why I am getting this :
[ 568.301571] CE: hpet increased min_delta_ns to 7500 nsec
[ 568.301736] CE: hpet increased min_delta_ns to 11250 nsec
[ 568.301888] CE: hpet increased min_delta_ns to 16875 nsec
Thanks,
--
Jaswinder Singh.
next prev parent reply other threads:[~2010-09-07 8:23 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-09-07 6:32 Hungry for hardware timers Jaswinder Singh Rajput
2010-09-07 7:59 ` Clemens Ladisch
2010-09-07 8:23 ` Jaswinder Singh Rajput [this message]
2010-09-07 9:05 ` Clemens Ladisch
2010-09-07 9:57 ` Jaswinder Singh Rajput
2010-09-07 10:55 ` Clemens Ladisch
2010-09-17 5:48 ` Jaswinder Singh Rajput
2010-09-17 7:38 ` Clemens Ladisch
2010-12-10 4:47 ` Jaswinder Singh
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='AANLkTi=-=88y=6kvV-WC3b5Pw7cf_ZoPaxhUnYugQK81@mail.gmail.com' \
--to=jaswinderlinux@gmail.com \
--cc=clemens@ladisch.de \
--cc=linux-kernel@vger.kernel.org \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.