On 07/08/15 07:18, Wu, Jiaxin wrote:
> Hi Laszlo,

> Thanks for your comments first.

> Ip4Dxe driver update patch has been sent out and reviewed, we have
> submitted to edk2 already.  So, that means the packages I listed will
> consume Ip4Config2 protocol integrated in Ip4Dxe driver directly.

What patch are you *specifically* referring to?

Are you referring to the email

  [edk2] [Patch] MdeModulePkg: Update Ip4Dxe driver to support
                 Ip4Config2 protocol, and also add UI support in Ip4Dxe
                 driver.
  http://thread.gmane.org/gmane.comp.bios.tianocore.devel/15823

If that is the patch that you have in mind, I have a couple of notes:

- Yes, that patch seems to install gEfiIp4Config2ProtocolGuid, in the
  Ip4DriverBindingStart() function.

- However, the INF file change (for
  "MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Dxe.inf") is not correct.
  It uses the TO_START comment for the protocol GUID, while it should
  by BY_START.

- You are saying that the patch has been reviewed. I cannot see any
  discussion in that thread (or any other thread with the same subject).
  Your initial posting also doesn't carry any Reviewed-by tags (from
  internal reviewers at Intel).

> For patch series, those patches used to update related pkgs and
> remove Ip4ConfigDxe driver. I will submit related pkgs  to edk2
> first, and then remove Ip4ConfigDxe driver.  I don't think the patch
> series has any issue.

The issue here is that your current patchset (that removes version 1 of
the protocol from a number of packages) *depends* on your patch that
adds version 2 of the protocol. The ordering between the patches must be:

  - add version 2 of the protocol
  - migrate drivers to version 2 of the protocol
  - remove version 1 of the protocol

*Unless* you spell out this dependency in your patch submission
explicitly, there is no guarantee that the independently submitted
patches will not be committed in reverse order. If you commit them in
reverse order, then there will exist a state in the edk2 tree where
those platforms are broken, because they have *no* version of the ip4
config protocol.

And yes, that is bad. When someone looks for an independent bug with
git-bisect, they might end up at that exact broken state in the tree.

So, this patch set is not broken *per se*. The breakage is that you did
not spell out either the justification for this set, or the strict
dependency this patch has on other patches of yours.

When I reviewed this series of yours, I realized the dependency myself.
Not knowing about your other patches, I went to the edk2 tree and
verified the dependency manually. The dependency was not satisfied at
that point, inside the tree, which is why I rejected your patch. (If you
patch had been committed at that exact moment, it would have broken OVMF.)

*Now* we have a different situation of course. I can see that your patch
that I referenced above, providing gEfiIp4Config2ProtocolGuid, has been
committed to the tree:

commit 1f6729ffe98095107ce82e67a4a0209674601a90
Author: jiaxinwu <jiaxin...@intel.com>
Date:   Tue Jul 7 08:19:55 2015 +0000

    MdeModulePkg: Update Ip4Dxe driver to support Ip4Config2 protocol,

    and also add new UI configuration support in Ip4Dxe driver.

    Contributed-under: TianoCore Contribution Agreement 1.0
    Signed-off-by: jiaxinwu <jiaxin...@intel.com>
    Reviewed-by: Ye Ting <ting...@intel.com>

    git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17853
6f19259b-4bc3-4df7-8a09-765794883524

I have a couple notes for this as well:

- This patch was never submitted to the list for review. Minimally, the
  subject line has been changed relative to the patch I linked above.

- The patch carries the Reviewed-by tag of Ye Ting. Where was that
  Reviewed-by tag posted to the public mailing list? If you got it in
  private, that's useless.

- The patch with Ip4Config2 protocol support was committed on
  2015-07-07, at 10:19:55 (in my time zone, UTC+2).

  However, you submitted your patch that removed version 1 of the
  protocol *earlier* than that, on the same day, but about 7 hours
  earlier. I may not have reviewed your patch against a fully
  up-to-date tree, but when you submitted the version 1 removal patch,
  without any hints at dependencies, it was *out of order*.

So, *assuming* that all version 2 protocol dependencies have been
provided / updated in the edk2 tree by now, this OvmfPkg patch is correct.

Please be much more explicit about inter-patch dependencies the next
time. One way to do that is to organize all related patches in a single
patch series. (Unless it becomes too big.) Another way is to reference
the prerequisite patches / series, by subject and URL, in the cover
letter (eg. 0/7) of the dependent patch set.

Finally, the commit message of this specific patch should state *why* it
is safe to remove the Ip4ConfigDxe module from OvmfPkg -- because Ip4Dxe
provides the Ip4Config2 protocol, and because all network drivers built
into OVMF that used to depend on Ip4Config have been migrated to Ip4Config2.

Thanks
Laszlo

