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
Kirill Smelkov
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
Hide 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,10 +357,10 @@ 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
;
}
break
;
}
default:
ret
=
-
EINVAL
;
...
...
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,7 +1790,8 @@ 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
;
ide_cacheflush_p
(
drive
);
if
(
drive
->
usage
==
1
)
ide_cacheflush_p
(
drive
);
if
(
drive
->
removable
&&
drive
->
usage
==
1
)
{
ide_task_t
args
;
memset
(
&
args
,
0
,
sizeof
(
ide_task_t
));
...
...
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_BACK
,
psmouse
->
dev
.
keybit
);
set_bit
(
BTN_FORWARD
,
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
);
}
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