2016-12-17 17:42:54

by Cihangir Akturk

[permalink] [raw]
Subject: Documentation/unaligned-memory-access.txt: fix incorrect comparison operator

In the actual implementation ether_addr_equal function tests for equality to 0
when returning. It seems in commit 0d74c4 it is somehow overlooked to change
this operator to reflect the actual function.

Signed-off-by: Cihangir Akturk <[email protected]>
---
Documentation/unaligned-memory-access.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Documentation/unaligned-memory-access.txt b/Documentation/unaligned-memory-access.txt
index a445da0..3f76c0c 100644
--- a/Documentation/unaligned-memory-access.txt
+++ b/Documentation/unaligned-memory-access.txt
@@ -151,7 +151,7 @@ bool ether_addr_equal(const u8 *addr1, const u8 *addr2)
#else
const u16 *a = (const u16 *)addr1;
const u16 *b = (const u16 *)addr2;
- return ((a[0] ^ b[0]) | (a[1] ^ b[1]) | (a[2] ^ b[2])) != 0;
+ return ((a[0] ^ b[0]) | (a[1] ^ b[1]) | (a[2] ^ b[2])) == 0;
#endif
}

--
2.1.4


2016-12-17 22:52:16

by Ozgur Karatas

[permalink] [raw]
Subject: Re: Documentation/unaligned-memory-access.txt: fix incorrect comparison operator

17.12.2016, 19:43, "Cihangir Akturk" <[email protected]>:
> In the actual implementation ether_addr_equal function tests for equality to 0
> when returning. It seems in commit 0d74c4 it is somehow overlooked to change
> this operator to reflect the actual function.

why this "return" function need to be ==0? I think, u16 functions read memory but "0" is should not be equalty.
This way, -for the code to work- memory should be everytime unaligned !=0.


> Signed-off-by: Cihangir Akturk <[email protected]>
> ---
>  Documentation/unaligned-memory-access.txt | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/Documentation/unaligned-memory-access.txt b/Documentation/unaligned-memory-access.txt
> index a445da0..3f76c0c 100644
> --- a/Documentation/unaligned-memory-access.txt
> +++ b/Documentation/unaligned-memory-access.txt
> @@ -151,7 +151,7 @@ bool ether_addr_equal(const u8 *addr1, const u8 *addr2)
>  #else
>          const u16 *a = (const u16 *)addr1;
>          const u16 *b = (const u16 *)addr2;
> - return ((a[0] ^ b[0]) | (a[1] ^ b[1]) | (a[2] ^ b[2])) != 0;
> + return ((a[0] ^ b[0]) | (a[1] ^ b[1]) | (a[2] ^ b[2])) == 0;
>  #endif
>  }
>
> --
> 2.1.4

2016-12-20 00:22:34

by Cihangir Akturk

[permalink] [raw]
Subject: Re: Documentation/unaligned-memory-access.txt: fix incorrect comparison operator

On Sun, Dec 18, 2016 at 12:52:12AM +0200, Ozgur Karatas wrote:
> 17.12.2016, 19:43, "Cihangir Akturk" <[email protected]>:
> > In the actual implementation ether_addr_equal function tests for equality to 0
> > when returning. It seems in commit 0d74c4 it is somehow overlooked to change
> > this operator to reflect the actual function.
>
> why this "return" function need to be ==0? I think, u16 functions read memory but "0" is should not be equalty.

XOR is true only when inputs differ. That means if inputs are the
same, then it outputs false (0) or whatever you call it. Then we
perform OR operation between those outputs. So if the result is 0 then
addr1 and addr2 is equal.

> This way, -for the code to work- memory should be everytime unaligned !=0.

Sorry I didn't quite get the point.

2016-12-20 09:51:59

by Ozgur Karatas

[permalink] [raw]
Subject: Re: Documentation/unaligned-memory-access.txt: fix incorrect comparison operator

20.12.2016, 02:22, "Cihangir Akturk" <[email protected]>:
> On Sun, Dec 18, 2016 at 12:52:12AM +0200, Ozgur Karatas wrote:
>>  17.12.2016, 19:43, "Cihangir Akturk" <[email protected]>:
>>  > In the actual implementation ether_addr_equal function tests for equality to 0
>>  > when returning. It seems in commit 0d74c4 it is somehow overlooked to change
>>  > this operator to reflect the actual function.
>>
>>  why this "return" function need to be ==0? I think, u16 functions read memory but "0" is should not be equalty.
>
> XOR is true only when inputs differ. That means if inputs are the
> same, then it outputs false (0) or whatever you call it. Then we
> perform OR operation between those outputs. So if the result is 0 then
> addr1 and addr2 is equal.

Thanks for this explanation to your patch. In this case the patch mentioned is valid.
I checked, turned to "!=0" errors.

un-mem.c:29:18: error: ‘!’ (first use in this function)
return ((a[0] ^ b[0]) | (a[1] ^ b[1]) | (a[2] ^ b[2])) != 0;
^
Also, don't need to send patch it secon time :)

>>  This way, -for the code to work- memory should be everytime unaligned !=0.
>
> Sorry I didn't quite get the point.

Regards,

~Ozgur

2016-12-27 20:09:36

by Jonathan Corbet

[permalink] [raw]
Subject: Re: Documentation/unaligned-memory-access.txt: fix incorrect comparison operator

On Sat, 17 Dec 2016 19:42:17 +0200
Cihangir Akturk <[email protected]> wrote:

> In the actual implementation ether_addr_equal function tests for equality to 0
> when returning. It seems in commit 0d74c4 it is somehow overlooked to change
> this operator to reflect the actual function.

I've applied this to the docs tree, thanks.

jon