mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Marco Felsch <m.felsch@pengutronix.de>
To: Ahmad Fatoum <a.fatoum@pengutronix.de>
Cc: barebox@lists.infradead.org
Subject: Re: [PATCH 12/18] common: partitions: record whether disk is GPT or MBR partitioned
Date: Thu, 1 Jun 2023 10:19:53 +0200	[thread overview]
Message-ID: <20230601081953.dwknjo47ckueiu5m@pengutronix.de> (raw)
In-Reply-To: <1b1fc8e7-d74b-2fa6-8e53-c4c256d7e7a5@pengutronix.de>

On 23-06-01, Ahmad Fatoum wrote:
> On 31.05.23 19:33, Marco Felsch wrote:
> > On 23-05-31, Ahmad Fatoum wrote:
> >> Currently, the only way to differentiate between a GPT disk and a MBR
> >> one is to check whether the cdev's device has a guid (=> GPT) or a
> >> nt_signature (=> MBR) device parameter. We already have a flag parameter
> >> though, so let's record this info there for easy retrieval.
> >>
> >> We intentionally don't use the struct cdev::filetype member, because
> >> we don't want to change behavior of file_detect_type().
> >>
> >> Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
> >> ---
> >>  common/partitions/dos.c |  2 ++
> >>  common/partitions/efi.c |  2 ++
> >>  fs/fs.c                 |  4 ++++
> >>  include/driver.h        | 20 +++++++++++++++++---
> >>  4 files changed, 25 insertions(+), 3 deletions(-)
> >>
> >> diff --git a/common/partitions/dos.c b/common/partitions/dos.c
> >> index ad60c0b27b46..7472824b00b9 100644
> >> --- a/common/partitions/dos.c
> >> +++ b/common/partitions/dos.c
> >> @@ -185,6 +185,8 @@ static void dos_partition(void *buf, struct block_device *blk,
> >>  	if (signature)
> >>  		sprintf(blk->cdev.diskuuid, "%08x", signature);
> >>  
> >> +	blk->cdev.flags |= DEVFS_IS_MBR_PARTITIONED;
> >> +
> >>  	table = (struct partition_entry *)&buffer[446];
> >>  
> >>  	for (i = 0; i < 4; i++) {
> >> diff --git a/common/partitions/efi.c b/common/partitions/efi.c
> >> index 780a8695e8a8..df63b82afe24 100644
> >> --- a/common/partitions/efi.c
> >> +++ b/common/partitions/efi.c
> >> @@ -449,6 +449,8 @@ static void efi_partition(void *buf, struct block_device *blk,
> >>  	snprintf(blk->cdev.diskuuid, sizeof(blk->cdev.diskuuid), "%pUl", &gpt->disk_guid);
> >>  	dev_add_param_string_fixed(blk->dev, "guid", blk->cdev.diskuuid);
> >>  
> >> +	blk->cdev.flags |= DEVFS_IS_GPT_PARTITIONED;
> >> +
> >>  	nb_part = le32_to_cpu(gpt->num_partition_entries);
> >>  
> >>  	if (nb_part > MAX_PARTITION) {
> >> diff --git a/fs/fs.c b/fs/fs.c
> >> index 9d8aab268ca4..2d2d327c5fbc 100644
> >> --- a/fs/fs.c
> >> +++ b/fs/fs.c
> >> @@ -94,6 +94,10 @@ void cdev_print(const struct cdev *cdev)
> >>  			printf(" table-partition");
> >>  		if (cdev->flags & DEVFS_IS_MCI_MAIN_PART_DEV)
> >>  			printf(" mci-main-partition");
> >> +		if (cdev->flags & DEVFS_IS_GPT_PARTITIONED)
> >> +			printf(" gpt-partitioned");
> >> +		if (cdev->flags & DEVFS_IS_MBR_PARTITIONED)
> >> +			printf(" mbr-partitioned");
> >>  		if (cdev->mtd)
> >>  			printf(" mtd");
> >>  		printf(" )");
> >> diff --git a/include/driver.h b/include/driver.h
> >> index 118d2adb6750..5f2eae65466f 100644
> >> --- a/include/driver.h
> >> +++ b/include/driver.h
> >> @@ -584,9 +584,23 @@ extern struct list_head cdev_list;
> >>  #define DEVFS_PARTITION_FIXED		(1U << 0)
> >>  #define DEVFS_PARTITION_READONLY	(1U << 1)
> >>  #define DEVFS_IS_CHARACTER_DEV		(1U << 3)
> >> -#define DEVFS_IS_MCI_MAIN_PART_DEV	(1U << 4)
> >> -#define DEVFS_PARTITION_FROM_OF		(1U << 5)
> >> -#define DEVFS_PARTITION_FROM_TABLE	(1U << 6)
> >> +#define DEVFS_PARTITION_FROM_OF		(1U << 4)
> >> +#define DEVFS_PARTITION_FROM_TABLE	(1U << 5)
> >> +#define DEVFS_IS_GPT_PARTITIONED	(1U << 6)
> >> +#define DEVFS_IS_MBR_PARTITIONED	(1U << 7)
> >> +#define DEVFS_IS_MCI_MAIN_PART_DEV	(1U << 8)
> > 
> > Why do you reorder the bits here again?
> 
> I wanted the partition bits to be together.
> 
> >> +
> >> +static inline bool cdev_is_gpt_partitioned(const struct cdev *master)
> >> +{
> >> +	return master && (master->flags & DEVFS_IS_GPT_PARTITIONED)
> >> +		== DEVFS_IS_GPT_PARTITIONED;
> > 
> > Why not just: 'return !!(master->flags & DEVFS_IS_GPT_PARTITIONED)' ?
> 
> Left over from when this was more than one bit. I will change to:
> 
>   return master && (master->flags & DEVFS_IS_GPT_PARTITIONED)
> 
> I want to keep the NULL check, as we only set this for the master device.

By 'as we only set this for the master device' you mean the flags right?
We don't expect the 'struct cdev*' parameter to be NULL.

Regards,
  Marco

> 
> Cheers,
> Ahmad
> 
> 
> > 
> > Regards,
> >   Marco
> > 
> >> +}
> >> +
> >> +static inline bool cdev_is_mbr_partitioned(const struct cdev *master)
> >> +{
> >> +	return master && (master->flags & DEVFS_IS_MBR_PARTITIONED)
> >> +		== DEVFS_IS_MBR_PARTITIONED;
> >> +}
> >>  
> >>  struct cdev *devfs_add_partition(const char *devname, loff_t offset,
> >>  		loff_t size, unsigned int flags, const char *name);
> >> -- 
> >> 2.39.2
> >>
> >>
> >>
> > 
> 
> -- 
> Pengutronix e.K.                           |                             |
> Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
> 31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
> Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |
> 
> 



  parent reply	other threads:[~2023-06-01  8:21 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-31 14:59 [PATCH 00/18] state: allow lookup of barebox state partition by Type GUID Ahmad Fatoum
2023-05-31 14:59 ` [PATCH 01/18] common: partitions: decouple from EFI GUID definition Ahmad Fatoum
2023-05-31 14:59 ` [PATCH 02/18] efi: define efi_guid_t as 32-bit aligned guid_t Ahmad Fatoum
2023-05-31 14:59 ` [PATCH 03/18] cdev: fix for_each_cdev macro Ahmad Fatoum
2023-05-31 15:37   ` Marco Felsch
2023-05-31 14:59 ` [PATCH 04/18] of: partition: support of_partition_ensure_probed on parent device Ahmad Fatoum
2023-05-31 16:30   ` Marco Felsch
2023-06-01  4:48     ` Ahmad Fatoum
2023-05-31 14:59 ` [PATCH 05/18] of: of_path: always call of_partition_ensure_probed before resolving Ahmad Fatoum
2023-05-31 16:34   ` Marco Felsch
2023-06-01  7:00   ` Ulrich Ölmann
2023-05-31 14:59 ` [PATCH 06/18] driver: add new cdev_is_partition helper Ahmad Fatoum
2023-05-31 16:36   ` Marco Felsch
2023-05-31 14:59 ` [PATCH 07/18] commands: stat: remove code duplication for type info Ahmad Fatoum
2023-05-31 16:44   ` Marco Felsch
2023-05-31 14:59 ` [PATCH 08/18] cdev: use more descriptive struct cdev::diskuuid/partuuid Ahmad Fatoum
2023-05-31 16:56   ` Marco Felsch
2023-05-31 14:59 ` [PATCH 09/18] cdev: record whether partition is parsed from OF Ahmad Fatoum
2023-05-31 17:04   ` Marco Felsch
2023-06-06 19:31     ` Ahmad Fatoum
2023-06-01  8:03   ` Ulrich Ölmann
2023-05-31 14:59 ` [PATCH 10/18] cdev: have devfs_add_partition return existing identical partition, not NULL Ahmad Fatoum
2023-05-31 17:23   ` Marco Felsch
2023-06-01  4:56     ` Ahmad Fatoum
2023-06-01  7:32       ` Sascha Hauer
2023-06-01  8:26       ` Marco Felsch
2023-06-01  7:36   ` Sascha Hauer
2023-06-07  8:06     ` Ahmad Fatoum
2023-05-31 14:59 ` [PATCH 11/18] block: parse partition table on block device registration Ahmad Fatoum
2023-05-31 17:25   ` Marco Felsch
2023-06-01  7:42   ` Sascha Hauer
2023-06-01  8:33     ` Marco Felsch
2023-06-06 19:30     ` Ahmad Fatoum
2023-06-01  8:24   ` Ulrich Ölmann
2023-06-01  8:31     ` Ahmad Fatoum
2023-06-01 10:33       ` Ahmad Fatoum
2023-05-31 14:59 ` [PATCH 12/18] common: partitions: record whether disk is GPT or MBR partitioned Ahmad Fatoum
2023-05-31 17:33   ` Marco Felsch
2023-06-01  5:08     ` Ahmad Fatoum
2023-06-01  5:58       ` Ahmad Fatoum
2023-06-01  8:19       ` Marco Felsch [this message]
2023-06-01 10:40         ` Ahmad Fatoum
2023-05-31 14:59 ` [PATCH 13/18] block: add cdev_is_block_(device,partition,disk) helpers Ahmad Fatoum
2023-05-31 17:35   ` Marco Felsch
2023-05-31 14:59 ` [PATCH 14/18] of: export new of_cdev_find helper Ahmad Fatoum
2023-05-31 17:41   ` Marco Felsch
2023-06-01  8:41   ` Ulrich Ölmann
2023-05-31 14:59 ` [PATCH 15/18] state: factor device path lookup into helper function Ahmad Fatoum
2023-05-31 17:54   ` Marco Felsch
2023-06-01  5:14     ` Ahmad Fatoum
2023-05-31 14:59 ` [PATCH 16/18] cdev: use cdev::dos_partition_type only if cdev_is_mbr_partitioned Ahmad Fatoum
2023-05-31 18:54   ` Marco Felsch
2023-06-01  5:30     ` Ahmad Fatoum
2023-05-31 14:59 ` [PATCH 17/18] common: partitions: efi: record type UUID in cdev Ahmad Fatoum
     [not found]   ` <20230531193130.fgmvxm27dh3gbvhh@pengutronix.de>
2023-06-06 19:28     ` Ahmad Fatoum
2023-06-07  8:55       ` Marco Felsch
2023-05-31 14:59 ` [PATCH 18/18] state: allow lookup of barebox state partition by Type GUID Ahmad Fatoum
2023-05-31 20:01   ` Marco Felsch
2023-06-01  5:49     ` Ahmad Fatoum
2023-06-01  8:11       ` Marco Felsch
2023-06-01 10:44         ` Ahmad Fatoum
2023-06-01  8:05   ` Sascha Hauer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230601081953.dwknjo47ckueiu5m@pengutronix.de \
    --to=m.felsch@pengutronix.de \
    --cc=a.fatoum@pengutronix.de \
    --cc=barebox@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox