[U-Boot] [PATCH 2/2] disk: part: use common api to lookup part driver

Dr. Philipp Tomsich philipp.tomsich at theobroma-systems.com
Fri Dec 15 09:08:50 UTC 2017


> On 15 Dec 2017, at 03:34, Kever Yang <kever.yang at rock-chips.com> wrote:
> 
> Hi Philipp,
> 
> 
> On 12/14/2017 05:53 PM, Dr. Philipp Tomsich wrote:
>> Kever,
>> 
>>> On 14 Dec 2017, at 07:39, Kever Yang <kever.yang at rock-chips.com> wrote:
>>> 
>>> Do not need to scan disk every time when we get part info
>>> by name.
>> How does this interact with USB devices?
>> I.e.: what happens, when you get the partition-info for a usb drive, then change
>> the attached usb drive (with only a single one attached, but a different one) and
>> do a ‘usb rescan’?
> 
> I don't understand your question here, the part driver is using block api,
> no matter its from usb or emmc, it's the same for part driver.
> USB msc driver should always call part_init() for a new device.

Thanks, this answers it: part_init() will always be called for new devices.

> This patch does not change the functionality of the origin implement, but with
> a better api, and do not need to scan the disk if the disk already have a known type.
> 
> Thanks,
> - Kever
>> 
>> Regards,
>> Philipp.
>> 
>>> Signed-off-by: Kever Yang <kever.yang at rock-chips.com>
>>> ---
>>> 
>>> disk/part.c | 29 +++++++++++++----------------
>>> 1 file changed, 13 insertions(+), 16 deletions(-)
>>> 
>>> diff --git a/disk/part.c b/disk/part.c
>>> index b007138..96c2858 100644
>>> --- a/disk/part.c
>>> +++ b/disk/part.c
>>> @@ -638,26 +638,23 @@ cleanup:
>>> int part_get_info_by_name(struct blk_desc *dev_desc, const char *name,
>>> 	disk_partition_t *info)
>>> {
>>> -	struct part_driver *first_drv =
>>> -		ll_entry_start(struct part_driver, part_driver);
>>> -	const int n_drvs = ll_entry_count(struct part_driver, part_driver);
>>> 	struct part_driver *part_drv;
>>> +	int ret;
>>> +	int i;
>>> 
>>> -	for (part_drv = first_drv; part_drv != first_drv + n_drvs; part_drv++) {
>>> -		int ret;
>>> -		int i;
>>> -		for (i = 1; i < part_drv->max_entries; i++) {
>>> -			ret = part_drv->get_info(dev_desc, i, info);
>>> -			if (ret != 0) {
>>> -				/* no more entries in table */
>>> -				break;
>>> -			}
>>> -			if (strcmp(name, (const char *)info->name) == 0) {
>>> -				/* matched */
>>> -				return i;
>>> -			}
>>> +	part_drv = part_driver_lookup_type(dev_desc);
>>> +	for (i = 1; i < part_drv->max_entries; i++) {
>>> +		ret = part_drv->get_info(dev_desc, i, info);
>>> +		if (ret != 0) {
>>> +			/* no more entries in table */
>>> +			break;
>>> +		}
>>> +		if (strcmp(name, (const char *)info->name) == 0) {
>>> +			/* matched */
>>> +			return i;
>>> 		}
>>> 	}
>>> +
>>> 	return -1;
>>> }
>>> 
>>> -- 
>>> 1.9.1
>>> 
>> 
> 
> 



More information about the U-Boot mailing list