Re: [edk2] SNP_INIT while in TPL_NOTIFY

2017-01-30 Thread Tomas Pilar (tpilar)

Thanks Laszlo,

I am glad I wasn't going insane there. I'll turn it into a simple busy poll.

Cheers,
Tom


On 27/01/17 18:12, Laszlo Ersek wrote:

On 01/27/17 17:51, Tomas Pilar (tpilar) wrote:

Hi,

I am currently maintaining our network driver written using the EDKII
framework. Our network device implements a MCDI (mc-driver interface)
which is (in theory) asynchronous (DMA doorbell-messagebox
communication), although the majority of the calls take less than a
jiffy. So for example, the setting up of TX and RX queues on the NIC
requires some MCDI calls which the driver then has to wait for. I've
implemented this using the gSB->SetTimer event system.

My problem is that the SimpleNetworkInitialize() method is called by the
UEFI platform network core (network core finds a new NIC with SNP ->
tries to open -> not initialised, so it tries to INIT) using a
TPL_NOTIFY context,

This looks like a bug, in the code that calls SimpleNetworkInitialize().
According to "Table 24. TPL Restrictions", for Simple Network Protocol
methods, the TPL must be <= TPL_CALLBACK. Meaning, an SNP implementation
mustn't raise the TPL above TPL_CALLBACK, but also that any client can't
call SNP methods while executing on a TPL > TPL_CALLBACK.

Worse, even staying at TPL_CALLBACK wouldn't be good enough for calling
gBS->SetTimer(). SetTimer is < TPL_HIGH_LEVEL, so that'd be fine, but
gBS->WaitForEvent() is strictly = TPL_APPLICATION. So WaitForEvent()
can't be called when running on TPL_CALLBACK level.


where the code is not allowed to sleep (I assume
that this is the MNP generic one second network poll timer). I could in
theory initialise the NIC earlier, during probe, but the SNP allows for
specification of extra buffer space for TX and RX during init. The
network core might conceivable use that. Or the MNP might want to change
station address using SNP or call for a reset which again requires
asynchronous NIC operation.

Has anyone encountered something similar? Is there a canonical solution
to this issue?

I think you can poll the NIC in a busy loop, or if that's excessive, use
gBS->Stall() between polls. Stall() is <= TPL_HIGH_LEVEL, so it should
be safe. OTOH, "Execution of the processor is not yielded for the
duration of the stall".

Thanks
Laszlo


Cheers,
Tomas Pilar


The information contained in this message is confidential and is
intended for the addressee(s) only. If you have received this message in
error, please notify the sender immediately and delete the message.
Unless you are an addressee (or authorized to receive for an addressee),
you may not use, copy or disclose to anyone this message or any
information contained in this message. The unauthorized use, disclosure,
copying or alteration of this message is strictly prohibited.
___
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel


The information contained in this message is confidential and is intended for 
the addressee(s) only. If you have received this message in error, please 
notify the sender immediately and delete the message. Unless you are an 
addressee (or authorized to receive for an addressee), you may not use, copy or 
disclose to anyone this message or any information contained in this message. 
The unauthorized use, disclosure, copying or alteration of this message is 
strictly prohibited.
___
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel


Re: [edk2] SNP_INIT while in TPL_NOTIFY

2017-01-30 Thread Andrew Fish

