Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
1660b1af
Commit
1660b1af
authored
May 07, 2004
by
Anton Altaparmakov
Browse files
Options
Browse Files
Download
Plain Diff
Merge cantab.net:/home/src/bklinux-2.6
into cantab.net:/home/src/ntfs-2.6
parents
b7f91987
57bea21a
Changes
15
Show whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
113 additions
and
60 deletions
+113
-60
arch/i386/kernel/cpu/common.c
arch/i386/kernel/cpu/common.c
+2
-1
arch/i386/kernel/i387.c
arch/i386/kernel/i387.c
+20
-11
arch/i386/power/cpu.c
arch/i386/power/cpu.c
+1
-0
arch/x86_64/ia32/fpu32.c
arch/x86_64/ia32/fpu32.c
+1
-1
arch/x86_64/ia32/ptrace32.c
arch/x86_64/ia32/ptrace32.c
+3
-3
arch/x86_64/kernel/i387.c
arch/x86_64/kernel/i387.c
+15
-1
arch/x86_64/kernel/suspend.c
arch/x86_64/kernel/suspend.c
+1
-0
drivers/ide/ide-disk.c
drivers/ide/ide-disk.c
+13
-1
drivers/input/mouse/logips2pp.c
drivers/input/mouse/logips2pp.c
+42
-20
drivers/input/mouse/logips2pp.h
drivers/input/mouse/logips2pp.h
+6
-0
include/asm-i386/i387.h
include/asm-i386/i387.h
+3
-6
include/asm-i386/processor.h
include/asm-i386/processor.h
+1
-1
include/asm-ppc64/pgalloc.h
include/asm-ppc64/pgalloc.h
+2
-2
include/asm-x86_64/i387.h
include/asm-x86_64/i387.h
+2
-6
scripts/kconfig/gconf.c
scripts/kconfig/gconf.c
+1
-7
No files found.
arch/i386/kernel/cpu/common.c
View file @
1660b1af
...
...
@@ -4,6 +4,7 @@
#include <linux/smp.h>
#include <asm/semaphore.h>
#include <asm/processor.h>
#include <asm/i387.h>
#include <asm/msr.h>
#include <asm/io.h>
#include <asm/mmu_context.h>
...
...
@@ -536,5 +537,5 @@ void __init cpu_init (void)
*/
current_thread_info
()
->
status
=
0
;
current
->
used_math
=
0
;
stts
();
mxcsr_feature_mask_init
();
}
arch/i386/kernel/i387.c
View file @
1660b1af
...
...
@@ -24,6 +24,22 @@
#define HAVE_HWFP 1
#endif
unsigned
long
mxcsr_feature_mask
=
0xffffffff
;
void
mxcsr_feature_mask_init
(
void
)
{
unsigned
long
mask
=
0
;
clts
();
if
(
cpu_has_fxsr
)
{
memset
(
&
current
->
thread
.
i387
.
fxsave
,
0
,
sizeof
(
struct
i387_fxsave_struct
));
asm
volatile
(
"fxsave %0"
:
:
"m"
(
current
->
thread
.
i387
.
fxsave
));
mask
=
current
->
thread
.
i387
.
fxsave
.
mxcsr_mask
;
if
(
mask
==
0
)
mask
=
0x0000ffbf
;
}
mxcsr_feature_mask
&=
mask
;
stts
();
}
/*
* The _current_ task is using the FPU for the first time
* so initialize it and set the mxcsr to its default
...
...
@@ -204,13 +220,6 @@ void set_fpu_twd( struct task_struct *tsk, unsigned short twd )
}
}
void
set_fpu_mxcsr
(
struct
task_struct
*
tsk
,
unsigned
short
mxcsr
)
{
if
(
cpu_has_xmm
)
{
tsk
->
thread
.
i387
.
fxsave
.
mxcsr
=
(
mxcsr
&
0xffbf
);
}
}
/*
* FXSR floating point environment conversions.
*/
...
...
@@ -355,8 +364,8 @@ static int restore_i387_fxsave( struct _fpstate __user *buf )
clear_fpu
(
tsk
);
err
=
__copy_from_user
(
&
tsk
->
thread
.
i387
.
fxsave
,
&
buf
->
_fxsr_env
[
0
],
sizeof
(
struct
i387_fxsave_struct
)
);
/* mxcsr
bit 6 and 31-16 must be
zero for security reasons */
tsk
->
thread
.
i387
.
fxsave
.
mxcsr
&=
0xffbf
;
/* mxcsr
reserved bits must be masked to
zero for security reasons */
tsk
->
thread
.
i387
.
fxsave
.
mxcsr
&=
mxcsr_feature_mask
;
return
err
?
1
:
convert_fxsr_from_user
(
&
tsk
->
thread
.
i387
.
fxsave
,
buf
);
}
...
...
@@ -457,8 +466,8 @@ int set_fpxregs( struct task_struct *tsk, struct user_fxsr_struct __user *buf )
if
(
__copy_from_user
(
&
tsk
->
thread
.
i387
.
fxsave
,
buf
,
sizeof
(
struct
user_fxsr_struct
)
))
ret
=
-
EFAULT
;
/* mxcsr
bit 6 and 31-16 must be
zero for security reasons */
tsk
->
thread
.
i387
.
fxsave
.
mxcsr
&=
0xffbf
;
/* mxcsr
reserved bits must be masked to
zero for security reasons */
tsk
->
thread
.
i387
.
fxsave
.
mxcsr
&=
mxcsr_feature_mask
;
}
else
{
ret
=
-
EIO
;
}
...
...
arch/i386/power/cpu.c
View file @
1660b1af
...
...
@@ -72,6 +72,7 @@ do_fpu_end(void)
/* restore FPU regs if necessary */
/* Do it out of line so that gcc does not move cr0 load to some stupid place */
kernel_fpu_end
();
mxcsr_feature_mask_init
();
}
void
restore_processor_state
(
void
)
...
...
arch/x86_64/ia32/fpu32.c
View file @
1660b1af
...
...
@@ -155,7 +155,7 @@ int restore_i387_ia32(struct task_struct *tsk, struct _fpstate_ia32 *buf, int fs
&
buf
->
_fxsr_env
[
0
],
sizeof
(
struct
i387_fxsave_struct
)))
return
-
1
;
tsk
->
thread
.
i387
.
fxsave
.
mxcsr
&=
0xffbf
;
tsk
->
thread
.
i387
.
fxsave
.
mxcsr
&=
mxcsr_feature_mask
;
tsk
->
used_math
=
1
;
}
return
convert_fxsr_from_user
(
&
tsk
->
thread
.
i387
.
fxsave
,
buf
);
...
...
arch/x86_64/ia32/ptrace32.c
View file @
1660b1af
...
...
@@ -357,7 +357,7 @@ asmlinkage long sys32_ptrace(long request, u32 pid, u32 addr, u32 data)
/* no checking to be bug-to-bug compatible with i386 */
__copy_from_user
(
&
child
->
thread
.
i387
.
fxsave
,
u
,
sizeof
(
*
u
));
child
->
used_math
=
1
;
child
->
thread
.
i387
.
fxsave
.
mxcsr
&=
0xffbf
;
child
->
thread
.
i387
.
fxsave
.
mxcsr
&=
mxcsr_feature_mask
;
ret
=
0
;
break
;
}
...
...
arch/x86_64/kernel/i387.c
View file @
1660b1af
...
...
@@ -24,6 +24,20 @@
#include <asm/ptrace.h>
#include <asm/uaccess.h>
unsigned
int
mxcsr_feature_mask
=
0xffffffff
;
void
mxcsr_feature_mask_init
(
void
)
{
unsigned
int
mask
;
clts
();
memset
(
&
current
->
thread
.
i387
.
fxsave
,
0
,
sizeof
(
struct
i387_fxsave_struct
));
asm
volatile
(
"fxsave %0"
:
:
"m"
(
current
->
thread
.
i387
.
fxsave
));
mask
=
current
->
thread
.
i387
.
fxsave
.
mxcsr_mask
;
if
(
mask
==
0
)
mask
=
0x0000ffbf
;
mxcsr_feature_mask
&=
mask
;
stts
();
}
/*
* Called at bootup to set up the initial FPU state that is later cloned
* into all processes.
...
...
@@ -40,8 +54,8 @@ void __init fpu_init(void)
write_cr0
(
oldcr0
&
~
((
1UL
<<
3
)
|
(
1UL
<<
2
)));
/* clear TS and EM */
mxcsr_feature_mask_init
();
/* clean state in init */
stts
();
current_thread_info
()
->
status
=
0
;
current
->
used_math
=
0
;
}
...
...
arch/x86_64/kernel/suspend.c
View file @
1660b1af
...
...
@@ -77,6 +77,7 @@ do_fpu_end(void)
/* restore FPU regs if necessary */
/* Do it out of line so that gcc does not move cr0 load to some stupid place */
kernel_fpu_end
();
mxcsr_feature_mask_init
();
}
void
restore_processor_state
(
void
)
...
...
drivers/ide/ide-disk.c
View file @
1660b1af
...
...
@@ -1702,11 +1702,22 @@ static int idedisk_cleanup (ide_drive_t *drive)
static
int
idedisk_attach
(
ide_drive_t
*
drive
);
static
void
ide_device_shutdown
(
struct
device
*
dev
)
{
ide_drive_t
*
drive
=
container_of
(
dev
,
ide_drive_t
,
gendev
);
printk
(
"Shutdown: %s
\n
"
,
drive
->
name
);
dev
->
bus
->
suspend
(
dev
,
PM_SUSPEND_STANDBY
);
}
/*
* IDE subdriver functions, registered with ide.c
*/
static
ide_driver_t
idedisk_driver
=
{
.
owner
=
THIS_MODULE
,
.
gen_driver
=
{
.
shutdown
=
ide_device_shutdown
,
},
.
name
=
"ide-disk"
,
.
version
=
IDEDISK_VERSION
,
.
media
=
ide_disk
,
...
...
@@ -1779,6 +1790,7 @@ static int ide_cacheflush_p(ide_drive_t *drive)
static
int
idedisk_release
(
struct
inode
*
inode
,
struct
file
*
filp
)
{
ide_drive_t
*
drive
=
inode
->
i_bdev
->
bd_disk
->
private_data
;
if
(
drive
->
usage
==
1
)
ide_cacheflush_p
(
drive
);
if
(
drive
->
removable
&&
drive
->
usage
==
1
)
{
ide_task_t
args
;
...
...
drivers/input/mouse/logips2pp.c
View file @
1660b1af
...
...
@@ -146,11 +146,35 @@ void ps2pp_set_800dpi(struct psmouse *psmouse)
static
int
ps2pp_detect_model
(
struct
psmouse
*
psmouse
,
unsigned
char
*
param
)
{
int
i
;
static
int
logitech_4btn
[]
=
{
12
,
40
,
41
,
42
,
43
,
52
,
73
,
80
,
-
1
};
static
int
logitech_wheel
[]
=
{
52
,
53
,
75
,
76
,
80
,
81
,
83
,
88
,
112
,
-
1
};
static
int
logitech_ps2pp
[]
=
{
12
,
13
,
40
,
41
,
42
,
43
,
50
,
51
,
52
,
53
,
73
,
75
,
76
,
80
,
81
,
83
,
88
,
96
,
97
,
112
,
-
1
};
static
int
logitech_mx
[]
=
{
61
,
112
,
-
1
};
static
struct
_logips2_list
{
const
int
model
;
unsigned
const
int
features
;
}
logips2pp_list
[]
=
{
{
12
,
PS2PP_4BTN
},
{
13
,
0
},
{
40
,
PS2PP_4BTN
},
{
41
,
PS2PP_4BTN
},
{
42
,
PS2PP_4BTN
},
{
43
,
PS2PP_4BTN
},
{
50
,
0
},
{
51
,
0
},
{
52
,
PS2PP_4BTN
|
PS2PP_WHEEL
},
{
53
,
PS2PP_WHEEL
},
{
61
,
PS2PP_WHEEL
|
PS2PP_MX
},
/* MX700 */
{
73
,
PS2PP_4BTN
},
{
75
,
PS2PP_WHEEL
},
{
76
,
PS2PP_WHEEL
},
{
80
,
PS2PP_4BTN
|
PS2PP_WHEEL
},
{
81
,
PS2PP_WHEEL
},
{
83
,
PS2PP_WHEEL
},
{
88
,
PS2PP_WHEEL
},
{
96
,
0
},
{
97
,
0
},
{
100
,
PS2PP_WHEEL
|
PS2PP_MX
},
/* MX510 */
{
112
,
PS2PP_WHEEL
|
PS2PP_MX
},
/* MX500 */
{
114
,
PS2PP_WHEEL
|
PS2PP_MX
|
PS2PP_MX310
},
/* MX310 */
{
}
};
psmouse
->
vendor
=
"Logitech"
;
psmouse
->
model
=
((
param
[
0
]
>>
4
)
&
0x07
)
|
((
param
[
0
]
<<
3
)
&
0x78
);
...
...
@@ -162,35 +186,33 @@ static int ps2pp_detect_model(struct psmouse *psmouse, unsigned char *param)
psmouse
->
type
=
PSMOUSE_PS2
;
for
(
i
=
0
;
logi
tech_ps2pp
[
i
]
!=
-
1
;
i
++
)
if
(
logi
tech_ps2pp
[
i
]
==
psmouse
->
model
)
for
(
i
=
0
;
logi
ps2pp_list
[
i
].
model
;
i
++
){
if
(
logi
ps2pp_list
[
i
].
model
==
psmouse
->
model
){
psmouse
->
type
=
PSMOUSE_PS2PP
;
if
(
psmouse
->
type
==
PSMOUSE_PS2PP
)
{
for
(
i
=
0
;
logitech_4btn
[
i
]
!=
-
1
;
i
++
)
if
(
logitech_4btn
[
i
]
==
psmouse
->
model
)
if
(
logips2pp_list
[
i
].
features
&
PS2PP_4BTN
)
set_bit
(
BTN_SIDE
,
psmouse
->
dev
.
keybit
);
for
(
i
=
0
;
logitech_wheel
[
i
]
!=
-
1
;
i
++
)
if
(
logitech_wheel
[
i
]
==
psmouse
->
model
)
{
if
(
logips2pp_list
[
i
].
features
&
PS2PP_WHEEL
){
set_bit
(
REL_WHEEL
,
psmouse
->
dev
.
relbit
);
psmouse
->
name
=
"Wheel Mouse"
;
}
for
(
i
=
0
;
logitech_mx
[
i
]
!=
-
1
;
i
++
)
if
(
logitech_mx
[
i
]
==
psmouse
->
model
)
{
if
(
logips2pp_list
[
i
].
features
&
PS2PP_MX
)
{
set_bit
(
BTN_SIDE
,
psmouse
->
dev
.
keybit
);
set_bit
(
BTN_EXTRA
,
psmouse
->
dev
.
keybit
);
set_bit
(
BTN_TASK
,
psmouse
->
dev
.
keybit
);
if
(
!
(
logips2pp_list
[
i
].
features
&
PS2PP_MX310
)){
set_bit
(
BTN_BACK
,
psmouse
->
dev
.
keybit
);
set_bit
(
BTN_FORWARD
,
psmouse
->
dev
.
keybit
);
set_bit
(
BTN_TASK
,
psmouse
->
dev
.
keybit
);
}
psmouse
->
name
=
"MX Mouse"
;
}
break
;
}
}
/*
* Do Logitech PS2++ / PS2T++ magic init.
*/
if
(
psmouse
->
type
==
PSMOUSE_PS2PP
)
{
if
(
psmouse
->
model
==
97
)
{
/* TouchPad 3 */
...
...
drivers/input/mouse/logips2pp.h
View file @
1660b1af
...
...
@@ -10,6 +10,12 @@
#ifndef _LOGIPS2PP_H
#define _LOGIPS2PP_H
#define PS2PP_4BTN 0x01
#define PS2PP_WHEEL 0x02
#define PS2PP_MX 0x04
#define PS2PP_MX310 0x08
struct
psmouse
;
void
ps2pp_process_packet
(
struct
psmouse
*
psmouse
);
void
ps2pp_set_800dpi
(
struct
psmouse
*
psmouse
);
...
...
include/asm-i386/i387.h
View file @
1660b1af
...
...
@@ -12,10 +12,13 @@
#define __ASM_I386_I387_H
#include <linux/sched.h>
#include <linux/init.h>
#include <asm/processor.h>
#include <asm/sigcontext.h>
#include <asm/user.h>
extern
unsigned
long
mxcsr_feature_mask
;
extern
void
mxcsr_feature_mask_init
(
void
);
extern
void
init_fpu
(
struct
task_struct
*
);
/*
* FPU lazy state save handling...
...
...
@@ -89,12 +92,6 @@ extern unsigned short get_fpu_mxcsr( struct task_struct *tsk );
extern
void
set_fpu_cwd
(
struct
task_struct
*
tsk
,
unsigned
short
cwd
);
extern
void
set_fpu_swd
(
struct
task_struct
*
tsk
,
unsigned
short
swd
);
extern
void
set_fpu_twd
(
struct
task_struct
*
tsk
,
unsigned
short
twd
);
extern
void
set_fpu_mxcsr
(
struct
task_struct
*
tsk
,
unsigned
short
mxcsr
);
#define load_mxcsr( val ) do { \
unsigned long __mxcsr = ((unsigned long)(val) & 0xffbf); \
asm volatile( "ldmxcsr %0" : : "m" (__mxcsr) ); \
} while (0)
/*
* Signal frame handlers...
...
...
include/asm-i386/processor.h
View file @
1660b1af
...
...
@@ -332,7 +332,7 @@ struct i387_fxsave_struct {
long
foo
;
long
fos
;
long
mxcsr
;
long
reserved
;
long
mxcsr_mask
;
long
st_space
[
32
];
/* 8*16 bytes for each FP-reg = 128 bytes */
long
xmm_space
[
32
];
/* 8*16 bytes for each XMM-reg = 128 bytes */
long
padding
[
56
];
...
...
include/asm-ppc64/pgalloc.h
View file @
1660b1af
...
...
@@ -78,8 +78,8 @@ struct pte_freelist_batch
struct
page
*
pages
[
0
];
};
#define PTE_FREELIST_SIZE ((PAGE_SIZE - sizeof(struct pte_freelist_batch) / \
sizeof(struct page *))
)
#define PTE_FREELIST_SIZE ((PAGE_SIZE - sizeof(struct pte_freelist_batch)
)
/ \
sizeof(struct page *))
extern
void
pte_free_now
(
struct
page
*
ptepage
);
extern
void
pte_free_submit
(
struct
pte_freelist_batch
*
batch
);
...
...
include/asm-x86_64/i387.h
View file @
1660b1af
...
...
@@ -20,6 +20,8 @@
#include <asm/uaccess.h>
extern
void
fpu_init
(
void
);
extern
unsigned
int
mxcsr_feature_mask
;
extern
void
mxcsr_feature_mask_init
(
void
);
extern
void
init_fpu
(
struct
task_struct
*
child
);
extern
int
save_i387
(
struct
_fpstate
*
buf
);
...
...
@@ -52,11 +54,6 @@ static inline int need_signal_i387(struct task_struct *me)
} \
} while (0)
#define load_mxcsr(val) do { \
unsigned long __mxcsr = ((unsigned long)(val) & 0xffbf); \
asm volatile("ldmxcsr %0" : : "m" (__mxcsr)); \
} while (0)
/*
* ptrace request handers...
*/
...
...
@@ -75,7 +72,6 @@ extern int set_fpregs(struct task_struct *tsk,
#define set_fpu_cwd(t,val) ((t)->thread.i387.fxsave.cwd = (val))
#define set_fpu_swd(t,val) ((t)->thread.i387.fxsave.swd = (val))
#define set_fpu_fxsr_twd(t,val) ((t)->thread.i387.fxsave.twd = (val))
#define set_fpu_mxcsr(t,val) ((t)->thread.i387.fxsave.mxcsr = (val)&0xffbf)
static
inline
int
restore_fpu_checking
(
struct
i387_fxsave_struct
*
fx
)
{
...
...
scripts/kconfig/gconf.c
View file @
1660b1af
...
...
@@ -956,16 +956,10 @@ static void change_sym_value(struct menu *menu, gint col)
static
void
toggle_sym_value
(
struct
menu
*
menu
)
{
const
tristate
next_val
[
3
]
=
{
no
,
mod
,
yes
};
tristate
newval
;
if
(
!
menu
->
sym
)
return
;
newval
=
next_val
[(
sym_get_tristate_value
(
menu
->
sym
)
+
1
)
%
3
];
if
(
!
sym_tristate_within_range
(
menu
->
sym
,
newval
))
newval
=
yes
;
sym_set_tristate_value
(
menu
->
sym
,
newval
);
sym_toggle_tristate_value
(
menu
->
sym
);
if
(
view_mode
==
FULL_VIEW
)
update_tree
(
&
rootmenu
,
NULL
);
else
if
(
view_mode
==
SPLIT_VIEW
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment