> -----Original Message----- > From: Gao, Zhichao <zhichao....@intel.com> > Sent: Wednesday, August 12, 2020 9:21 AM > To: devel@edk2.groups.io > Cc: Wang, Jian J <jian.j.w...@intel.com>; Wu, Hao A > <hao.a...@intel.com>; Ni, Ray <ray...@intel.com>; Gary Lin > <g...@suse.com>; Andrew Fish <af...@apple.com> > Subject: [PATCH V2 3/3] MdeModulePkg/PartitionDxe: Fix the incorrect LBA > size in child hander > > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2843 > > PartitionInstallChildHandle's parameters Start and End is counted by the > BlockSize, but in the implementation it uses the parent device's BlockSize to > calculate the new Start, End and LastBlock. > It would cause the driver report incorrect block scope and the file system > would fail to be found with right block scope. > So correct it to the right value. > > Cc: Jian J Wang <jian.j.w...@intel.com> > Cc: Hao A Wu <hao.a...@intel.com> > Cc: Ray Ni <ray...@intel.com> > Cc: Gary Lin <g...@suse.com> > Cc: Andrew Fish <af...@apple.com> > Signed-off-by: Zhichao Gao <zhichao....@intel.com> > Reviewed-by: Ray Ni <ray...@intel.com> > --- > MdeModulePkg/Universal/Disk/PartitionDxe/Partition.c | 12 +++--------- > 1 file changed, 3 insertions(+), 9 deletions(-) > > diff --git a/MdeModulePkg/Universal/Disk/PartitionDxe/Partition.c > b/MdeModulePkg/Universal/Disk/PartitionDxe/Partition.c > index 473e091320..f10ce7c65b 100644 > --- a/MdeModulePkg/Universal/Disk/PartitionDxe/Partition.c > +++ b/MdeModulePkg/Universal/Disk/PartitionDxe/Partition.c > @@ -1149,8 +1149,8 @@ PartitionInstallChildHandle ( > > Private->Signature = PARTITION_PRIVATE_DATA_SIGNATURE; > > - Private->Start = MultU64x32 (Start, ParentBlockIo->Media- > >BlockSize); > - Private->End = MultU64x32 (End + 1, ParentBlockIo->Media- > >BlockSize); > + Private->Start = MultU64x32 (Start, BlockSize); > + Private->End = MultU64x32 (End + 1, BlockSize);
For function PartitionInstallChildHandle(), the input parameters 'Start' and 'End' (which denote the block index) should be of unit indicated by the input parameter 'BlockSize'. I checked all the callers of PartitionInstallChildHandle(), it looks to me that GPT, MBR and UDF follow the above rule. While I am not able to get a straight- forward match for the El Torito case. It seems fine with me, but I am not sure. Anyway, if the CDROM content can be properly identified then I think the change will be good. Reviewed-by: Hao A Wu <hao.a...@intel.com> Best Regards, Hao Wu > > Private->BlockSize = BlockSize; > Private->ParentBlockIo = ParentBlockIo; > @@ -1187,13 +1187,7 @@ PartitionInstallChildHandle ( > > Private->Media.IoAlign = 0; > Private->Media.LogicalPartition = TRUE; > - Private->Media.LastBlock = DivU64x32 ( > - MultU64x32 ( > - End - Start + 1, > - ParentBlockIo->Media->BlockSize > - ), > - BlockSize > - ) - 1; > + Private->Media.LastBlock = End - Start; > > Private->Media.BlockSize = (UINT32) BlockSize; > > -- > 2.21.0.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#64048): https://edk2.groups.io/g/devel/message/64048 Mute This Topic: https://groups.io/mt/76139484/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-