[PATCH 1/1] selftest/net: fix FILE_SIZE for 32 bit architecture.

Subsystems: kernel selftest framework, networking [general], the rest

STALE2935d

5 messages, 3 authors, 2018-08-10 · open the first message on its own page

[PATCH 1/1] selftest/net: fix FILE_SIZE for 32 bit architecture.

From: Maninder Singh <hidden>
Date: 2018-08-02 10:42:29

FILE_SZ is defined as (1UL << 35), it will overflow
for 32 bit system and logic will break.

Signed-off-by: Maninder Singh <redacted>
Signed-off-by: Vaneet Narang <redacted>
---
 tools/testing/selftests/net/tcp_mmap.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/tools/testing/selftests/net/tcp_mmap.c b/tools/testing/selftests/net/tcp_mmap.c
index e8c5dff..1d6ca12 100644
--- a/tools/testing/selftests/net/tcp_mmap.c
+++ b/tools/testing/selftests/net/tcp_mmap.c
@@ -85,7 +85,7 @@
 #define MSG_ZEROCOPY    0x4000000
 #endif
 
-#define FILE_SZ (1UL << 35)
+#define FILE_SZ (1ULL << 35)
 static int cfg_family = AF_INET6;
 static socklen_t cfg_alen = sizeof(struct sockaddr_in6);
 static int cfg_port = 8787;
