RS780 UVD cause hpet_readl() very slow

Submitted by Huacai Chen on June 17, 2016, 8:52 a.m.


Message ID
State New
Headers show
Series "RS780 UVD cause hpet_readl() very slow" ( rev: 1 ) in DRI devel

Not browsing as part of any series.

Commit Message

Huacai Chen June 17, 2016, 8:52 a.m.
Hi, Christian

We found that if we use RS780 UVD decoding, hpet_readl() will need as
long as 1ms.
But, if attach a U-disk on south bridge (SB700) and read some data
from it, hpet_readl() has no problem.
Could you please give me some suggestions or fix it?

How to reproduce:
1, apply the patch on top of kernel (4.2+) and boot with this kernel

2, ensure that no USB device attached on SB700 (except keyboard and mouse)
3, download this file:
4, ffmpeg -hwaccel vdpau -i 1920x1080_25fps_h264_acc.mkv  -f rawvideo
-an -y /dev/null
5, dmesg will complain "So big..."


Patch hide | download patch | download mbox

diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
index 307a498..a0c8634 100644
--- a/arch/x86/kernel/apic/apic.c
+++ b/arch/x86/kernel/apic/apic.c
@@ -452,10 +452,12 @@  EXPORT_SYMBOL_GPL(setup_APIC_eilvt);
  * Program the next event, relative to now
+void check_hpet(void);
 static int lapic_next_event(unsigned long delta,
                            struct clock_event_device *evt)
        apic_write(APIC_TMICT, delta);
+       check_hpet();
        return 0;

diff --git a/arch/x86/kernel/hpet.c b/arch/x86/kernel/hpet.c
index 3acbff4..19329e8 100644
--- a/arch/x86/kernel/hpet.c
+++ b/arch/x86/kernel/hpet.c
@@ -367,6 +367,15 @@  static void hpet_set_mode(enum clock_event_mode mode,

+void check_hpet(void)
+       u32 cnt1,cnt2;
+       cnt1 = hpet_readl(HPET_COUNTER);
+       cnt2 = hpet_readl(HPET_COUNTER);
+       if(cnt2-cnt1>1000) printk("So big! (%u)\n",cnt2-cnt1);
 static int hpet_next_event(unsigned long delta,
                           struct clock_event_device *evt, int timer)