[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