@@ -134,7 +134,7 @@ void hash_zone(void *zone, unsigned int length)
 
 void *child_thread(void *arg)
 {
-	unsigned long total_mmap = 0, total = 0;
+	unsigned long long total_mmap = 0, total = 0;
 	struct tcp_zerocopy_receive zc;
 	unsigned long delta_usec;
 	int flags = MAP_SHARED;
@@ -316,7 +316,7 @@ int main(int argc, char *argv[])
 {
 	struct sockaddr_storage listenaddr, addr;
 	unsigned int max_pacing_rate = 0;
-	unsigned long total = 0;
+	unsigned long long total = 0;
 	char *host = NULL;
 	int fd, c, on = 1;
 	char *buffer;
@@ -431,7 +431,7 @@ int main(int argc, char *argv[])
 		zflg = 0;
 	}
 	while (total < FILE_SZ) {
-		long wr = FILE_SZ - total;
+		unsigned long long wr = FILE_SZ - total;
 
 		if (wr > chunk_size)
 			wr = chunk_size;
-- 
1.9.1

Re: [PATCH 1/1] selftest/net: fix FILE_SIZE for 32 bit architecture.

From: Eric Dumazet <hidden>
Date: 2018-08-02 13:08:39


On 08/02/2018 03:31 AM, Maninder Singh wrote:
quoted hunk
FILE_SZ is defined as (1UL << 35), it will overflow
for 32 bit system and logic will break.

Signed-off-by: Maninder Singh <redacted>
Signed-off-by: Vaneet Narang <redacted>
---
 tools/testing/selftests/net/tcp_mmap.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/tools/testing/selftests/net/tcp_mmap.c b/tools/testing/selftests/net/tcp_mmap.c
index e8c5dff..1d6ca12 100644
--- a/tools/testing/selftests/net/tcp_mmap.c
+++ b/tools/testing/selftests/net/tcp_mmap.c
@@ -85,7 +85,7 @@
 #define MSG_ZEROCOPY    0x4000000
 #endif
 
-#define FILE_SZ (1UL << 35)
+#define FILE_SZ (1ULL << 35)
 static int cfg_family = AF_INET6;
 static socklen_t cfg_alen = sizeof(struct sockaddr_in6);
 static int cfg_port = 8787;
@@ -134,7 +134,7 @@ void hash_zone(void *zone, unsigned int length)
 
 void *child_thread(void *arg)
 {
-	unsigned long total_mmap = 0, total = 0;
+	unsigned long long total_mmap = 0, total = 0;
 	struct tcp_zerocopy_receive zc;
 	unsigned long delta_usec;
 	int flags = MAP_SHARED;
@@ -316,7 +316,7 @@ int main(int argc, char *argv[])
 {
 	struct sockaddr_storage listenaddr, addr;
 	unsigned int max_pacing_rate = 0;
-	unsigned long total = 0;
+	unsigned long long total = 0;
 	char *host = NULL;
 	int fd, c, on = 1;
 	char *buffer;
@@ -431,7 +431,7 @@ int main(int argc, char *argv[])
 		zflg = 0;
 	}
 	while (total < FILE_SZ) {
-		long wr = FILE_SZ - total;
+		unsigned long long wr = FILE_SZ - total;
 
 		if (wr > chunk_size)
 			wr = chunk_size;
What about using more conventional size_t instead of "unsigned long long" ?

RE: [PATCH 1/1] selftest/net: fix FILE_SIZE for 32 bit architecture.

From: Maninder Singh <hidden>
Date: 2018-08-03 03:39:42

Hi,
On 08/02/2018 03:31 AM, Maninder Singh wrote:
quoted
FILE_SZ is defined as (1UL << 35), it will overflow
for 32 bit system and logic will break.

Signed-off-by: Maninder Singh <redacted>
Signed-off-by: Vaneet Narang <redacted>
---
 tools/testing/selftests/net/tcp_mmap.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/tools/testing/selftests/net/tcp_mmap.c b/tools/testing/selftests/net/tcp_mmap.c
index e8c5dff..1d6ca12 100644
--- a/tools/testing/selftests/net/tcp_mmap.c
+++ b/tools/testing/selftests/net/tcp_mmap.c
@@ -85,7 +85,7 @@
 #define MSG_ZEROCOPY    0x4000000
 #endif
 
-#define FILE_SZ (1UL << 35)
+#define FILE_SZ (1ULL << 35)
...
...
quoted
@@ -431,7 +431,7 @@ int main(int argc, char *argv[])
                 zflg = 0;
         }
         while (total < FILE_SZ) {
-                long wr = FILE_SZ - total;
+                unsigned long long wr = FILE_SZ - total;
 
                 if (wr > chunk_size)
                         wr = chunk_size;
What about using more conventional size_t instead of "unsigned long long" ?
size_t is also equivalent to unsigned long and it will not hold value of (1 << 35) for 32 bit system.
So we can do two things.

(1) reduce FILE SIZE to (1 << 30), so that UL (size_t) can hold this value.
It will not show any perofrmance boost with ZEROCOPY. (checked on x86_64)

(2) use unsigned long long to work with both 32 and 64 bit system.
It will show performance boost with ZEROCOPY.(checked on x86_64)

What do you think?

Thanks and regards,
Maninder Singh

RE: [PATCH 1/1] selftest/net: fix FILE_SIZE for 32 bit architecture.

From: David Laight <hidden>
Date: 2018-08-03 11:10:36

From: Maninder Singh
Sent: 03 August 2018 04:32
quoted
On 08/02/2018 03:31 AM, Maninder Singh wrote:
quoted
FILE_SZ is defined as (1UL << 35), it will overflow
for 32 bit system and logic will break.

Signed-off-by: Maninder Singh <redacted>
Signed-off-by: Vaneet Narang <redacted>
---
 tools/testing/selftests/net/tcp_mmap.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/tools/testing/selftests/net/tcp_mmap.c b/tools/testing/selftests/net/tcp_mmap.c
index e8c5dff..1d6ca12 100644
--- a/tools/testing/selftests/net/tcp_mmap.c
+++ b/tools/testing/selftests/net/tcp_mmap.c
@@ -85,7 +85,7 @@
 #define MSG_ZEROCOPY    0x4000000
 #endif

-#define FILE_SZ (1UL << 35)
+#define FILE_SZ (1ULL << 35)
...
...
quoted
quoted
@@ -431,7 +431,7 @@ int main(int argc, char *argv[])
                 zflg = 0;
         }
         while (total < FILE_SZ) {
-                long wr = FILE_SZ - total;
+                unsigned long long wr = FILE_SZ - total;

                 if (wr > chunk_size)
                         wr = chunk_size;
What about using more conventional size_t instead of "unsigned long long" ?
size_t is also equivalent to unsigned long and it will not hold value of (1 << 35) for 32 bit system.
So we can do two things.
Wouldn't the 'correct' type be off_t ?
In any case, IIRC, you have to do really horrid things in Linux to
access files larger than 2G on 32bit systems.

	David

-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)

RE: [PATCH 1/1] selftest/net: fix FILE_SIZE for 32 bit architecture.

From: Maninder Singh <hidden>
Date: 2018-08-10 08:10:18

quoted
quoted
What about using more conventional size_t instead of "unsigned long long" ?
size_t is also equivalent to unsigned long and it will not hold value of (1 << 35) for 32 bit system.
So we can do two things.
Wouldn't the 'correct' type be off_t ?
In any case, IIRC, you have to do really horrid things in Linux to
access files larger than 2G on 32bit systems.

       David
Any inputs.

Thanks,
Maninder Singh
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help