Re: RFC: fast transactions in EC [was: a problem about the two patches in bug 10724 & 11428]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 2008-09-04 at 01:55 +0400, Alexey Starikovskiy wrote:
> Hi,
> Here is the patch, which moves almost all transaction functionality into interrupt handler, which is IMHO good.
> 
> with the enabled DEBUG, the interrupt picture looks like this (single transaction):
Thanks for your work and efforts. Maybe you have tested the patch on
your laptop. But IMO this is not reasonable. In the following cases
maybe the patch can't work well.
   a. EC GPE storm.  According to ACPI spec the EC uses the pulse
interrupt and interrupt is firmware generated using an EC GPIO output,
which is connected with chipset GPIO input. If the pulse waveform is
very wide, maybe several EC GPE interrupts will be triggered although EC
firmware generates one pulse waveform. How can we read the corresponding
data from EC in the GPE interrupt service handler? Maybe the read/write
data is completely incorrect.
   b. If there is no EC interrupt although OBF_1 bit is valid.(In theory
when OBF_1 is valid, EC should trigger GPE interrupt). In such case the
read/write flowchart will be wrong.

  At the same time it seems that EC transaction flowchart will become
more complex in this patch.


> [  228.823886] ACPI: EC: ---> status = 0x08 -- this is a check for IBF=0 before starting transaction
> [  228.823888] ACPI: EC: transaction start
> [  228.823890] ACPI: EC: <--- command = 0x80 -- here we write command
> [  228.824123] ACPI: EC: ~~~> interrupt -- this interrupt is generated with the same content in status register as before writing a command...
> [  228.824127] ACPI: EC: ---> status = 0x08
> [  228.824129] ACPI: EC: <--- data = 0x58
> [  228.824152] ACPI: EC: ~~~> interrupt -- and now EC start sending us interrupts like crazy...
> [  228.824155] ACPI: EC: ---> status = 0x02
> [  228.824169] ACPI: EC: ~~~> interrupt
> [  228.824172] ACPI: EC: ---> status = 0x02
> [  228.824186] ACPI: EC: ~~~> interrupt
> [  228.824189] ACPI: EC: ---> status = 0x02
> [  228.824203] ACPI: EC: ~~~> interrupt
> [  228.824206] ACPI: EC: ---> status = 0x02
> [  228.824219] ACPI: EC: ~~~> interrupt
> [  228.824222] ACPI: EC: ---> status = 0x02
> [  228.824236] ACPI: EC: ~~~> interrupt
> [  228.824239] ACPI: EC: ---> status = 0x02
> [  228.824253] ACPI: EC: ~~~> interrupt
> [  228.824256] ACPI: EC: ---> status = 0x02
> [  228.824270] ACPI: EC: ~~~> interrupt
> [  228.824273] ACPI: EC: ---> status = 0x02
> [  228.824287] ACPI: EC: ~~~> interrupt
> [  228.824290] ACPI: EC: ---> status = 0x02
> [  228.824304] ACPI: EC: ~~~> interrupt
> [  228.824307] ACPI: EC: ---> status = 0x02
> [  228.824321] ACPI: EC: ~~~> interrupt
> [  228.824324] ACPI: EC: ---> status = 0x02
> [  228.824337] ACPI: EC: ~~~> interrupt
> [  228.824340] ACPI: EC: ---> status = 0x02
> [  228.824354] ACPI: EC: ~~~> interrupt
> [  228.824357] ACPI: EC: ---> status = 0x02
> [  228.824371] ACPI: EC: ~~~> interrupt
> [  228.824374] ACPI: EC: ---> status = 0x02
> [  228.824388] ACPI: EC: ~~~> interrupt
> [  228.824391] ACPI: EC: ---> status = 0x02
> [  228.824405] ACPI: EC: ~~~> interrupt
> [  228.824408] ACPI: EC: ---> status = 0x02
> [  228.824422] ACPI: EC: ~~~> interrupt
> [  228.824425] ACPI: EC: ---> status = 0x02
> [  228.824439] ACPI: EC: ~~~> interrupt
> [  228.824442] ACPI: EC: ---> status = 0x02
> [  228.824455] ACPI: EC: ~~~> interrupt
> [  228.824458] ACPI: EC: ---> status = 0x02
> [  228.824472] ACPI: EC: ~~~> interrupt
> [  228.824475] ACPI: EC: ---> status = 0x02
> [  228.824489] ACPI: EC: ~~~> interrupt
> [  228.824492] ACPI: EC: ---> status = 0x02
> [  228.824506] ACPI: EC: ~~~> interrupt
> [  228.824509] ACPI: EC: ---> status = 0x02
> [  228.824523] ACPI: EC: ~~~> interrupt
> [  228.824526] ACPI: EC: ---> status = 0x02
> [  228.824540] ACPI: EC: ~~~> interrupt
> [  228.824543] ACPI: EC: ---> status = 0x02
> [  228.824557] ACPI: EC: ~~~> interrupt
> [  228.824560] ACPI: EC: ---> status = 0x02
> [  228.824573] ACPI: EC: ~~~> interrupt
> [  228.824576] ACPI: EC: ---> status = 0x02
> [  228.824590] ACPI: EC: ~~~> interrupt
> [  228.824593] ACPI: EC: ---> status = 0x02
> [  228.824607] ACPI: EC: ~~~> interrupt
> [  228.824610] ACPI: EC: ---> status = 0x02
> [  228.824624] ACPI: EC: ~~~> interrupt
> [  228.824627] ACPI: EC: ---> status = 0x02
> [  228.824641] ACPI: EC: ~~~> interrupt
> [  228.824644] ACPI: EC: ---> status = 0x02
> [  228.824658] ACPI: EC: ~~~> interrupt
> [  228.824661] ACPI: EC: ---> status = 0x02
> [  228.824675] ACPI: EC: ~~~> interrupt
> [  228.824678] ACPI: EC: ---> status = 0x02
> [  228.824691] ACPI: EC: ~~~> interrupt
> [  228.824694] ACPI: EC: ---> status = 0x02
> [  228.824708] ACPI: EC: ~~~> interrupt
> [  228.824711] ACPI: EC: ---> status = 0x02
> [  228.824785] ACPI: EC: ~~~> interrupt    --- one more "real" interrupt. Others are just garbage.
> [  228.824788] ACPI: EC: ---> status = 0x01
> [  228.824791] ACPI: EC: ---> data = 0x35
> [  228.824805] ACPI: EC: ~~~> interrupt
> [  228.824808] ACPI: EC: ---> status = 0x00
> [  228.824822] ACPI: EC: ~~~> interrupt
> [  228.824825] ACPI: EC: ---> status = 0x00
> [  228.824839] ACPI: EC: ~~~> interrupt
> [  228.824842] ACPI: EC: ---> status = 0x00
> [  228.824856] ACPI: EC: ~~~> interrupt
> [  228.824859] ACPI: EC: ---> status = 0x00
> [  228.824873] ACPI: EC: ~~~> interrupt
> [  228.824876] ACPI: EC: ---> status = 0x00
> [  228.824890] ACPI: EC: ~~~> interrupt
> [  228.824893] ACPI: EC: ---> status = 0x00
> [  228.824907] ACPI: EC: ~~~> interrupt
> [  228.824910] ACPI: EC: ---> status = 0x00
> [  228.824924] ACPI: EC: ~~~> interrupt
> [  228.824926] ACPI: EC: ---> status = 0x00
> [  228.824940] ACPI: EC: ~~~> interrupt
> [  228.824943] ACPI: EC: ---> status = 0x00
> [  228.824957] ACPI: EC: ~~~> interrupt
> [  228.824960] ACPI: EC: ---> status = 0x00
> [  228.824974] ACPI: EC: ~~~> interrupt
> [  228.824977] ACPI: EC: ---> status = 0x00
> [  228.824991] ACPI: EC: ~~~> interrupt
> [  228.824994] ACPI: EC: ---> status = 0x00
> [  228.825008] ACPI: EC: ~~~> interrupt
> [  228.825011] ACPI: EC: ---> status = 0x00
> [  228.825025] ACPI: EC: ~~~> interrupt
> [  228.825028] ACPI: EC: ---> status = 0x00
> [  228.825042] ACPI: EC: ~~~> interrupt
> [  228.825044] ACPI: EC: ---> status = 0x00
> [  228.825058] ACPI: EC: ~~~> interrupt
> [  228.825061] ACPI: EC: ---> status = 0x00
> [  228.825075] ACPI: EC: ~~~> interrupt
> [  228.825078] ACPI: EC: ---> status = 0x00
> [  228.825092] ACPI: EC: ~~~> interrupt
> [  228.825095] ACPI: EC: ---> status = 0x00
> [  228.825109] ACPI: EC: ~~~> interrupt
> [  228.825112] ACPI: EC: ---> status = 0x00
> [  228.825126] ACPI: EC: ~~~> interrupt
> [  228.825129] ACPI: EC: ---> status = 0x00
> [  228.825143] ACPI: EC: ~~~> interrupt
> [  228.825146] ACPI: EC: ---> status = 0x00
> [  228.825160] ACPI: EC: ~~~> interrupt
> [  228.825162] ACPI: EC: ---> status = 0x00
> [  228.825176] ACPI: EC: ~~~> interrupt
> [  228.825179] ACPI: EC: ---> status = 0x00
> [  228.825193] ACPI: EC: ~~~> interrupt
> [  228.825196] ACPI: EC: ---> status = 0x00
> [  228.825210] ACPI: EC: ~~~> interrupt
> [  228.825213] ACPI: EC: ---> status = 0x00
> [  228.825227] ACPI: EC: ~~~> interrupt
> [  228.825230] ACPI: EC: ---> status = 0x00
> [  228.825244] ACPI: EC: ~~~> interrupt
> [  228.825247] ACPI: EC: ---> status = 0x00
> [  228.825261] ACPI: EC: ~~~> interrupt
> [  228.825264] ACPI: EC: ---> status = 0x00
> [  228.825277] ACPI: EC: ~~~> interrupt
> [  228.825280] ACPI: EC: ---> status = 0x00
> [  228.825294] ACPI: EC: ~~~> interrupt
> [  228.825297] ACPI: EC: ---> status = 0x00
> [  228.825311] ACPI: EC: ~~~> interrupt
> [  228.825314] ACPI: EC: ---> status = 0x00
> [  228.825328] ACPI: EC: ~~~> interrupt
> [  228.825331] ACPI: EC: ---> status = 0x00
> [  228.825345] ACPI: EC: ~~~> interrupt
> [  228.825348] ACPI: EC: ---> status = 0x00
> [  228.825362] ACPI: EC: ~~~> interrupt
> [  228.825365] ACPI: EC: ---> status = 0x00
> [  228.825379] ACPI: EC: ~~~> interrupt
> [  228.825381] ACPI: EC: ---> status = 0x00
> [  228.825387] ACPI: EC: transaction end
> 
> "transaction end" happens to be printed than EC stops sending interrupts. It looks like we get 100% interrupt load for 1ms or so...
> This piece does not have 0x20 (SCI) bit set, so it is not a query issue.
> 
> I'm out of ideas, so if you have some, please speak up.
> Also, Intel wants back this problematic notebook in 2 weeks, so I will not be able to debug it afterwards.
> 
> Regards,
> Alex.

--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux