Hi Ray,

On September 15, 2017 12:33:04 AM GMT-03:00, "Ni, Ruiyu" <[email protected]> 
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.
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to