> On Jan 27, 2017, at 10:12 AM, Laszlo Ersek  wrote:
> 
> On 01/27/17 17:51, Tomas Pilar (tpilar) wrote:
>> Hi,
>> 
>> I am currently maintaining our network driver written using the EDKII
>> framework. Our network device implements a MCDI (mc-driver interface)
>> which is (in theory) asynchronous (DMA doorbell-messagebox
>> communication), although the majority of the calls take less than a
>> jiffy. So for example, the setting up of TX and RX queues on the NIC
>> requires some MCDI calls which the driver then has to wait for. I've
>> implemented this using the gSB->SetTimer event system.
>> 
>> My problem is that the SimpleNetworkInitialize() method is called by the
>> UEFI platform network core (network core finds a new NIC with SNP ->
>> tries to open -> not initialised, so it tries to INIT) using a
>> TPL_NOTIFY context,
> 
> This looks like a bug, in the code that calls SimpleNetworkInitialize().
> According to "Table 24. TPL Restrictions", for Simple Network Protocol
> methods, the TPL must be <= TPL_CALLBACK. Meaning, an SNP implementation
> mustn't raise the TPL above TPL_CALLBACK, but also that any client can't
> call SNP methods while executing on a TPL > TPL_CALLBACK.
> 
> Worse, even staying at TPL_CALLBACK wouldn't be good enough for calling
> gBS->SetTimer(). SetTimer is < TPL_HIGH_LEVEL, so that'd be fine, but
> gBS->WaitForEvent() is strictly = TPL_APPLICATION. So WaitForEvent()
> can't be called when running on TPL_CALLBACK level.
> 
>> where the code is not allowed to sleep (I assume
>> that this is the MNP generic one second network poll timer). I could in
>> theory initialise the NIC earlier, during probe, but the SNP allows for
>> specification of extra buffer space for TX and RX during init. The
>> network core might conceivable use that. Or the MNP might want to change
>> station address using SNP or call for a reset which again requires
>> asynchronous NIC operation.
>> 
>> Has anyone encountered something similar? Is there a canonical solution
>> to this issue?
> 
> I think you can poll the NIC in a busy loop, or if that's excessive, use
> gBS->Stall() between polls. Stall() is <= TPL_HIGH_LEVEL, so it should
> be safe. OTOH, "Execution of the processor is not yielded for the
> duration of the stall".
> 

Laszlo,

You are correct Stall() does not yield. The only way to yield from an event is 
to return from the event function. 

When your are writing threaded code you think of stall as a way to yield, so 
you encoded the logic of the program as a loop that yields to the thread. In 
the event model, since you have to return, the idiom is not a loop but a state 
machine. Thus your event will yield by returning so you would want to perhaps 
take a different action the next time you enter the event based on previous 
state.  So if you had to deal with a long stall you might want to program a 
timer event that periodically checks for the event and it will always return 
quickly regardless of the state of the check. So you can break stuff up into 
smaller events or have a single event that remembers state, but both of these 
are a lot like solving the problem with a state machine vs. a code loop. 

Thanks,

Andrew Fish  

> Thanks
> Laszlo
> 
>> 
>> Cheers,
>> Tomas Pilar
>> 
>> 
>> The information contained in this message is confidential and is
>> intended for the addressee(s) only. If you have received this message in
>> error, please notify the sender immediately and delete the message.
>> Unless you are an addressee (or authorized to receive for an addressee),
>> you may not use, copy or disclose to anyone this message or any
>> information contained in this message. The unauthorized use, disclosure,
>> copying or alteration of this message is strictly prohibited.
>> ___
>> edk2-devel mailing list
>> edk2-devel@lists.01.org
>> https://lists.01.org/mailman/listinfo/edk2-devel
> 
> ___
> edk2-devel mailing list
> edk2-devel@lists.01.org 
> https://lists.01.org/mailman/listinfo/edk2-devel 
> 
___
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel


[edk2] Is the UDK2017 branch stable?

2017-01-30 Thread David A. Van Arnem
Hi all,

On a fresh clone of the EDK2 repo, I noticed there is a "UDK2017"
branch.  Is this currently a stable branch, like UDK2015 before it?  I
did not find any notes about a UDK2017 release on the tianocore website,
only UDK2015 (probably too new), so I wanted to check here before I use
it as a starting point.
-- 
Regards,
David Van Arnem
Development Engineer IV
Computer Measurement Laboratory, LLC

___
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel


Re: [edk2] Is the UDK2017 branch stable?

2017-01-30 Thread Richardson, Brian
UDK2017 is the current development branch. There is a stable release of UDK2017 
planned for Q2'17 based on items scheduled for the next UEFI specification 
update and other improvements (HTTP/HTTPS Boot, SignedCapsulePkg, bug fixes, 
...). 

We're working on getting a feature list to publish on the wiki. Unfortunately, 
some of this depends on UEFI spec info that we can't publish until the spec is 
finalized. I'll keep you posted.

Thanks ... br
---
Brian Richardson, Senior Technical Marketing Engineer, Intel Software
brian.richard...@intel.com -- @intel_Brian (Twitter & WeChat)
https://software.intel.com/en-us/meet-the-developers/evangelists/team/brian-richardson
 

-Original Message-
From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of David A. 
Van Arnem
Sent: Monday, January 30, 2017 4:29 PM
To: edk2-devel@lists.01.org 
Subject: [edk2] Is the UDK2017 branch stable?

Hi all,

On a fresh clone of the EDK2 repo, I noticed there is a "UDK2017"
branch.  Is this currently a stable branch, like UDK2015 before it?  I did not 
find any notes about a UDK2017 release on the tianocore website, only UDK2015 
(probably too new), so I wanted to check here before I use it as a starting 
point.
--
Regards,
David Van Arnem
Development Engineer IV
Computer Measurement Laboratory, LLC

___
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
___
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel


Re: [edk2] Is the UDK2017 branch stable?

2017-01-30 Thread David A. Van Arnem
Great thank you.  It sounds like the UDK2017 branch should be stable
enough for my purposes, I will just need to remember to pull updates
periodically.

Thanks,
David

On 01/30/2017 03:00 PM, Richardson, Brian wrote:
> UDK2017 is the current development branch. There is a stable release of 
> UDK2017 planned for Q2'17 based on items scheduled for the next UEFI 
> specification update and other improvements (HTTP/HTTPS Boot, 
> SignedCapsulePkg, bug fixes, ...). 
> 
> We're working on getting a feature list to publish on the wiki. 
> Unfortunately, some of this depends on UEFI spec info that we can't publish 
> until the spec is finalized. I'll keep you posted.
> 
> Thanks ... br
> ---
> Brian Richardson, Senior Technical Marketing Engineer, Intel Software
> brian.richard...@intel.com -- @intel_Brian (Twitter & WeChat)
> https://software.intel.com/en-us/meet-the-developers/evangelists/team/brian-richardson
>  
> 
> -Original Message-
> From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of David 
> A. Van Arnem
> Sent: Monday, January 30, 2017 4:29 PM
> To: edk2-devel@lists.01.org 
> Subject: [edk2] Is the UDK2017 branch stable?
> 
> Hi all,
> 
> On a fresh clone of the EDK2 repo, I noticed there is a "UDK2017"
> branch.  Is this currently a stable branch, like UDK2015 before it?  I did 
> not find any notes about a UDK2017 release on the tianocore website, only 
> UDK2015 (probably too new), so I wanted to check here before I use it as a 
> starting point.
> --
> Regards,
> David Van Arnem
> Development Engineer IV
> Computer Measurement Laboratory, LLC
> 
> ___
> edk2-devel mailing list
> edk2-devel@lists.01.org
> https://lists.01.org/mailman/listinfo/edk2-devel
> ___
> edk2-devel mailing list
> edk2-devel@lists.01.org
> https://lists.01.org/mailman/listinfo/edk2-devel
> 

-- 
Regards,
David Van Arnem
Development Engineer IV
Computer Measurement Laboratory, LLC

___
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel


Re: [edk2] [PATCH 0/5] OvmfPkg, ArmVirtPkg: QemuFwCfgLib: partial rewrite of fw_cfg files

2017-01-30 Thread Jordan Justen
Series Reviewed-by: Jordan Justen 

