2008-03-20 03:37:27

by Yanmin Zhang

[permalink] [raw]
Subject: Re: [patch 2/9] Store max number of objects in the page struct.

On Wed, 2008-03-19 at 10:49 -0700, Christoph Lameter wrote:
> On Wed, 19 Mar 2008, Zhang, Yanmin wrote:
>
> > > + if ((PAGE_SIZE << min_order) / size > 65535)
> > > + return get_order(size * 65535) - 1;
> > Is it better to define something like USHORT_MAX to replace 65535?
>
> Yes. Do we have something like that?

I couldn't find such definition in include/linux/kernel.h.


But glibc defines USHRT_MAX file include/limits.h:

/* Minimum and maximum values a `signed short int' can hold. */
# define SHRT_MIN (-32768)
# define SHRT_MAX 32767

/* Maximum value an `unsigned short int' can hold. (Minimum is 0.) */
# define USHRT_MAX 65535


How about below patch against 2.6.25-rc6?

---

Add definitions of USHRT_MAX and others into kernel. ipc uses it and
slub implementation might also use it.

The patch is against 2.6.25-rc6.

Signed-off-by: Zhang Yanmin <[email protected]>

---

--- linux-2.6.25-rc6/include/linux/kernel.h 2008-03-20 04:25:46.000000000 +0800
+++ linux-2.6.25-rc6_work/include/linux/kernel.h 2008-03-20 04:17:45.000000000 +0800
@@ -20,6 +20,9 @@
extern const char linux_banner[];
extern const char linux_proc_banner[];

+#define USHRT_MAX ((u16)(~0U))
+#define SHRT_MAX ((s16)(USHRT_MAX>>1))
+#define SHRT_MIN (-SHRT_MAX - 1)
#define INT_MAX ((int)(~0U>>1))
#define INT_MIN (-INT_MAX - 1)
#define UINT_MAX (~0U)
--- linux-2.6.25-rc6/ipc/util.h 2008-03-20 04:25:46.000000000 +0800
+++ linux-2.6.25-rc6_work/ipc/util.h 2008-03-20 04:22:07.000000000 +0800
@@ -12,7 +12,6 @@

#include <linux/err.h>

-#define USHRT_MAX 0xffff
#define SEQ_MULTIPLIER (IPCMNI)

void sem_init (void);






2008-03-20 21:06:47

by Christoph Lameter

[permalink] [raw]
Subject: Re: [patch 2/9] Store max number of objects in the page struct.

Reviewed-by: Christoph Lameter <[email protected]>

On Thu, 20 Mar 2008, Zhang, Yanmin wrote:

> On Wed, 2008-03-19 at 10:49 -0700, Christoph Lameter wrote:
> > On Wed, 19 Mar 2008, Zhang, Yanmin wrote:
> >
> > > > + if ((PAGE_SIZE << min_order) / size > 65535)
> > > > + return get_order(size * 65535) - 1;
> > > Is it better to define something like USHORT_MAX to replace 65535?
> >
> > Yes. Do we have something like that?
>
> I couldn't find such definition in include/linux/kernel.h.
>
>
> But glibc defines USHRT_MAX file include/limits.h:
>
> /* Minimum and maximum values a `signed short int' can hold. */
> # define SHRT_MIN (-32768)
> # define SHRT_MAX 32767
>
> /* Maximum value an `unsigned short int' can hold. (Minimum is 0.) */
> # define USHRT_MAX 65535
>
>
> How about below patch against 2.6.25-rc6?
>
> ---
>
> Add definitions of USHRT_MAX and others into kernel. ipc uses it and
> slub implementation might also use it.
>
> The patch is against 2.6.25-rc6.
>
> Signed-off-by: Zhang Yanmin <[email protected]>
>
> ---
>
> --- linux-2.6.25-rc6/include/linux/kernel.h 2008-03-20 04:25:46.000000000 +0800
> +++ linux-2.6.25-rc6_work/include/linux/kernel.h 2008-03-20 04:17:45.000000000 +0800
> @@ -20,6 +20,9 @@
> extern const char linux_banner[];
> extern const char linux_proc_banner[];
>
> +#define USHRT_MAX ((u16)(~0U))
> +#define SHRT_MAX ((s16)(USHRT_MAX>>1))
> +#define SHRT_MIN (-SHRT_MAX - 1)
> #define INT_MAX ((int)(~0U>>1))
> #define INT_MIN (-INT_MAX - 1)
> #define UINT_MAX (~0U)
> --- linux-2.6.25-rc6/ipc/util.h 2008-03-20 04:25:46.000000000 +0800
> +++ linux-2.6.25-rc6_work/ipc/util.h 2008-03-20 04:22:07.000000000 +0800
> @@ -12,7 +12,6 @@
>
> #include <linux/err.h>
>
> -#define USHRT_MAX 0xffff
> #define SEQ_MULTIPLIER (IPCMNI)
>
> void sem_init (void);
>
>
>
>
>
>
>

2008-03-21 22:24:46

by Andrew Morton

[permalink] [raw]
Subject: Re: [patch 2/9] Store max number of objects in the page struct.

On Thu, 20 Mar 2008 11:32:17 +0800
"Zhang, Yanmin" <[email protected]> wrote:

