Hi,

On September 15, 2017 2:08:28 AM GMT-03:00, "Ni, Ruiyu" <ruiyu...@intel.com> 
wrote:
>Hi Paulo,
>The responsibility of PartitionDxe driver is to partition the physical
>BLK (the entire CDROM)
>into logical BLKs (one BLK for each volume).
>It doesn't make sense to create a child BLK handle which still covers
>the entire CDROM.
>So as I suggested in below, PartitionInstallUdfChildHandles() should
>contain a for-loop to iterate
>all the volumes in the CDROM, and create child BLK handle for each
>volumes, but skipping Eltorito volume.

Ah, makes sense to me now. Thanks for clarifying it. So I agree with you.

In whatever you guys decide to do with it, count on me to give some help.

Thanks!
Paulo

>
>Thanks/Ray
>
>> -----Original Message-----
>> From: Paulo Alcantara [mailto:pca...@zytor.com]
>> Sent: Friday, September 15, 2017 12:58 PM
>> To: Ni, Ruiyu <ruiyu...@intel.com>; Laszlo Ersek <ler...@redhat.com>
>> Cc: edk2-devel@lists.01.org; Wu, Hao A <hao.a...@intel.com>; Zeng,
>Star
>> <star.z...@intel.com>
>> Subject: Re: Functionality issues in UDF support
>> 
>> 
>> 
>> Hi Ray,
>> 
>> On September 15, 2017 12:33:04 AM GMT-03:00, "Ni, Ruiyu"
>> <ruiyu...@intel.com> wrote:
>> >Paulo,
>> >Before raising my questions, I'd like to confirm that for a single
>> >CD/DVD in UDF format, there might be multiple volumes.
>> >One of the volume could be Eltorito type.
>> >If my understanding is correct, please continue reading below.
>> 
>> Right.
>> 
>> >
>> >We found below mapping table using "map -r" shell command in a
>platform
>> >with only PartitionDxe change and without UdfDxe driver.
>> >It's a bug that <BLK6> and <BLK7/FS2> are created. Actually they are
>> >identical to <BLK3> and <BLK4/FS1>.
>> >
>> >--- Mapping table---
>> >     BLK2: Alias(s):
>> >          PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x0,0xFFFF,0x0)
>> >
>> >     BLK3: Alias(s):
>> >          PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x0,0xFFFF,0x0)/CDROM(0x0)
>> >      FS1: Alias(s):CD1a65535a1:;BLK4:
>> >          PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x0,0xFFFF,0x0)/CDROM(0x1)
>> >
>> >     BLK5: Alias(s):
>> >PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x0,0xFFFF,0x0)/VenMedia(C5BD4D42-
>> 1A76-4996-8956-73CDA326CD0A)
>> >     BLK6: Alias(s):
>> >PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x0,0xFFFF,0x0)/VenMedia(C5BD4D42-
>> 1A76-4996-8956-73CDA326CD0A)/CDROM(0x0)
>> >      FS2: Alias(s):CD1a65535ab:;BLK7:
>> >PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x0,0xFFFF,0x0)/VenMedia(C5BD4D42-
>> 1A76-
>> >4996-8956-73CDA326CD0A)/CDROM(0x1)
>> >--- End of mapping table ---
>> >
>> >After investigation, I found the UDF logic in Partition driver
>doesn't
>> >truly skip the Eltorito volume.
>> >The code flow is like below:
>> >
>> >  1.  <BLK2> is created by ScsiDiskDxe driver.
>> >  2.  By passing <BLK2> to PartitionDxe Start()
>> >*   <BLK3> and <BLK4/FS1> are created by PartitionDxe driver, by
>> >PartitionInstallElToritoChildHandles().
>> >*   <BLK5> is created by PartitionDxe driver, by
>> >PartitionInstallUdfChildHandles().
>> >  3.  By passing <BLK5> to PartitionDxe Start()
>> >*   <BLK6> and <BLK7/FS2> are created by PartitionDxe driver, by
>> >PartitionInstallElToritoChildHandles().
>> >
>> >I think step 2.a is not correct if my understanding to UDF is
>correct.
>> >The PartitionInstallUdfChildHandles() should iterate all volumes in
>the
>> >media and creates the child BLK handle for each volume, but skipping
>> >Eltorito volume.
>> >
>> >Instead, the current implementation just creates one child BLK
>handle
>> >for the entire media.
>> >To avoid reclusively creating  child BLK handle, the
>> >PartitionInstallUdfChildHandles() contains a logic to do nothing
>when
>> >the handle is created by ParititonDxe driver. The logic is not
>needed
>> >when the implementation follows my suggestion above.
>> >Due to this, step 3.a creates the additional but shouldn't-exist BLK
>> >handles <BLK6> and <BLK7/FS2>.
>> >
>> >UdfDxe driver is supposed to Start() on each volume and produce
>> >SimpleFileSystem protocol.
>> 
>> It seems that PartitionInstallUdfChildHandles() indeed skips the
>ElTorito
>> partitions otherwise you'd see the ".../CDROM(0x1)/VenMedia()" and
>> ".../CDROM(0x0)/VenMedia()" device paths *also* in the mapping
>output.
>> 
>> If I understand correctly, the problem is that when we create a child
>handle
>> for an UDF volume, Partition driver will execute again, parse the
>newly
>> created UDF handle, find again an ElTorito partition and then install
>a new
>> child handle (VenMedia()/CDROM())
>> 
>> So, the logic of skipping of ElTorito partitions in
>> PartitionInstallUdfChildHandles() is not enough. Unfortunately we
>can't
>> handle UDF bridge disks (ElTorito + UDF) entirely in
>> PartitionInstallUdfChildHandles() -- we should probably also skip UDF
>device
>> paths in PartitionInstallElToritoChildHandles().
>> 
>> Does it make sense to you, Ray? Thanks for raising this up.
>> 
>> Paulo
>> 
>> >
>> >Do you agree with my above suggestions?
>> >
>> >Laszlo,
>> >I understood your needs of this UDF support. But as you can see
>there
>> >are many build failures and even functionality issues due to this
>> >support.
>> >I am not sure how the other open source project handles such cases.
>> >But I am thinking maybe we could move the whole UDF support to
>> >edk2-staging firstly and move it back after all the issues are
>> >resolved.
>> >What's your suggestion?
>> >
>> >Thanks/Ray
>> 
>> --
>> Sent from my Android device with K-9 Mail. Please excuse my brevity.

-- 
Sent from my Android device with K-9 Mail. Please excuse my brevity.
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to