fprintf: Fix plural/singular when printing cacheline boundary

Mostly happens in explicitely packed structs, but there are other cases
as well, one of which we can see below:

Before/after:

  --- /tmp/b	2022-05-24 09:50:53.872105860 -0300
  +++ /tmp/a	2022-05-24 09:51:39.891231335 -0300
  @@ -8421,37 +8421,37 @@
   struct new_utsname {
   	char                       sysname[65];          /*     0    65 */
  -	/* --- cacheline 1 boundary (64 bytes) was 1 bytes ago --- */
  +	/* --- cacheline 1 boundary (64 bytes) was 1 byte ago --- */
   	char                       nodename[65];         /*    65    65 */
   	/* --- cacheline 2 boundary (128 bytes) was 2 bytes ago --- */
   	char                       release[65];          /*   130    65 */
   	/* --- cacheline 3 boundary (192 bytes) was 3 bytes ago --- */
   	char                       version[65];          /*   195    65 */
   	/* --- cacheline 4 boundary (256 bytes) was 4 bytes ago --- */
   	char                       machine[65];          /*   260    65 */
   	/* --- cacheline 5 boundary (320 bytes) was 5 bytes ago --- */
   	char                       domainname[65];       /*   325    65 */

   	/* size: 390, cachelines: 7, members: 6 */
   	/* last cacheline: 6 bytes */
   };
  @@ -27848,37 +27848,37 @@
   struct old_utsname {
   	char                       sysname[65];          /*     0    65 */
  -	/* --- cacheline 1 boundary (64 bytes) was 1 bytes ago --- */
  +	/* --- cacheline 1 boundary (64 bytes) was 1 byte ago --- */
   	char                       nodename[65];         /*    65    65 */
   	/* --- cacheline 2 boundary (128 bytes) was 2 bytes ago --- */
   	char                       release[65];          /*   130    65 */
   	/* --- cacheline 3 boundary (192 bytes) was 3 bytes ago --- */
   	char                       version[65];          /*   195    65 */
   	/* --- cacheline 4 boundary (256 bytes) was 4 bytes ago --- */
   	char                       machine[65];          /*   260    65 */

   	/* size: 325, cachelines: 6, members: 5 */
   	/* last cacheline: 5 bytes */
   };
  @@ -52698,37 +52698,37 @@
   struct nfs41_impl_id {
   	char                       domain[1025];         /*     0  1025 */
  -	/* --- cacheline 16 boundary (1024 bytes) was 1 bytes ago --- */
  +	/* --- cacheline 16 boundary (1024 bytes) was 1 byte ago --- */
   	char                       name[1025];           /*  1025  1025 */

   	/* XXX 6 bytes hole, try to pack */

   	/* --- cacheline 32 boundary (2048 bytes) was 8 bytes ago --- */
   	struct nfstime4            date;                 /*  2056    16 */

   	/* XXX last struct has 4 bytes of padding */

   	/* size: 2072, cachelines: 33, members: 3 */
   	/* sum members: 2066, holes: 1, sum holes: 6 */
   	/* paddings: 1, sum paddings: 4 */
   	/* last cacheline: 24 bytes */
   };
  @@ -100590,37 +100590,37 @@
   struct cxl_mbox_identify {
   	char                       fw_revision[16];      /*     0    16 */
   	__le64                     total_capacity;       /*    16     8 */
   	__le64                     volatile_capacity;    /*    24     8 */
   	__le64                     persistent_capacity;  /*    32     8 */
   	__le64                     partition_align;      /*    40     8 */
   	__le16                     info_event_log_size;  /*    48     2 */
   	__le16                     warning_event_log_size; /*    50     2 */
   	__le16                     failure_event_log_size; /*    52     2 */
   	__le16                     fatal_event_log_size; /*    54     2 */
   	__le32                     lsa_size;             /*    56     4 */
   	u8                         poison_list_max_mer[3]; /*    60     3 */
   	__le16                     inject_poison_limit;  /*    63     2 */
  -	/* --- cacheline 1 boundary (64 bytes) was 1 bytes ago --- */
  +	/* --- cacheline 1 boundary (64 bytes) was 1 byte ago --- */
   	u8                         poison_caps;          /*    65     1 */
   	u8                         qos_telemetry_caps;   /*    66     1 */

   	/* size: 67, cachelines: 2, members: 14 */
   	/* last cacheline: 3 bytes */
   } __attribute__((__packed__));
  @@ -137125,37 +137125,37 @@
   struct saved_context {
   	struct pt_regs             regs;                 /*     0   168 */
   	/* --- cacheline 2 boundary (128 bytes) was 40 bytes ago --- */
   	u16                        ds;                   /*   168     2 */
   	u16                        es;                   /*   170     2 */
   	u16                        fs;                   /*   172     2 */
   	u16                        gs;                   /*   174     2 */
   	long unsigned int          kernelmode_gs_base;   /*   176     8 */
   	long unsigned int          usermode_gs_base;     /*   184     8 */
   	/* --- cacheline 3 boundary (192 bytes) --- */
   	long unsigned int          fs_base;              /*   192     8 */
   	long unsigned int          cr0;                  /*   200     8 */
   	long unsigned int          cr2;                  /*   208     8 */
   	long unsigned int          cr3;                  /*   216     8 */
   	long unsigned int          cr4;                  /*   224     8 */
   	u64                        misc_enable;          /*   232     8 */
   	bool                       misc_enable_saved;    /*   240     1 */
   	struct saved_msrs          saved_msrs;           /*   241    16 */
  -	/* --- cacheline 4 boundary (256 bytes) was 1 bytes ago --- */
  +	/* --- cacheline 4 boundary (256 bytes) was 1 byte ago --- */
   	long unsigned int          efer;                 /*   257     8 */
   	u16                        gdt_pad;              /*   265     2 */
   	struct desc_ptr            gdt_desc;             /*   267    10 */
   	u16                        idt_pad;              /*   277     2 */
   	struct desc_ptr            idt;                  /*   279    10 */
   	u16                        ldt;                  /*   289     2 */
   	u16                        tss;                  /*   291     2 */
   	long unsigned int          tr;                   /*   293     8 */
   	long unsigned int          safety;               /*   301     8 */
   	long unsigned int          return_address;       /*   309     8 */

   	/* size: 317, cachelines: 5, members: 25 */
   	/* last cacheline: 61 bytes */
   } __attribute__((__packed__));

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
1 file changed