> Add definitions of USHRT_MAX and others into kernel. ipc uses it and
> slub implementation might also use it.
>
> The patch is against 2.6.25-rc6.
>
> Signed-off-by: Zhang Yanmin <[email protected]>
>
> ---
>
> --- linux-2.6.25-rc6/include/linux/kernel.h 2008-03-20 04:25:46.000000000 +0800
> +++ linux-2.6.25-rc6_work/include/linux/kernel.h 2008-03-20 04:17:45.000000000 +0800
> @@ -20,6 +20,9 @@
> extern const char linux_banner[];
> extern const char linux_proc_banner[];
>
> +#define USHRT_MAX ((u16)(~0U))
> +#define SHRT_MAX ((s16)(USHRT_MAX>>1))
> +#define SHRT_MIN (-SHRT_MAX - 1)

We have UINT_MAX and ULONG_MAX and ULLONG_MAX. If these were actually
UNT_MAX, ULNG_MAX and ULLNG_MAX then USHRT_MAX would make sense.

But they aren't, so it doesn't ;)

Please, let's call them USHORT_MAX, SHORT_MAX and SHORT_MIN.

> --- linux-2.6.25-rc6/ipc/util.h 2008-03-20 04:25:46.000000000 +0800
> +++ linux-2.6.25-rc6_work/ipc/util.h 2008-03-20 04:22:07.000000000 +0800
> @@ -12,7 +12,6 @@
>
> #include <linux/err.h>
>
> -#define USHRT_MAX 0xffff
> #define SEQ_MULTIPLIER (IPCMNI)
>
> void sem_init (void);

And then convert IPC to use them?

2008-03-24 01:25:57

by Yanmin Zhang

[permalink] [raw]
Subject: [PATCH] Add definitions of USHORT_MAX and others

Below is the new patch. Thanks for the comments.

---

Add definitions of USHORT_MAX and others into kernel. ipc uses it and
slub implementation might also use it.

The patch is against 2.6.25-rc6.

Signed-off-by: Zhang Yanmin <[email protected]>
Reviewed-by: Christoph Lameter <[email protected]>

---

diff -Nraup linux-2.6.25-rc6/include/linux/kernel.h linux-2.6.25-rc6_maxshort/include/linux/kernel.h
--- linux-2.6.25-rc6/include/linux/kernel.h 2008-03-24 02:05:25.000000000 +0800
+++ linux-2.6.25-rc6_maxshort/include/linux/kernel.h 2008-03-24 02:07:27.000000000 +0800
@@ -20,6 +20,9 @@
extern const char linux_banner[];
extern const char linux_proc_banner[];

+#define USHORT_MAX ((u16)(~0U))
+#define SHORT_MAX ((s16)(USHORT_MAX>>1))
+#define SHORT_MIN (-SHORT_MAX - 1)
#define INT_MAX ((int)(~0U>>1))
#define INT_MIN (-INT_MAX - 1)
#define UINT_MAX (~0U)
diff -Nraup linux-2.6.25-rc6/ipc/msg.c linux-2.6.25-rc6_maxshort/ipc/msg.c
--- linux-2.6.25-rc6/ipc/msg.c 2008-03-24 02:05:25.000000000 +0800
+++ linux-2.6.25-rc6_maxshort/ipc/msg.c 2008-03-24 02:07:27.000000000 +0800
@@ -324,19 +324,19 @@ copy_msqid_to_user(void __user *buf, str
out.msg_rtime = in->msg_rtime;
out.msg_ctime = in->msg_ctime;

- if (in->msg_cbytes > USHRT_MAX)
- out.msg_cbytes = USHRT_MAX;
+ if (in->msg_cbytes > USHORT_MAX)
+ out.msg_cbytes = USHORT_MAX;
else
out.msg_cbytes = in->msg_cbytes;
out.msg_lcbytes = in->msg_cbytes;

- if (in->msg_qnum > USHRT_MAX)
- out.msg_qnum = USHRT_MAX;
+ if (in->msg_qnum > USHORT_MAX)
+ out.msg_qnum = USHORT_MAX;
else
out.msg_qnum = in->msg_qnum;

- if (in->msg_qbytes > USHRT_MAX)
- out.msg_qbytes = USHRT_MAX;
+ if (in->msg_qbytes > USHORT_MAX)
+ out.msg_qbytes = USHORT_MAX;
else
out.msg_qbytes = in->msg_qbytes;
out.msg_lqbytes = in->msg_qbytes;
diff -Nraup linux-2.6.25-rc6/ipc/util.c linux-2.6.25-rc6_maxshort/ipc/util.c
--- linux-2.6.25-rc6/ipc/util.c 2008-03-24 02:05:25.000000000 +0800
+++ linux-2.6.25-rc6_maxshort/ipc/util.c 2008-03-24 02:07:27.000000000 +0800
@@ -84,8 +84,8 @@ void ipc_init_ids(struct ipc_ids *ids)
ids->seq = 0;
{
int seq_limit = INT_MAX/SEQ_MULTIPLIER;
- if(seq_limit > USHRT_MAX)
- ids->seq_max = USHRT_MAX;
+ if(seq_limit > USHORT_MAX)
+ ids->seq_max = USHORT_MAX;
else
ids->seq_max = seq_limit;
}
diff -Nraup linux-2.6.25-rc6/ipc/util.h linux-2.6.25-rc6_maxshort/ipc/util.h
--- linux-2.6.25-rc6/ipc/util.h 2008-03-24 02:05:25.000000000 +0800
+++ linux-2.6.25-rc6_maxshort/ipc/util.h 2008-03-24 02:07:27.000000000 +0800
@@ -12,7 +12,6 @@

#include <linux/err.h>

-#define USHRT_MAX 0xffff
#define SEQ_MULTIPLIER (IPCMNI)

void sem_init (void);