[2/2] nfit: remove broken NFITBadLineOffsetAlignment check

Message ID 20180706144255.56986-2-elliott@hpe.com
State Accepted
Headers show
Series
  • [1/2] nfit: improve length handling for ACPI NFIT structures
Related show

Commit Message

Elliott, Robert (Persistent Memory) July 6, 2018, 2:42 p.m.
Remove the NFITBadLineOffsetAlignment check.

Entries in the ACPI NFIT Interleave structure are in units of
the line size, not values required to be multiples of the line
size.  So, the test fails incorrectly with these errors:
  NFIT Subtable:
    Type:                                   0x0002
    Length:                                 0x0050
    Interleave Structure Index:             0x000c
    Reserved:                               0x0000
    Number of Lines Described:              0x00000010
    Line Size:                              0x00000100
    Line Offset:                            0x00000000
    Line Offset:                            0x00000001
FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x00000001 instead
    Line Offset:                            0x00000002
FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x00000002 instead
    Line Offset:                            0x00000003
FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x00000003 instead
    Line Offset:                            0x00000004
FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x00000004 instead
    Line Offset:                            0x00000005
FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x00000005 instead
    Line Offset:                            0x00000006
FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x00000006 instead
    Line Offset:                            0x00000007
FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x00000007 instead
    Line Offset:                            0x00000008
FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x00000008 instead
    Line Offset:                            0x00000009
FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x00000009 instead
    Line Offset:                            0x0000000a
FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x0000000a instead
    Line Offset:                            0x0000000b
FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x0000000b instead
    Line Offset:                            0x0000000c
FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x0000000c instead
    Line Offset:                            0x0000000d
FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x0000000d instead
    Line Offset:                            0x0000000e
FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x0000000e instead
    Line Offset:                            0x0000000f
FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x0000000f instead

Instead, print the full SPA address offset alongside the Line Offset
(by multiplying by the Line Size).

  NFIT Subtable:
    Type:                                   0x0002
    Length:                                 0x0050
    Interleave Structure Index:             0x000c
    Reserved:                               0x0000
    Number of Lines Described:              0x00000010
    Line Size:                              0x00000100
    Line Offset:                            0x00000000, SPA 0x0000000000000000
    Line Offset:                            0x00000001, SPA 0x0000000000000100
    Line Offset:                            0x00000002, SPA 0x0000000000000200
    Line Offset:                            0x00000003, SPA 0x0000000000000300
    Line Offset:                            0x00000004, SPA 0x0000000000000400
    Line Offset:                            0x00000005, SPA 0x0000000000000500
    Line Offset:                            0x00000006, SPA 0x0000000000000600
    Line Offset:                            0x00000007, SPA 0x0000000000000700
    Line Offset:                            0x00000008, SPA 0x0000000000000800
    Line Offset:                            0x00000009, SPA 0x0000000000000900
    Line Offset:                            0x0000000a, SPA 0x0000000000000a00
    Line Offset:                            0x0000000b, SPA 0x0000000000000b00
    Line Offset:                            0x0000000c, SPA 0x0000000000000c00
    Line Offset:                            0x0000000d, SPA 0x0000000000000d00
    Line Offset:                            0x0000000e, SPA 0x0000000000000e00
    Line Offset:                            0x0000000f, SPA 0x0000000000000f00

Fixes: d11965d8346b9525 ("add ACPI NFIT test")
Signed-off-by: Robert Elliott <elliott@hpe.com>
---
 src/acpi/nfit/nfit.c | 14 +++++---------
 1 file changed, 5 insertions(+), 9 deletions(-)

Comments