On 2017-01-27 03:29:37, Laszlo Ersek wrote:
> This feature will allow OvmfPkg/AcpiPlatformDxe to implement the
> QEMU_LOADER_WRITE_POINTER command, which will instruct the firmware to
> write the address of a previously allocated/downloaded fw_cfg blob into
> another (writeable) fw_cfg file at a specific offset, in order to inform
> QEMU about the allocation address. The command will be based on the
> QemuFwCfgSkipBytes() and QemuFwCfgWriteBytes() APIs.
> 
> Ref:https://bugzilla.tianocore.org/show_bug.cgi?id=359
> Repo:   https://github.com/lersek/edk2.git
> Branch: fwcfg_skip
> 
> Cc: Ard Biesheuvel 
> Cc: Jordan Justen 
> 
> Thanks,
> Laszlo
> 
> Laszlo Ersek (5):
>   OvmfPkg/QemuFwCfgLib: generalize InternalQemuFwCfgDmaBytes() to SKIP
> op
>   OvmfPkg/QemuFwCfgLib: add QemuFwCfgSkipBytes()
>   ArmVirtPkg/QemuFwCfgLib: extract generic DmaTransferBytes() function
>   ArmVirtPkg/QemuFwCfgLib: use DMA for QemuFwCfgWriteBytes() if
> available
>   ArmVirtPkg/QemuFwCfgLib: implement QemuFwCfgSkipBytes() API
> 
>  OvmfPkg/Include/Library/QemuFwCfgLib.h |  16 ++
>  ArmVirtPkg/Library/QemuFwCfgLib/QemuFwCfgLib.c | 178 ++--
>  OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgLib.c|  75 +++--
>  3 files changed, 246 insertions(+), 23 deletions(-)
> 
> -- 
> 2.9.3
> 
___
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel


Re: [edk2] [PATCH 0/5] OvmfPkg, ArmVirtPkg: QemuFwCfgLib: partial rewrite of fw_cfg files

2017-01-30 Thread Laszlo Ersek
On 01/31/17 00:07, Jordan Justen wrote:
> Series Reviewed-by: Jordan Justen 

Thank you both for the reviews; commit range: 465663e9f128..7fcb73541299.

Laszlo

> On 2017-01-27 03:29:37, Laszlo Ersek wrote:
>> This feature will allow OvmfPkg/AcpiPlatformDxe to implement the
>> QEMU_LOADER_WRITE_POINTER command, which will instruct the firmware to
>> write the address of a previously allocated/downloaded fw_cfg blob into
>> another (writeable) fw_cfg file at a specific offset, in order to inform
>> QEMU about the allocation address. The command will be based on the
>> QemuFwCfgSkipBytes() and QemuFwCfgWriteBytes() APIs.
>>
>> Ref:https://bugzilla.tianocore.org/show_bug.cgi?id=359
>> Repo:   https://github.com/lersek/edk2.git
>> Branch: fwcfg_skip
>>
>> Cc: Ard Biesheuvel 
>> Cc: Jordan Justen 
>>
>> Thanks,
>> Laszlo
>>
>> Laszlo Ersek (5):
>>   OvmfPkg/QemuFwCfgLib: generalize InternalQemuFwCfgDmaBytes() to SKIP
>> op
>>   OvmfPkg/QemuFwCfgLib: add QemuFwCfgSkipBytes()
>>   ArmVirtPkg/QemuFwCfgLib: extract generic DmaTransferBytes() function
>>   ArmVirtPkg/QemuFwCfgLib: use DMA for QemuFwCfgWriteBytes() if
>> available
>>   ArmVirtPkg/QemuFwCfgLib: implement QemuFwCfgSkipBytes() API
>>
>>  OvmfPkg/Include/Library/QemuFwCfgLib.h |  16 ++
>>  ArmVirtPkg/Library/QemuFwCfgLib/QemuFwCfgLib.c | 178 ++--
>>  OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgLib.c|  75 +++--
>>  3 files changed, 246 insertions(+), 23 deletions(-)
>>
>> -- 
>> 2.9.3
>>
> ___
> edk2-devel mailing list
> edk2-devel@lists.01.org
> https://lists.01.org/mailman/listinfo/edk2-devel
> 

___
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel