Yes, the code can be more simplified, thanks for your comment. Lubo
-----Original Message----- From: Fu, Siyuan Sent: Friday, March 18, 2016 2:36 PM To: Zhang, Lubo <[email protected]>; [email protected] Cc: Ye, Ting <[email protected]>; Wu, Jiaxin <[email protected]> Subject: RE: [patch] NetworkPkg:Fix Http boot download issue. Hi, Lubo Since the Private->FilePathUri is extracted from the URI device path node in the FilePath, the (Private->FilePathUri != NULL) implied that the FilePath is not end device path node. So I thinke the whole change could be simplified to if ((UsingIpv6 != Private->UsingIpv6) || ((Private->FilePathUri != NULL) && (AsciiStrCmp (Private->BootFileUri, Private->FilePathUri) != 0))) { // stop and restart driver } Best Regards Siyuan > -----Original Message----- > From: Zhang, Lubo > Sent: Thursday, March 17, 2016 5:19 PM > To: [email protected] > Cc: Fu, Siyuan <[email protected]>; Ye, Ting <[email protected]>; > Wu, Jiaxin <[email protected]> > Subject: [patch] NetworkPkg:Fix Http boot download issue. > > When http boot download the second time without return to the boot > manager, the DHCP process will start twice wiht the same Boot file uri > and print the information twice which we not expected. This is caused > by wrong logic of handling the device path of the boot file when > loading it. > > Cc: Fu Siyuan <[email protected]> > Cc: Ye Ting <[email protected]> > Cc: Wu Jiaxin <[email protected]> > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Zhang Lubo <[email protected]> > --- > NetworkPkg/HttpBootDxe/HttpBootImpl.c | 11 +++++++++-- > 1 file changed, 9 insertions(+), 2 deletions(-) > > diff --git a/NetworkPkg/HttpBootDxe/HttpBootImpl.c > b/NetworkPkg/HttpBootDxe/HttpBootImpl.c > index 3adb08d..487a01e 100644 > --- a/NetworkPkg/HttpBootDxe/HttpBootImpl.c > +++ b/NetworkPkg/HttpBootDxe/HttpBootImpl.c > @@ -385,10 +385,11 @@ HttpBootDxeLoadFile ( { > HTTP_BOOT_PRIVATE_DATA *Private; > HTTP_BOOT_VIRTUAL_NIC *VirtualNic; > BOOLEAN MediaPresent; > BOOLEAN UsingIpv6; > + BOOLEAN IsFilePathUriEqual; > EFI_STATUS Status; > > if (This == NULL || BufferSize == NULL || FilePath == NULL) { > return EFI_INVALID_PARAMETER; > } > @@ -428,12 +429,18 @@ HttpBootDxeLoadFile ( > // > // Restart the HTTP boot driver in 2 cases: > // 1. Http boot Driver has already been started but not on the > required IP version. > // 2. The required boot FilePath is different with the one we > produced in the device path > // protocol. > - // > - if ((UsingIpv6 != Private->UsingIpv6) || !IsDevicePathEnd(FilePath)) { > + IsFilePathUriEqual = FALSE; > + if (!IsDevicePathEnd (FilePath)) { > + if ((Private->FilePathUri != NULL) && (AsciiStrCmp > + (Private->BootFileUri, > Private->FilePathUri) == 0)) { > + IsFilePathUriEqual =TRUE; > + } > + } > + > + if ((UsingIpv6 != Private->UsingIpv6) || ((Private->FilePathUri > + != NULL) > && !IsFilePathUriEqual)) { > Status = HttpBootStop (Private); > if (!EFI_ERROR (Status)) { > Status = HttpBootStart (Private, UsingIpv6, FilePath); > } > } > -- > 1.9.5.msysgit.1 _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

