2006-02-01 09:06:56

by Akinobu Mita

[permalink] [raw]
Subject: [patch 41/44] make thread_info.flags an unsigned long

The *_bit() routines are defined to work on a pointer to unsigned long.
And the thread_info.flags is passed to *_bit() routines in
include/linux/thread_info.h. But

- alpha: flags is unsigned int
- ia64, sh, x86_64: flags is __u32

So flags should be changed to unsigned long instead.

The only affected 64-platforms are little endian, so it will work
without this change. But it's better to change it before people copy the
code to a big endian platform.

Signed-off-by: Akinobu Mita <[email protected]>
include/asm-alpha/thread_info.h | 2 +-
include/asm-ia64/thread_info.h | 2 +-
include/asm-sh/thread_info.h | 2 +-
include/asm-x86_64/thread_info.h | 2 +-
4 files changed, 4 insertions(+), 4 deletions(-)

Index: 2.6-git/include/asm-alpha/thread_info.h
===================================================================
--- 2.6-git.orig/include/asm-alpha/thread_info.h
+++ 2.6-git/include/asm-alpha/thread_info.h
@@ -14,7 +14,7 @@ struct thread_info {
struct pcb_struct pcb; /* palcode state */

struct task_struct *task; /* main task structure */
- unsigned int flags; /* low level flags */
+ unsigned long flags; /* low level flags */
unsigned int ieee_state; /* see fpu.h */

struct exec_domain *exec_domain; /* execution domain */
Index: 2.6-git/include/asm-ia64/thread_info.h
===================================================================
--- 2.6-git.orig/include/asm-ia64/thread_info.h
+++ 2.6-git/include/asm-ia64/thread_info.h
@@ -24,7 +24,7 @@
struct thread_info {
struct task_struct *task; /* XXX not really needed, except for dup_task_struct() */
struct exec_domain *exec_domain;/* execution domain */
- __u32 flags; /* thread_info flags (see TIF_*) */
+ unsigned long flags; /* thread_info flags (see TIF_*) */
__u32 cpu; /* current CPU */
mm_segment_t addr_limit; /* user-level address space limit */
int preempt_count; /* 0=premptable, <0=BUG; will also serve as bh-counter */
Index: 2.6-git/include/asm-sh/thread_info.h
===================================================================
--- 2.6-git.orig/include/asm-sh/thread_info.h
+++ 2.6-git/include/asm-sh/thread_info.h
@@ -18,7 +18,7 @@
struct thread_info {
struct task_struct *task; /* main task structure */
struct exec_domain *exec_domain; /* execution domain */
- __u32 flags; /* low level flags */
+ unsigned long flags; /* low level flags */
__u32 cpu;
int preempt_count; /* 0 => preemptable, <0 => BUG */
struct restart_block restart_block;
Index: 2.6-git/include/asm-x86_64/thread_info.h
===================================================================
--- 2.6-git.orig/include/asm-x86_64/thread_info.h
+++ 2.6-git/include/asm-x86_64/thread_info.h
@@ -26,7 +26,7 @@ struct exec_domain;
struct thread_info {
struct task_struct *task; /* main task structure */
struct exec_domain *exec_domain; /* execution domain */
- __u32 flags; /* low level flags */
+ unsigned long flags; /* low level flags */
__u32 status; /* thread synchronous flags */
__u32 cpu; /* current CPU */
int preempt_count; /* 0 => preemptable, <0 => BUG */

--


2006-02-01 18:18:55

by Luck, Tony

[permalink] [raw]
Subject: RE: [patch 41/44] make thread_info.flags an unsigned long


--- 2.6-git.orig/include/asm-ia64/thread_info.h
+++ 2.6-git/include/asm-ia64/thread_info.h
@@ -24,7 +24,7 @@
struct thread_info {
struct task_struct *task; /* XXX not really needed, except for dup_task_struct() */
struct exec_domain *exec_domain;/* execution domain */
- __u32 flags; /* thread_info flags (see TIF_*) */
+ unsigned long flags; /* thread_info flags (see TIF_*) */
__u32 cpu; /* current CPU */
mm_segment_t addr_limit; /* user-level address space limit */
int preempt_count; /* 0=premptable, <0=BUG; will also serve as bh-counter */

This leaves a useless hole in the structure. Tell me again why
this is a good thing?

-Tony

2006-02-02 01:37:16

by Akinobu Mita

[permalink] [raw]
Subject: Re: [patch 41/44] make thread_info.flags an unsigned long

On Wed, Feb 01, 2006 at 10:17:43AM -0800, Luck, Tony wrote:
>
> --- 2.6-git.orig/include/asm-ia64/thread_info.h
> +++ 2.6-git/include/asm-ia64/thread_info.h
> @@ -24,7 +24,7 @@
> struct thread_info {
> struct task_struct *task; /* XXX not really needed, except for dup_task_struct() */
> struct exec_domain *exec_domain;/* execution domain */
> - __u32 flags; /* thread_info flags (see TIF_*) */
> + unsigned long flags; /* thread_info flags (see TIF_*) */
> __u32 cpu; /* current CPU */
> mm_segment_t addr_limit; /* user-level address space limit */
> int preempt_count; /* 0=premptable, <0=BUG; will also serve as bh-counter */
>
> This leaves a useless hole in the structure. Tell me again why
> this is a good thing?

This patch stops warning message introduced by the "[patch 25/44]
ia64: use generic bitops" which replaces __set_bit() family to
generic one.

But I realize that I can't replace to generic one for ia64.
Because __set_bit() family are using the pointer to __u32, but
generic __set_bit() family are using the pointer to unsigned long.

So the patch 25/44 is wrong and the change above is unnessesary.
Thanks