Alex Hung July 9, 2018, 8:14 p.m. | #1
On 2018-07-06 07:42 AM, Robert Elliott wrote:
> Remove the NFITBadLineOffsetAlignment check.
> 
> Entries in the ACPI NFIT Interleave structure are in units of
> the line size, not values required to be multiples of the line
> size.  So, the test fails incorrectly with these errors:
>    NFIT Subtable:
>      Type:                                   0x0002
>      Length:                                 0x0050
>      Interleave Structure Index:             0x000c
>      Reserved:                               0x0000
>      Number of Lines Described:              0x00000010
>      Line Size:                              0x00000100
>      Line Offset:                            0x00000000
>      Line Offset:                            0x00000001
> FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x00000001 instead
>      Line Offset:                            0x00000002
> FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x00000002 instead
>      Line Offset:                            0x00000003
> FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x00000003 instead
>      Line Offset:                            0x00000004
> FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x00000004 instead
>      Line Offset:                            0x00000005
> FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x00000005 instead
>      Line Offset:                            0x00000006
> FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x00000006 instead
>      Line Offset:                            0x00000007
> FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x00000007 instead
>      Line Offset:                            0x00000008
> FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x00000008 instead
>      Line Offset:                            0x00000009
> FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x00000009 instead
>      Line Offset:                            0x0000000a
> FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x0000000a instead
>      Line Offset:                            0x0000000b
> FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x0000000b instead
>      Line Offset:                            0x0000000c
> FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x0000000c instead
>      Line Offset:                            0x0000000d
> FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x0000000d instead
>      Line Offset:                            0x0000000e
> FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x0000000e instead
>      Line Offset:                            0x0000000f
> FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x0000000f instead
> 
> Instead, print the full SPA address offset alongside the Line Offset
> (by multiplying by the Line Size).
> 
>    NFIT Subtable:
>      Type:                                   0x0002
>      Length:                                 0x0050
>      Interleave Structure Index:             0x000c
>      Reserved:                               0x0000
>      Number of Lines Described:              0x00000010
>      Line Size:                              0x00000100
>      Line Offset:                            0x00000000, SPA 0x0000000000000000
>      Line Offset:                            0x00000001, SPA 0x0000000000000100
>      Line Offset:                            0x00000002, SPA 0x0000000000000200
>      Line Offset:                            0x00000003, SPA 0x0000000000000300
>      Line Offset:                            0x00000004, SPA 0x0000000000000400
>      Line Offset:                            0x00000005, SPA 0x0000000000000500
>      Line Offset:                            0x00000006, SPA 0x0000000000000600
>      Line Offset:                            0x00000007, SPA 0x0000000000000700
>      Line Offset:                            0x00000008, SPA 0x0000000000000800
>      Line Offset:                            0x00000009, SPA 0x0000000000000900
>      Line Offset:                            0x0000000a, SPA 0x0000000000000a00
>      Line Offset:                            0x0000000b, SPA 0x0000000000000b00
>      Line Offset:                            0x0000000c, SPA 0x0000000000000c00
>      Line Offset:                            0x0000000d, SPA 0x0000000000000d00
>      Line Offset:                            0x0000000e, SPA 0x0000000000000e00
>      Line Offset:                            0x0000000f, SPA 0x0000000000000f00
> 
> Fixes: d11965d8346b9525 ("add ACPI NFIT test")
> Signed-off-by: Robert Elliott <elliott@hpe.com>
> ---
>   src/acpi/nfit/nfit.c | 14 +++++---------
>   1 file changed, 5 insertions(+), 9 deletions(-)
> 
> diff --git a/src/acpi/nfit/nfit.c b/src/acpi/nfit/nfit.c
> index 99231501..961e5f28 100644
> --- a/src/acpi/nfit/nfit.c
> +++ b/src/acpi/nfit/nfit.c
> @@ -250,15 +250,11 @@ static int nfit_test1(fwts_framework *fw)
>   				break;
>   			}
>   
> -			for (i = 0; i < nfit_struct->line_count; i++) {
> -				fwts_log_info_verbatim(fw, "    Line Offset:                            0x%8.8"  PRIx32, nfit_struct->line_offset[i]);
> -
> -				if (nfit_struct->line_offset[i] % nfit_struct->line_size)
> -					fwts_failed(fw, LOG_LEVEL_HIGH,
> -						"NFITBadLineOffsetAlignment",
> -						"NFIT Line Offset must be aligned nfit_struct->line_size, got "
> -						"0x%8.8" PRIx32 " instead", nfit_struct->line_offset[i]);
> -			}
> +			for (i = 0; i < nfit_struct->line_count; i++)
> +				fwts_log_info_verbatim(fw,
> +					"    Line Offset:                            0x%8.8" PRIx32 ", SPA 0x%16.16" PRIx64,
> +					nfit_struct->line_offset[i],
> +					(uint64_t) nfit_struct->line_offset[i] * nfit_struct->line_size);
>   
>   			if (nfit_struct->reserved != 0)
>   				reserved_passed = nfit_struct->reserved;
> 


Acked-by: Alex Hung <alex.hung@canonical.com>
ivanhu July 16, 2018, 9:59 a.m. | #2
On 07/06/2018 10:42 PM, Robert Elliott wrote:
> Remove the NFITBadLineOffsetAlignment check.
>
> Entries in the ACPI NFIT Interleave structure are in units of
> the line size, not values required to be multiples of the line
> size.  So, the test fails incorrectly with these errors:
>   NFIT Subtable:
>     Type:                                   0x0002
>     Length:                                 0x0050
>     Interleave Structure Index:             0x000c
>     Reserved:                               0x0000
>     Number of Lines Described:              0x00000010
>     Line Size:                              0x00000100
>     Line Offset:                            0x00000000
>     Line Offset:                            0x00000001
> FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x00000001 instead
>     Line Offset:                            0x00000002
> FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x00000002 instead
>     Line Offset:                            0x00000003
> FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x00000003 instead
>     Line Offset:                            0x00000004
> FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x00000004 instead
>     Line Offset:                            0x00000005
> FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x00000005 instead
>     Line Offset:                            0x00000006
> FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x00000006 instead
>     Line Offset:                            0x00000007
> FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x00000007 instead
>     Line Offset:                            0x00000008
> FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x00000008 instead
>     Line Offset:                            0x00000009
> FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x00000009 instead
>     Line Offset:                            0x0000000a
> FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x0000000a instead
>     Line Offset:                            0x0000000b
> FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x0000000b instead
>     Line Offset:                            0x0000000c
> FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x0000000c instead
>     Line Offset:                            0x0000000d
> FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x0000000d instead
>     Line Offset:                            0x0000000e
> FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x0000000e instead
>     Line Offset:                            0x0000000f
> FAILED [HIGH] NFITBadLineOffsetAlignment: Test 1, NFIT Line Offset must be aligned nfit_struct->line_size, got 0x0000000f instead
>
> Instead, print the full SPA address offset alongside the Line Offset
> (by multiplying by the Line Size).
>
>   NFIT Subtable:
>     Type:                                   0x0002
>     Length:                                 0x0050
>     Interleave Structure Index:             0x000c
>     Reserved:                               0x0000
>     Number of Lines Described:              0x00000010
>     Line Size:                              0x00000100
>     Line Offset:                            0x00000000, SPA 0x0000000000000000
>     Line Offset:                            0x00000001, SPA 0x0000000000000100
>     Line Offset:                            0x00000002, SPA 0x0000000000000200
>     Line Offset:                            0x00000003, SPA 0x0000000000000300
>     Line Offset:                            0x00000004, SPA 0x0000000000000400
>     Line Offset:                            0x00000005, SPA 0x0000000000000500
>     Line Offset:                            0x00000006, SPA 0x0000000000000600
>     Line Offset:                            0x00000007, SPA 0x0000000000000700
>     Line Offset:                            0x00000008, SPA 0x0000000000000800
>     Line Offset:                            0x00000009, SPA 0x0000000000000900
>     Line Offset:                            0x0000000a, SPA 0x0000000000000a00
>     Line Offset:                            0x0000000b, SPA 0x0000000000000b00
>     Line Offset:                            0x0000000c, SPA 0x0000000000000c00
>     Line Offset:                            0x0000000d, SPA 0x0000000000000d00
>     Line Offset:                            0x0000000e, SPA 0x0000000000000e00
>     Line Offset:                            0x0000000f, SPA 0x0000000000000f00
>
> Fixes: d11965d8346b9525 ("add ACPI NFIT test")
> Signed-off-by: Robert Elliott <elliott@hpe.com>
> ---
>  src/acpi/nfit/nfit.c | 14 +++++---------
>  1 file changed, 5 insertions(+), 9 deletions(-)
>
> diff --git a/src/acpi/nfit/nfit.c b/src/acpi/nfit/nfit.c
> index 99231501..961e5f28 100644
> --- a/src/acpi/nfit/nfit.c
> +++ b/src/acpi/nfit/nfit.c
> @@ -250,15 +250,11 @@ static int nfit_test1(fwts_framework *fw)
>  				break;
>  			}
>  
> -			for (i = 0; i < nfit_struct->line_count; i++) {
> -				fwts_log_info_verbatim(fw, "    Line Offset:                            0x%8.8"  PRIx32, nfit_struct->line_offset[i]);
> -
> -				if (nfit_struct->line_offset[i] % nfit_struct->line_size)
> -					fwts_failed(fw, LOG_LEVEL_HIGH,
> -						"NFITBadLineOffsetAlignment",
> -						"NFIT Line Offset must be aligned nfit_struct->line_size, got "
> -						"0x%8.8" PRIx32 " instead", nfit_struct->line_offset[i]);
> -			}
> +			for (i = 0; i < nfit_struct->line_count; i++)
> +				fwts_log_info_verbatim(fw,
> +					"    Line Offset:                            0x%8.8" PRIx32 ", SPA 0x%16.16" PRIx64,
> +					nfit_struct->line_offset[i],
> +					(uint64_t) nfit_struct->line_offset[i] * nfit_struct->line_size);
>  
>  			if (nfit_struct->reserved != 0)
>  				reserved_passed = nfit_struct->reserved;

Acked-by: Ivan Hu <ivan.hu@canonical.com>

Patch

diff --git a/src/acpi/nfit/nfit.c b/src/acpi/nfit/nfit.c
index 99231501..961e5f28 100644
--- a/src/acpi/nfit/nfit.c
+++ b/src/acpi/nfit/nfit.c
@@ -250,15 +250,11 @@  static int nfit_test1(fwts_framework *fw)
 				break;
 			}
 
-			for (i = 0; i < nfit_struct->line_count; i++) {
-				fwts_log_info_verbatim(fw, "    Line Offset:                            0x%8.8"  PRIx32, nfit_struct->line_offset[i]);
-
-				if (nfit_struct->line_offset[i] % nfit_struct->line_size)
-					fwts_failed(fw, LOG_LEVEL_HIGH,
-						"NFITBadLineOffsetAlignment",
-						"NFIT Line Offset must be aligned nfit_struct->line_size, got "
-						"0x%8.8" PRIx32 " instead", nfit_struct->line_offset[i]);
-			}
+			for (i = 0; i < nfit_struct->line_count; i++)
+				fwts_log_info_verbatim(fw,
+					"    Line Offset:                            0x%8.8" PRIx32 ", SPA 0x%16.16" PRIx64,
+					nfit_struct->line_offset[i],
+					(uint64_t) nfit_struct->line_offset[i] * nfit_struct->line_size);
 
 			if (nfit_struct->reserved != 0)
 				reserved_passed = nfit_struct->reserved;