> 
> Thanks.
> Jiaxin
> 
> -----Original Message-----
> From: Laszlo Ersek [mailto:ler...@redhat.com] 
> Sent: Tuesday, July 7, 2015 8:56 PM
> To: Wu, Jiaxin
> Cc: edk2-devel@lists.sourceforge.net
> Subject: Re: [edk2] [Patch 3/7] OvmfPkg: Remove Ip4ConfigDxe module from 
> OvmfPkg.
> 
> On 07/07/15 03:27, jiaxinwu wrote:
>> Contributed-under: TianoCore Contribution Agreement 1.0
>> Signed-off-by: jiaxinwu <jiaxin...@intel.com>
>> ---
>>  OvmfPkg/OvmfPkgIa32.dsc    | 1 -
>>  OvmfPkg/OvmfPkgIa32.fdf    | 1 -
>>  OvmfPkg/OvmfPkgIa32X64.dsc | 1 -
>>  OvmfPkg/OvmfPkgIa32X64.fdf | 1 -
>>  OvmfPkg/OvmfPkgX64.dsc     | 1 -
>>  OvmfPkg/OvmfPkgX64.fdf     | 1 -
>>  6 files changed, 6 deletions(-)
>>
>> diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc index 
>> bb008f6..c3508e6 100644
>> --- a/OvmfPkg/OvmfPkgIa32.dsc
>> +++ b/OvmfPkg/OvmfPkgIa32.dsc
>> @@ -524,11 +524,10 @@
>>    MdeModulePkg/Universal/Network/DpcDxe/DpcDxe.inf
>>    MdeModulePkg/Universal/Network/MnpDxe/MnpDxe.inf
>>    MdeModulePkg/Universal/Network/VlanConfigDxe/VlanConfigDxe.inf
>>    MdeModulePkg/Universal/Network/ArpDxe/ArpDxe.inf
>>    MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Dxe.inf
>> -  MdeModulePkg/Universal/Network/Ip4ConfigDxe/Ip4ConfigDxe.inf
>>    MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Dxe.inf
>>    MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Dxe.inf
>>    MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Dxe.inf
>>  !if $(NETWORK_IP6_ENABLE) == TRUE
>>    NetworkPkg/Ip6Dxe/Ip6Dxe.inf
>> diff --git a/OvmfPkg/OvmfPkgIa32.fdf b/OvmfPkg/OvmfPkgIa32.fdf index 
>> 24ad0bf..aadb099 100644
>> --- a/OvmfPkg/OvmfPkgIa32.fdf
>> +++ b/OvmfPkg/OvmfPkgIa32.fdf
>> @@ -302,11 +302,10 @@ FILE FREEFORM = 
>> PCD(gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdLogoFile) {
>>    INF  MdeModulePkg/Universal/Network/DpcDxe/DpcDxe.inf
>>    INF  MdeModulePkg/Universal/Network/MnpDxe/MnpDxe.inf
>>    INF  MdeModulePkg/Universal/Network/VlanConfigDxe/VlanConfigDxe.inf
>>    INF  MdeModulePkg/Universal/Network/ArpDxe/ArpDxe.inf
>>    INF  MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Dxe.inf
>> -  INF  MdeModulePkg/Universal/Network/Ip4ConfigDxe/Ip4ConfigDxe.inf
>>    INF  MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Dxe.inf
>>    INF  MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Dxe.inf
>>    INF  MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Dxe.inf
>>  !if $(NETWORK_IP6_ENABLE) == TRUE
>>    INF  NetworkPkg/Ip6Dxe/Ip6Dxe.inf
>> diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc 
>> index fed584f..40a1cf1 100644
>> --- a/OvmfPkg/OvmfPkgIa32X64.dsc
>> +++ b/OvmfPkg/OvmfPkgIa32X64.dsc
>> @@ -531,11 +531,10 @@
>>    MdeModulePkg/Universal/Network/DpcDxe/DpcDxe.inf
>>    MdeModulePkg/Universal/Network/MnpDxe/MnpDxe.inf
>>    MdeModulePkg/Universal/Network/VlanConfigDxe/VlanConfigDxe.inf
>>    MdeModulePkg/Universal/Network/ArpDxe/ArpDxe.inf
>>    MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Dxe.inf
>> -  MdeModulePkg/Universal/Network/Ip4ConfigDxe/Ip4ConfigDxe.inf
>>    MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Dxe.inf
>>    MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Dxe.inf
>>    MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Dxe.inf
>>  !if $(NETWORK_IP6_ENABLE) == TRUE
>>    NetworkPkg/Ip6Dxe/Ip6Dxe.inf
>> diff --git a/OvmfPkg/OvmfPkgIa32X64.fdf b/OvmfPkg/OvmfPkgIa32X64.fdf 
>> index 5f98be8..bc42a2b 100644
>> --- a/OvmfPkg/OvmfPkgIa32X64.fdf
>> +++ b/OvmfPkg/OvmfPkgIa32X64.fdf
>> @@ -302,11 +302,10 @@ FILE FREEFORM = 
>> PCD(gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdLogoFile) {
>>    INF  MdeModulePkg/Universal/Network/DpcDxe/DpcDxe.inf
>>    INF  MdeModulePkg/Universal/Network/MnpDxe/MnpDxe.inf
>>    INF  MdeModulePkg/Universal/Network/VlanConfigDxe/VlanConfigDxe.inf
>>    INF  MdeModulePkg/Universal/Network/ArpDxe/ArpDxe.inf
>>    INF  MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Dxe.inf
>> -  INF  MdeModulePkg/Universal/Network/Ip4ConfigDxe/Ip4ConfigDxe.inf
>>    INF  MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Dxe.inf
>>    INF  MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Dxe.inf
>>    INF  MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Dxe.inf
>>  !if $(NETWORK_IP6_ENABLE) == TRUE
>>    INF  NetworkPkg/Ip6Dxe/Ip6Dxe.inf
>> diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc index 
>> 92af10f..ac4e731 100644
>> --- a/OvmfPkg/OvmfPkgX64.dsc
>> +++ b/OvmfPkg/OvmfPkgX64.dsc
>> @@ -529,11 +529,10 @@
>>    MdeModulePkg/Universal/Network/DpcDxe/DpcDxe.inf
>>    MdeModulePkg/Universal/Network/MnpDxe/MnpDxe.inf
>>    MdeModulePkg/Universal/Network/VlanConfigDxe/VlanConfigDxe.inf
>>    MdeModulePkg/Universal/Network/ArpDxe/ArpDxe.inf
>>    MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Dxe.inf
>> -  MdeModulePkg/Universal/Network/Ip4ConfigDxe/Ip4ConfigDxe.inf
>>    MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Dxe.inf
>>    MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Dxe.inf
>>    MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Dxe.inf
>>  !if $(NETWORK_IP6_ENABLE) == TRUE
>>    NetworkPkg/Ip6Dxe/Ip6Dxe.inf
>> diff --git a/OvmfPkg/OvmfPkgX64.fdf b/OvmfPkg/OvmfPkgX64.fdf index 
>> 11e74e7..b6992bd 100644
>> --- a/OvmfPkg/OvmfPkgX64.fdf
>> +++ b/OvmfPkg/OvmfPkgX64.fdf
>> @@ -302,11 +302,10 @@ FILE FREEFORM = 
>> PCD(gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdLogoFile) {
>>    INF  MdeModulePkg/Universal/Network/DpcDxe/DpcDxe.inf
>>    INF  MdeModulePkg/Universal/Network/MnpDxe/MnpDxe.inf
>>    INF  MdeModulePkg/Universal/Network/VlanConfigDxe/VlanConfigDxe.inf
>>    INF  MdeModulePkg/Universal/Network/ArpDxe/ArpDxe.inf
>>    INF  MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Dxe.inf
>> -  INF  MdeModulePkg/Universal/Network/Ip4ConfigDxe/Ip4ConfigDxe.inf
>>    INF  MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Dxe.inf
>>    INF  MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Dxe.inf
>>    INF  MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Dxe.inf
>>  !if $(NETWORK_IP6_ENABLE) == TRUE
>>    INF  NetworkPkg/Ip6Dxe/Ip6Dxe.inf
>>
> 
> I don't see any driver in the edk2 tree that installs 
> gEfiIp4Config2ProtocolGuid, at the moment.
> 
> In your other email you wrote:
> 
>> Ip4ConfigDxe driver is deprecated in UEFI 2.5, so we will not support 
>> original Ip4Config Protocol, which is replace by Ip4Config2 Protocol 
>> integrated in Ip4Dxe driver.
> 
>> Related pkgs(MdeModulePkg, Nt32Pkg,  ArmPlatformPkg, ArmVirtPkg, 
>> EmulatorPkg, OvmfPkg, Vlv2TbltDevicePkg) need to remove Ip4ConfigDxe 
>> module and related guid definitions, otherwise they will meet build 
>> failure issue after we update Ip4Dxe driver and deprecate Ip4ConfigDxe 
>> driver.
> 
> However, if these patches were committed first, then the packages you listed 
> would have no Ip4Config protocol *at all*, either version 1 or version 2. 
> Because, as you said, Ip4Config2 will only be implemented in the future (in 
> Ip4Dxe).
> 
> That would break IPv4 networking for all of these packages: Ip4Dxe.inf lists 
> "gEfiIp4ConfigProtocolGuid" (that is, version 1) as TO_START.
> 
> The right way to implement such changes is the following:
> - First implement the new (version 2) protocol in the edk2 tree. This
>   can be a separate, initial patch set, or else the first segment of a
>   larger patch series.
> - Then flip client packages over to the new protocol version. This is
>   where the old driver INF can be removed from the DSC and FDF files.
> - Finally, you can delete Ip4ConfigDxe from the tree completely.
> 
> In other words, the tree must build, and preferably even work, at *any* stage 
> within your patch series. The patches must preserve bisectability.
> 
> Therefore, I don't think this patch series is good, in its current form.
> Please consider the pattern I described above.
> 
> Thanks
> Laszlo
> 


------------------------------------------------------------------------------
Don't Limit Your Business. Reach for the Cloud.
GigeNET's Cloud Solutions provide you with the tools and support that
you need to offload your IT needs and focus on growing your business.
Configured For All Businesses. Start Your Cloud Today.
https://www.gigenetcloud.com/
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to