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
9add6ead
Commit
9add6ead
authored
Apr 15, 2004
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://bk.linux1394.org/ieee1394-2.6
into ppc970.osdl.org:/home/torvalds/v2.6/linux
parents
b0e15db0
3caef8d2
Changes
19
Show whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
268 additions
and
61 deletions
+268
-61
arch/i386/kernel/nmi.c
arch/i386/kernel/nmi.c
+7
-0
arch/ppc64/kernel/entry.S
arch/ppc64/kernel/entry.S
+15
-2
arch/ppc64/kernel/head.S
arch/ppc64/kernel/head.S
+5
-0
arch/ppc64/kernel/prom.c
arch/ppc64/kernel/prom.c
+5
-0
arch/ppc64/kernel/rtas.c
arch/ppc64/kernel/rtas.c
+51
-28
drivers/base/Kconfig
drivers/base/Kconfig
+8
-8
drivers/base/class.c
drivers/base/class.c
+2
-4
drivers/char/dsp56k.c
drivers/char/dsp56k.c
+25
-2
drivers/char/ftape/zftape/zftape-init.c
drivers/char/ftape/zftape/zftape-init.c
+17
-0
drivers/char/istallion.c
drivers/char/istallion.c
+10
-1
drivers/char/stallion.c
drivers/char/stallion.c
+9
-1
drivers/char/tipar.c
drivers/char/tipar.c
+11
-5
drivers/char/tpqic02.c
drivers/char/tpqic02.c
+22
-0
drivers/char/vc_screen.c
drivers/char/vc_screen.c
+10
-0
drivers/char/vt.c
drivers/char/vt.c
+2
-1
drivers/isdn/capi/capi.c
drivers/isdn/capi/capi.c
+16
-1
drivers/video/fbmem.c
drivers/video/fbmem.c
+19
-0
fs/coda/psdev.c
fs/coda/psdev.c
+31
-5
lib/kobject.c
lib/kobject.c
+3
-3
No files found.
arch/i386/kernel/nmi.c
View file @
9add6ead
...
...
@@ -458,6 +458,13 @@ void nmi_watchdog_tick (struct pt_regs * regs)
wrmsr
(
MSR_P4_IQ_CCCR0
,
P4_NMI_IQ_CCCR0
,
0
);
apic_write
(
APIC_LVTPC
,
APIC_DM_NMI
);
}
else
if
(
nmi_perfctr_msr
==
MSR_P6_PERFCTR0
)
{
/* Only P6 based Pentium M need to re-unmask
* the apic vector but it doesn't hurt
* other P6 variant */
apic_write
(
APIC_LVTPC
,
apic_read
(
APIC_LVTPC
)
&
~
APIC_LVT_MASKED
);
}
wrmsr
(
nmi_perfctr_msr
,
-
(
cpu_khz
/
nmi_hz
*
1000
),
-
1
);
}
}
...
...
arch/ppc64/kernel/entry.S
View file @
9add6ead
...
...
@@ -512,12 +512,25 @@ _GLOBAL(enter_rtas)
mfsrr1
r10
std
r10
,
_SRR1
(
r1
)
/
*
There
is
no
way
it
is
acceptable
to
get
here
with
interrupts
enabled
,
*
check
it
with
the
asm
equivalent
of
WARN_ON
*/
mfmsr
r6
andi
.
r0
,
r6
,
MSR_EE
1
:
tdnei
r0
,
0
.
section
__bug_table
,"
a
"
.
llong
1
b
,
__LINE__
+
0x1000000
,
1
f
,
2
f
.
previous
.
section
.
rodata
,"
a
"
1
:
.
asciz
__FILE__
2
:
.
asciz
"enter_rtas"
.
previous
/
*
Unfortunately
,
the
stack
pointer
and
the
MSR
are
also
clobbered
,
*
so
they
are
saved
in
the
PACA
which
allows
us
to
restore
*
our
original
state
after
RTAS
returns
.
*/
std
r1
,
PACAR1
(
r13
)
mfmsr
r6
std
r6
,
PACASAVEDMSR
(
r13
)
/
*
Setup
our
real
return
addr
*/
...
...
arch/ppc64/kernel/head.S
View file @
9add6ead
...
...
@@ -93,8 +93,13 @@
_stext
:
#ifdef CONFIG_PPC_PSERIES
_STATIC
(
__start
)
/
*
NOP
this
out
unconditionally
*/
BEGIN_FTR_SECTION
b
.
__start_initialization_pSeries
END_FTR_SECTION
(
0
,
1)
#endif
/
*
Catch
branch
to
0
in
real
mode
*/
trap
#ifdef CONFIG_PPC_ISERIES
/
*
*
At
offset
0x20
,
there
is
a
pointer
to
iSeries
LPAR
data
.
...
...
arch/ppc64/kernel/prom.c
View file @
9add6ead
...
...
@@ -1926,6 +1926,11 @@ finish_node(struct device_node *np, unsigned long mem_start,
np
->
name
=
get_property
(
np
,
"name"
,
0
);
np
->
type
=
get_property
(
np
,
"device_type"
,
0
);
if
(
!
np
->
name
)
np
->
name
=
"<NULL>"
;
if
(
!
np
->
type
)
np
->
type
=
"<NULL>"
;
/* get the device addresses and interrupts */
if
(
ifunc
!=
NULL
)
mem_start
=
ifunc
(
np
,
mem_start
,
naddrc
,
nsizec
);
...
...
arch/ppc64/kernel/rtas.c
View file @
9add6ead
...
...
@@ -68,15 +68,20 @@ char rtas_data_buf[RTAS_DATA_BUF_SIZE]__page_aligned;
void
call_rtas_display_status
(
char
c
)
{
struct
rtas_args
*
rtas
=
&
(
get_paca
()
->
xRtas
);
struct
rtas_args
*
args
=
&
(
get_paca
()
->
xRtas
);
unsigned
long
s
;
spin_lock_irqsave
(
&
rtas
.
lock
,
s
);
rta
s
->
token
=
10
;
rta
s
->
nargs
=
1
;
rta
s
->
nret
=
1
;
rtas
->
rets
=
(
rtas_arg_t
*
)
&
(
rta
s
->
args
[
1
]);
rta
s
->
args
[
0
]
=
(
int
)
c
;
arg
s
->
token
=
10
;
arg
s
->
nargs
=
1
;
arg
s
->
nret
=
1
;
args
->
rets
=
(
rtas_arg_t
*
)
&
(
arg
s
->
args
[
1
]);
arg
s
->
args
[
0
]
=
(
int
)
c
;
enter_rtas
((
void
*
)
__pa
((
unsigned
long
)
rtas
));
enter_rtas
((
void
*
)
__pa
((
unsigned
long
)
args
));
spin_unlock_irqrestore
(
&
rtas
.
lock
,
s
);
}
int
...
...
@@ -91,8 +96,9 @@ rtas_token(const char *service)
return
tokp
?
*
tokp
:
RTAS_UNKNOWN_SERVICE
;
}
void
log_rtas_error
(
struct
rtas_args
*
rtas_args
)
static
int
__log_rtas_error
(
struct
rtas_args
*
rtas_args
)
{
struct
rtas_args
err_args
,
temp_args
;
...
...
@@ -113,11 +119,22 @@ log_rtas_error(struct rtas_args *rtas_args)
enter_rtas
((
void
*
)
__pa
((
unsigned
long
)
&
get_paca
()
->
xRtas
));
PPCDBG
(
PPCDBG_RTAS
,
"
\t
returned from rtas ...
\n
"
);
err_args
=
get_paca
()
->
xRtas
;
get_paca
()
->
xRtas
=
temp_args
;
if
(
err_args
.
rets
[
0
]
==
0
)
return
err_args
.
rets
[
0
];
}
void
log_rtas_error
(
struct
rtas_args
*
rtas_args
)
{
unsigned
long
s
;
int
rc
;
spin_lock_irqsave
(
&
rtas
.
lock
,
s
);
rc
=
__log_rtas_error
(
rtas_args
);
spin_unlock_irqrestore
(
&
rtas
.
lock
,
s
);
if
(
rc
==
0
)
log_error
(
rtas_err_buf
,
ERR_TYPE_RTAS_LOG
,
0
);
}
...
...
@@ -126,9 +143,10 @@ rtas_call(int token, int nargs, int nret,
unsigned
long
*
outputs
,
...)
{
va_list
list
;
int
i
;
int
i
,
logit
=
0
;
unsigned
long
s
;
struct
rtas_args
*
rtas_args
=
&
(
get_paca
()
->
xRtas
);
long
ret
;
PPCDBG
(
PPCDBG_RTAS
,
"Entering rtas_call
\n
"
);
PPCDBG
(
PPCDBG_RTAS
,
"
\t
token = 0x%x
\n
"
,
token
);
...
...
@@ -138,6 +156,9 @@ rtas_call(int token, int nargs, int nret,
if
(
token
==
RTAS_UNKNOWN_SERVICE
)
return
-
1
;
/* Gotta do something different here, use global lock for now... */
spin_lock_irqsave
(
&
rtas
.
lock
,
s
);
rtas_args
->
token
=
token
;
rtas_args
->
nargs
=
nargs
;
rtas_args
->
nret
=
nret
;
...
...
@@ -152,24 +173,14 @@ rtas_call(int token, int nargs, int nret,
for
(
i
=
0
;
i
<
nret
;
++
i
)
rtas_args
->
rets
[
i
]
=
0
;
#if 0 /* Gotta do something different here, use global lock for now... */
spin_lock_irqsave(&rtas_args->lock, s);
#else
spin_lock_irqsave
(
&
rtas
.
lock
,
s
);
#endif
PPCDBG
(
PPCDBG_RTAS
,
"
\t
entering rtas with 0x%lx
\n
"
,
(
void
*
)
__pa
((
unsigned
long
)
rtas_args
));
enter_rtas
((
void
*
)
__pa
((
unsigned
long
)
rtas_args
));
PPCDBG
(
PPCDBG_RTAS
,
"
\t
returned from rtas ...
\n
"
);
if
(
rtas_args
->
rets
[
0
]
==
-
1
)
log
_rtas_error
(
rtas_args
);
log
it
=
(
__log_rtas_error
(
rtas_args
)
==
0
);
#if 0 /* Gotta do something different here, use global lock for now... */
spin_unlock_irqrestore(&rtas_args->lock, s);
#else
spin_unlock_irqrestore
(
&
rtas
.
lock
,
s
);
#endif
ifppcdebug
(
PPCDBG_RTAS
)
{
for
(
i
=
0
;
i
<
nret
;
i
++
)
udbg_printf
(
"
\t
nret[%d] = 0x%lx
\n
"
,
i
,
(
ulong
)
rtas_args
->
rets
[
i
]);
...
...
@@ -178,7 +189,15 @@ rtas_call(int token, int nargs, int nret,
if
(
nret
>
1
&&
outputs
!=
NULL
)
for
(
i
=
0
;
i
<
nret
-
1
;
++
i
)
outputs
[
i
]
=
rtas_args
->
rets
[
i
+
1
];
return
(
ulong
)((
nret
>
0
)
?
rtas_args
->
rets
[
0
]
:
0
);
ret
=
(
ulong
)((
nret
>
0
)
?
rtas_args
->
rets
[
0
]
:
0
);
/* Gotta do something different here, use global lock for now... */
spin_unlock_irqrestore
(
&
rtas
.
lock
,
s
);
if
(
logit
)
log_error
(
rtas_err_buf
,
ERR_TYPE_RTAS_LOG
,
0
);
return
ret
;
}
/* Given an RTAS status code of 990n compute the hinted delay of 10^n
...
...
@@ -464,12 +483,12 @@ asmlinkage int ppc_rtas(struct rtas_args __user *uargs)
enter_rtas
((
void
*
)
__pa
((
unsigned
long
)
&
get_paca
()
->
xRtas
));
args
=
get_paca
()
->
xRtas
;
spin_unlock_irqrestore
(
&
rtas
.
lock
,
flags
);
args
.
rets
=
(
rtas_arg_t
*
)
&
(
args
.
args
[
nargs
]);
if
(
args
.
rets
[
0
]
==
-
1
)
log_rtas_error
(
&
args
);
spin_unlock_irqrestore
(
&
rtas
.
lock
,
flags
);
/* Copy out args. */
if
(
copy_to_user
(
uargs
->
args
+
nargs
,
args
.
args
+
nargs
,
...
...
@@ -485,7 +504,9 @@ asmlinkage int ppc_rtas(struct rtas_args __user *uargs)
void
rtas_stop_self
(
void
)
{
struct
rtas_args
*
rtas_args
=
&
(
get_paca
()
->
xRtas
);
unsigned
long
s
;
spin_lock_irqsave
(
&
rtas
.
lock
,
s
);
rtas_args
->
token
=
rtas_token
(
"stop-self"
);
BUG_ON
(
rtas_args
->
token
==
RTAS_UNKNOWN_SERVICE
);
rtas_args
->
nargs
=
0
;
...
...
@@ -495,6 +516,8 @@ void rtas_stop_self(void)
printk
(
"%u %u Ready to die...
\n
"
,
smp_processor_id
(),
hard_smp_processor_id
());
enter_rtas
((
void
*
)
__pa
(
rtas_args
));
spin_unlock_irqrestore
(
&
rtas
.
lock
,
s
);
panic
(
"Alas, I survived.
\n
"
);
}
#endif
/* CONFIG_HOTPLUG_CPU */
...
...
drivers/base/Kconfig
View file @
9add6ead
drivers/base/class.c
View file @
9add6ead
...
...
@@ -155,7 +155,6 @@ static int class_device_dev_link(struct class_device * class_dev)
static
void
class_device_dev_unlink
(
struct
class_device
*
class_dev
)
{
if
(
class_dev
->
dev
)
sysfs_remove_link
(
&
class_dev
->
kobj
,
"device"
);
}
...
...
@@ -169,7 +168,6 @@ static int class_device_driver_link(struct class_device * class_dev)
static
void
class_device_driver_unlink
(
struct
class_device
*
class_dev
)
{
if
((
class_dev
->
dev
)
&&
(
class_dev
->
dev
->
driver
))
sysfs_remove_link
(
&
class_dev
->
kobj
,
"driver"
);
}
...
...
drivers/char/dsp56k.c
View file @
9add6ead
...
...
@@ -35,6 +35,7 @@
#include <linux/init.h>
#include <linux/devfs_fs_kernel.h>
#include <linux/smp_lock.h>
#include <linux/device.h>
#include <asm/atarihw.h>
#include <asm/traps.h>
...
...
@@ -149,6 +150,8 @@ static struct dsp56k_device {
int
tx_wsize
,
rx_wsize
;
}
dsp56k
;
static
struct
class_simple
*
dsp56k_class
;
static
int
dsp56k_reset
(
void
)
{
u_char
status
;
...
...
@@ -502,6 +505,8 @@ static char banner[] __initdata = KERN_INFO "DSP56k driver installed\n";
static
int
__init
dsp56k_init_driver
(
void
)
{
int
err
=
0
;
if
(
!
MACH_IS_ATARI
||
!
ATARIHW_PRESENT
(
DSP56K
))
{
printk
(
"DSP56k driver: Hardware not present
\n
"
);
return
-
ENODEV
;
...
...
@@ -511,17 +516,35 @@ static int __init dsp56k_init_driver(void)
printk
(
"DSP56k driver: Unable to register driver
\n
"
);
return
-
ENODEV
;
}
dsp56k_class
=
class_simple_create
(
THIS_MODULE
,
"dsp56k"
);
if
(
IS_ERR
(
dsp56k_class
))
{
err
=
PTR_ERR
(
dsp56k_class
);
goto
out_chrdev
;
}
class_simple_device_add
(
dsp56k_class
,
MKDEV
(
DSP56K_MAJOR
,
0
),
NULL
,
"dsp56k"
);
devfs_mk_cdev
(
MKDEV
(
DSP56K_MAJOR
,
0
),
err
=
devfs_mk_cdev
(
MKDEV
(
DSP56K_MAJOR
,
0
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
,
"dsp56k"
);
if
(
err
)
goto
out_class
;
printk
(
banner
);
return
0
;
goto
out
;
out_class:
class_simple_device_remove
(
MKDEV
(
DSP56K_MAJOR
,
0
));
class_simple_destroy
(
dsp56k_class
);
out_chrdev:
unregister_chrdev
(
DSP56K_MAJOR
,
"dsp56k"
);
out:
return
err
;
}
module_init
(
dsp56k_init_driver
);
static
void
__exit
dsp56k_cleanup_driver
(
void
)
{
class_simple_device_remove
(
MKDEV
(
DSP56K_MAJOR
,
0
));
class_simple_destroy
(
dsp56k_class
);
unregister_chrdev
(
DSP56K_MAJOR
,
"dsp56k"
);
devfs_remove
(
"dsp56k"
);
}
...
...
drivers/char/ftape/zftape/zftape-init.c
View file @
9add6ead
...
...
@@ -38,6 +38,7 @@
#include <linux/zftape.h>
#include <linux/init.h>
#include <linux/device.h>
#include "../zftape/zftape-init.h"
#include "../zftape/zftape-read.h"
...
...
@@ -103,6 +104,8 @@ static struct file_operations zft_cdev =
.
release
=
zft_close
,
};
static
struct
class_simple
*
zft_class
;
/* Open floppy tape device
*/
static
int
zft_open
(
struct
inode
*
ino
,
struct
file
*
filep
)
...
...
@@ -341,22 +344,29 @@ KERN_INFO
"installing zftape VFS interface for ftape driver ..."
);
TRACE_CATCH
(
register_chrdev
(
QIC117_TAPE_MAJOR
,
"zft"
,
&
zft_cdev
),);
zft_class
=
class_simple_create
(
THIS_MODULE
,
"zft"
);
for
(
i
=
0
;
i
<
4
;
i
++
)
{
class_simple_device_add
(
zft_class
,
MKDEV
(
QIC117_TAPE_MAJOR
,
i
),
NULL
,
"qft%i"
,
i
);
devfs_mk_cdev
(
MKDEV
(
QIC117_TAPE_MAJOR
,
i
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
,
"qft%i"
,
i
);
class_simple_device_add
(
zft_class
,
MKDEV
(
QIC117_TAPE_MAJOR
,
i
+
4
),
NULL
,
"nqft%i"
,
i
);
devfs_mk_cdev
(
MKDEV
(
QIC117_TAPE_MAJOR
,
i
+
4
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
,
"nqft%i"
,
i
);
class_simple_device_add
(
zft_class
,
MKDEV
(
QIC117_TAPE_MAJOR
,
i
+
16
),
NULL
,
"zqft%i"
,
i
);
devfs_mk_cdev
(
MKDEV
(
QIC117_TAPE_MAJOR
,
i
+
16
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
,
"zqft%i"
,
i
);
class_simple_device_add
(
zft_class
,
MKDEV
(
QIC117_TAPE_MAJOR
,
i
+
20
),
NULL
,
"nzqft%i"
,
i
);
devfs_mk_cdev
(
MKDEV
(
QIC117_TAPE_MAJOR
,
i
+
20
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
,
"nzqft%i"
,
i
);
class_simple_device_add
(
zft_class
,
MKDEV
(
QIC117_TAPE_MAJOR
,
i
+
32
),
NULL
,
"rawqft%i"
,
i
);
devfs_mk_cdev
(
MKDEV
(
QIC117_TAPE_MAJOR
,
i
+
32
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
,
"rawqft%i"
,
i
);
class_simple_device_add
(
zft_class
,
MKDEV
(
QIC117_TAPE_MAJOR
,
i
+
36
),
NULL
,
"nrawrawqft%i"
,
i
);
devfs_mk_cdev
(
MKDEV
(
QIC117_TAPE_MAJOR
,
i
+
36
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
,
"nrawqft%i"
,
i
);
...
...
@@ -386,12 +396,19 @@ static void zft_exit(void)
}
for
(
i
=
0
;
i
<
4
;
i
++
)
{
devfs_remove
(
"qft%i"
,
i
);
class_simple_device_remove
(
MKDEV
(
QIC117_TAPE_MAJOR
,
i
));
devfs_remove
(
"nqft%i"
,
i
);
class_simple_device_remove
(
MKDEV
(
QIC117_TAPE_MAJOR
,
i
+
4
));
devfs_remove
(
"zqft%i"
,
i
);
class_simple_device_remove
(
MKDEV
(
QIC117_TAPE_MAJOR
,
i
+
16
));
devfs_remove
(
"nzqft%i"
,
i
);
class_simple_device_remove
(
MKDEV
(
QIC117_TAPE_MAJOR
,
i
+
20
));
devfs_remove
(
"rawqft%i"
,
i
);
class_simple_device_remove
(
MKDEV
(
QIC117_TAPE_MAJOR
,
i
+
32
));
devfs_remove
(
"nrawqft%i"
,
i
);
class_simple_device_remove
(
MKDEV
(
QIC117_TAPE_MAJOR
,
i
+
36
));
}
class_simple_destroy
(
zft_class
);
zft_uninit_mem
();
/* release remaining memory, if any */
printk
(
KERN_INFO
"zftape successfully unloaded.
\n
"
);
TRACE_EXIT
;
...
...
drivers/char/istallion.c
View file @
9add6ead
...
...
@@ -40,6 +40,7 @@
#include <linux/delay.h>
#include <linux/init.h>
#include <linux/devfs_fs_kernel.h>
#include <linux/device.h>
#include <asm/io.h>
#include <asm/uaccess.h>
...
...
@@ -795,6 +796,8 @@ static int stli_timeron;
/*****************************************************************************/
static
struct
class_simple
*
istallion_class
;
#ifdef MODULE
/*
...
...
@@ -853,9 +856,12 @@ static void __exit istallion_module_exit(void)
return
;
}
put_tty_driver
(
stli_serial
);
for
(
i
=
0
;
i
<
4
;
i
++
)
for
(
i
=
0
;
i
<
4
;
i
++
)
{
devfs_remove
(
"staliomem/%d"
,
i
);
class_simple_device_remove
(
MKDEV
(
STL_SIOMEMMAJOR
,
i
));
}
devfs_remove
(
"staliomem"
);
class_simple_destroy
(
istallion_class
);
if
((
i
=
unregister_chrdev
(
STL_SIOMEMMAJOR
,
"staliomem"
)))
printk
(
"STALLION: failed to un-register serial memory device, "
"errno=%d
\n
"
,
-
i
);
...
...
@@ -5310,10 +5316,13 @@ int __init stli_init(void)
"device
\n
"
);
devfs_mk_dir
(
"staliomem"
);
istallion_class
=
class_simple_create
(
THIS_MODULE
,
"staliomem"
);
for
(
i
=
0
;
i
<
4
;
i
++
)
{
devfs_mk_cdev
(
MKDEV
(
STL_SIOMEMMAJOR
,
i
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
,
"staliomem/%d"
,
i
);
class_simple_device_add
(
istallion_class
,
MKDEV
(
STL_SIOMEMMAJOR
,
i
),
NULL
,
"staliomem%d"
,
i
);
}
/*
...
...
drivers/char/stallion.c
View file @
9add6ead
...
...
@@ -41,6 +41,7 @@
#include <linux/init.h>
#include <linux/smp_lock.h>
#include <linux/devfs_fs_kernel.h>
#include <linux/device.h>
#include <asm/io.h>
#include <asm/uaccess.h>
...
...
@@ -732,6 +733,8 @@ static struct file_operations stl_fsiomem = {
/*****************************************************************************/
static
struct
class_simple
*
stallion_class
;
#ifdef MODULE
/*
...
...
@@ -788,12 +791,15 @@ static void __exit stallion_module_exit(void)
restore_flags
(
flags
);
return
;
}
for
(
i
=
0
;
i
<
4
;
i
++
)
for
(
i
=
0
;
i
<
4
;
i
++
)
{
devfs_remove
(
"staliomem/%d"
,
i
);
class_simple_device_remove
(
MKDEV
(
STL_SIOMEMMAJOR
,
i
));
}
devfs_remove
(
"staliomem"
);
if
((
i
=
unregister_chrdev
(
STL_SIOMEMMAJOR
,
"staliomem"
)))
printk
(
"STALLION: failed to un-register serial memory device, "
"errno=%d
\n
"
,
-
i
);
class_simple_destroy
(
stallion_class
);
if
(
stl_tmpwritebuf
!=
(
char
*
)
NULL
)
kfree
(
stl_tmpwritebuf
);
...
...
@@ -3181,10 +3187,12 @@ int __init stl_init(void)
printk
(
"STALLION: failed to register serial board device
\n
"
);
devfs_mk_dir
(
"staliomem"
);
stallion_class
=
class_simple_create
(
THIS_MODULE
,
"staliomem"
);
for
(
i
=
0
;
i
<
4
;
i
++
)
{
devfs_mk_cdev
(
MKDEV
(
STL_SIOMEMMAJOR
,
i
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
,
"staliomem/%d"
,
i
);
class_simple_device_add
(
stallion_class
,
MKDEV
(
STL_SIOMEMMAJOR
,
i
),
NULL
,
"staliomem%d"
,
i
);
}
stl_serial
->
owner
=
THIS_MODULE
;
...
...
drivers/char/tipar.c
View file @
9add6ead
...
...
@@ -67,7 +67,7 @@
/*
* Version Information
*/
#define DRIVER_VERSION "1.1
7
"
#define DRIVER_VERSION "1.1
9
"
#define DRIVER_AUTHOR "Romain Lievin <roms@lpg.ticalc.org>"
#define DRIVER_DESC "Device driver for TI/PC parallel link cables"
#define DRIVER_LICENSE "GPL"
...
...
@@ -364,7 +364,10 @@ tipar_ioctl(struct inode *inode, struct file *file,
delay
=
(
int
)
arg
;
//get_user(delay, &arg);
break
;
case
IOCTL_TIPAR_TIMEOUT
:
timeout
=
(
int
)
arg
;
//get_user(timeout, &arg);
if
(
arg
!=
0
)
timeout
=
(
int
)
arg
;
else
retval
=
-
EINVAL
;
break
;
default:
retval
=
-
ENOTTY
;
...
...
@@ -399,7 +402,10 @@ tipar_setup(char *str)
str
=
get_options
(
str
,
ARRAY_SIZE
(
ints
),
ints
);
if
(
ints
[
0
]
>
0
)
{
if
(
ints
[
1
]
!=
0
)
timeout
=
ints
[
1
];
else
printk
(
"tipar: wrong timeout value (0), using default value instead."
);
if
(
ints
[
0
]
>
1
)
{
delay
=
ints
[
2
];
}
...
...
drivers/char/tpqic02.c
View file @
9add6ead
...
...
@@ -94,6 +94,7 @@
#include <linux/init.h>
#include <linux/smp_lock.h>
#include <linux/devfs_fs_kernel.h>
#include <linux/device.h>
#include <asm/dma.h>
#include <asm/system.h>
...
...
@@ -229,6 +230,8 @@ static const char *format_names[] = {
"600"
/* untested. */
};
static
struct
class_simple
*
tpqic02_class
;
/* `exception_list' is needed for exception status reporting.
* Exceptions 1..14 are defined by QIC-02 rev F.
...
...
@@ -2696,23 +2699,32 @@ int __init qic02_tape_init(void)
return
-
ENODEV
;
}
tpqic02_class
=
class_simple_create
(
THIS_MODULE
,
TPQIC02_NAME
);
class_simple_device_add
(
tpqic02_class
,
MKDEV
(
QIC02_TAPE_MAJOR
,
2
),
NULL
,
"ntpqic11"
);
devfs_mk_cdev
(
MKDEV
(
QIC02_TAPE_MAJOR
,
2
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
|
S_IRGRP
|
S_IWGRP
,
"ntpqic11"
);
class_simple_device_add
(
tpqic02_class
,
MKDEV
(
QIC02_TAPE_MAJOR
,
3
),
NULL
,
"tpqic11"
);
devfs_mk_cdev
(
MKDEV
(
QIC02_TAPE_MAJOR
,
3
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
|
S_IRGRP
|
S_IWGRP
,
"tpqic11"
);
class_simple_device_add
(
tpqic02_class
,
MKDEV
(
QIC02_TAPE_MAJOR
,
4
),
NULL
,
"ntpqic24"
);
devfs_mk_cdev
(
MKDEV
(
QIC02_TAPE_MAJOR
,
4
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
|
S_IRGRP
|
S_IWGRP
,
"ntpqic24"
);
class_simple_device_add
(
tpqic02_class
,
MKDEV
(
QIC02_TAPE_MAJOR
,
5
),
NULL
,
"tpqic24"
);
devfs_mk_cdev
(
MKDEV
(
QIC02_TAPE_MAJOR
,
5
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
|
S_IRGRP
|
S_IWGRP
,
"tpqic24"
);
class_simple_device_add
(
tpqic02_class
,
MKDEV
(
QIC02_TAPE_MAJOR
,
6
),
NULL
,
"ntpqic20"
);
devfs_mk_cdev
(
MKDEV
(
QIC02_TAPE_MAJOR
,
6
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
|
S_IRGRP
|
S_IWGRP
,
"ntpqic120"
);
class_simple_device_add
(
tpqic02_class
,
MKDEV
(
QIC02_TAPE_MAJOR
,
7
),
NULL
,
"tpqic20"
);
devfs_mk_cdev
(
MKDEV
(
QIC02_TAPE_MAJOR
,
7
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
|
S_IRGRP
|
S_IWGRP
,
"tpqic120"
);
class_simple_device_add
(
tpqic02_class
,
MKDEV
(
QIC02_TAPE_MAJOR
,
8
),
NULL
,
"ntpqic50"
);
devfs_mk_cdev
(
MKDEV
(
QIC02_TAPE_MAJOR
,
8
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
|
S_IRGRP
|
S_IWGRP
,
"ntpqic150"
);
class_simple_device_add
(
tpqic02_class
,
MKDEV
(
QIC02_TAPE_MAJOR
,
9
),
NULL
,
"tpqic50"
);
devfs_mk_cdev
(
MKDEV
(
QIC02_TAPE_MAJOR
,
9
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
|
S_IRGRP
|
S_IWGRP
,
"tpqic150"
);
...
...
@@ -2757,13 +2769,23 @@ static void qic02_module_exit(void)
qic02_release_resources
();
devfs_remove
(
"ntpqic11"
);
class_simple_device_remove
(
MKDEV
(
QIC02_TAPE_MAJOR
,
2
));
devfs_remove
(
"tpqic11"
);
class_simple_device_remove
(
MKDEV
(
QIC02_TAPE_MAJOR
,
3
));
devfs_remove
(
"ntpqic24"
);
class_simple_device_remove
(
MKDEV
(
QIC02_TAPE_MAJOR
,
4
));
devfs_remove
(
"tpqic24"
);
class_simple_device_remove
(
MKDEV
(
QIC02_TAPE_MAJOR
,
5
));
devfs_remove
(
"ntpqic120"
);
class_simple_device_remove
(
MKDEV
(
QIC02_TAPE_MAJOR
,
6
));
devfs_remove
(
"tpqic120"
);
class_simple_device_remove
(
MKDEV
(
QIC02_TAPE_MAJOR
,
7
));
devfs_remove
(
"ntpqic150"
);
class_simple_device_remove
(
MKDEV
(
QIC02_TAPE_MAJOR
,
8
));
devfs_remove
(
"tpqic150"
);
class_simple_device_remove
(
MKDEV
(
QIC02_TAPE_MAJOR
,
9
));
class_simple_destroy
(
tpqic02_class
);
}
static
int
qic02_module_init
(
void
)
...
...
drivers/char/vc_screen.c
View file @
9add6ead
...
...
@@ -36,6 +36,7 @@
#include <linux/kbd_kern.h>
#include <linux/console.h>
#include <linux/smp_lock.h>
#include <linux/device.h>
#include <asm/uaccess.h>
#include <asm/byteorder.h>
#include <asm/unaligned.h>
...
...
@@ -469,6 +470,8 @@ static struct file_operations vcs_fops = {
.
open
=
vcs_open
,
};
static
struct
class_simple
*
vc_class
;
void
vcs_make_devfs
(
struct
tty_struct
*
tty
)
{
devfs_mk_cdev
(
MKDEV
(
VCS_MAJOR
,
tty
->
index
+
1
),
...
...
@@ -477,19 +480,26 @@ void vcs_make_devfs(struct tty_struct *tty)
devfs_mk_cdev
(
MKDEV
(
VCS_MAJOR
,
tty
->
index
+
129
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
,
"vcc/a%u"
,
tty
->
index
+
1
);
class_simple_device_add
(
vc_class
,
MKDEV
(
VCS_MAJOR
,
tty
->
index
+
1
),
NULL
,
"vcs%u"
,
tty
->
index
+
1
);
class_simple_device_add
(
vc_class
,
MKDEV
(
VCS_MAJOR
,
tty
->
index
+
129
),
NULL
,
"vcsa%u"
,
tty
->
index
+
1
);
}
void
vcs_remove_devfs
(
struct
tty_struct
*
tty
)
{
devfs_remove
(
"vcc/%u"
,
tty
->
index
+
1
);
devfs_remove
(
"vcc/a%u"
,
tty
->
index
+
1
);
class_simple_device_remove
(
MKDEV
(
VCS_MAJOR
,
tty
->
index
+
1
));
class_simple_device_remove
(
MKDEV
(
VCS_MAJOR
,
tty
->
index
+
129
));
}
int
__init
vcs_init
(
void
)
{
if
(
register_chrdev
(
VCS_MAJOR
,
"vcs"
,
&
vcs_fops
))
panic
(
"unable to get major %d for vcs device"
,
VCS_MAJOR
);
vc_class
=
class_simple_create
(
THIS_MODULE
,
"vc"
);
devfs_mk_cdev
(
MKDEV
(
VCS_MAJOR
,
0
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
,
"vcc/0"
);
devfs_mk_cdev
(
MKDEV
(
VCS_MAJOR
,
128
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
,
"vcc/a0"
);
class_simple_device_add
(
vc_class
,
MKDEV
(
VCS_MAJOR
,
0
),
NULL
,
"vcs"
);
class_simple_device_add
(
vc_class
,
MKDEV
(
VCS_MAJOR
,
128
),
NULL
,
"vcsa"
);
return
0
;
}
drivers/char/vt.c
View file @
9add6ead
...
...
@@ -2617,6 +2617,8 @@ static struct tty_operations con_ops = {
int
__init
vty_init
(
void
)
{
vcs_init
();
console_driver
=
alloc_tty_driver
(
MAX_NR_CONSOLES
);
if
(
!
console_driver
)
panic
(
"Couldn't allocate console driver
\n
"
);
...
...
@@ -2644,7 +2646,6 @@ int __init vty_init(void)
#ifdef CONFIG_FRAMEBUFFER_CONSOLE
fb_console_init
();
#endif
vcs_init
();
return
0
;
}
...
...
drivers/isdn/capi/capi.c
View file @
9add6ead
...
...
@@ -37,6 +37,7 @@
#include <linux/capi.h>
#include <linux/kernelcapi.h>
#include <linux/init.h>
#include <linux/device.h>
#include <linux/devfs_fs_kernel.h>
#include <linux/isdn/capiutil.h>
#include <linux/isdn/capicmd.h>
...
...
@@ -56,6 +57,8 @@ MODULE_LICENSE("GPL");
/* -------- driver information -------------------------------------- */
static
struct
class_simple
*
capi_class
;
int
capi_major
=
68
;
/* allocated */
#ifdef CONFIG_ISDN_CAPI_MIDDLEWARE
#define CAPINC_NR_PORTS 32
...
...
@@ -1313,7 +1316,8 @@ static int capinc_tty_init(void)
drv
->
owner
=
THIS_MODULE
;
drv
->
driver_name
=
"capi_nc"
;
drv
->
name
=
"capi/"
;
drv
->
devfs_name
=
"capi/"
;
drv
->
name
=
"capi"
;
drv
->
major
=
capi_ttymajor
;
drv
->
minor_start
=
0
;
drv
->
type
=
TTY_DRIVER_TYPE_SERIAL
;
...
...
@@ -1483,11 +1487,20 @@ static int __init capi_init(void)
return
-
EIO
;
}
capi_class
=
class_simple_create
(
THIS_MODULE
,
"capi"
);
if
(
IS_ERR
(
capi_class
))
{
unregister_chrdev
(
capi_major
,
"capi20"
);
return
PTR_ERR
(
capi_class
);
}
class_simple_device_add
(
capi_class
,
MKDEV
(
capi_major
,
0
),
NULL
,
"capi"
);
devfs_mk_cdev
(
MKDEV
(
capi_major
,
0
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
,
"isdn/capi20"
);
#ifdef CONFIG_ISDN_CAPI_MIDDLEWARE
if
(
capinc_tty_init
()
<
0
)
{
class_simple_device_remove
(
MKDEV
(
capi_major
,
0
));
class_simple_destroy
(
capi_class
);
unregister_chrdev
(
capi_major
,
"capi20"
);
return
-
ENOMEM
;
}
...
...
@@ -1514,6 +1527,8 @@ static void __exit capi_exit(void)
{
proc_exit
();
class_simple_device_remove
(
MKDEV
(
capi_major
,
0
));
class_simple_destroy
(
capi_class
);
unregister_chrdev
(
capi_major
,
"capi20"
);
devfs_remove
(
"isdn/capi20"
);
...
...
drivers/video/fbmem.c
View file @
9add6ead
...
...
@@ -32,6 +32,9 @@
#include <linux/kmod.h>
#endif
#include <linux/devfs_fs_kernel.h>
#include <linux/err.h>
#include <linux/kernel.h>
#include <linux/device.h>
#if defined(__mc68000__) || defined(CONFIG_APUS)
#include <asm/setup.h>
...
...
@@ -1245,6 +1248,8 @@ static struct file_operations fb_fops = {
#endif
};
static
struct
class_simple
*
fb_class
;
/**
* register_framebuffer - registers a frame buffer device
* @fb_info: frame buffer info structure
...
...
@@ -1259,6 +1264,7 @@ int
register_framebuffer
(
struct
fb_info
*
fb_info
)
{
int
i
;
struct
class_device
*
c
;
if
(
num_registered_fb
==
FB_MAX
)
return
-
ENXIO
;
...
...
@@ -1268,6 +1274,12 @@ register_framebuffer(struct fb_info *fb_info)
break
;
fb_info
->
node
=
i
;
c
=
class_simple_device_add
(
fb_class
,
MKDEV
(
FB_MAJOR
,
i
),
NULL
,
"fb%d"
,
i
);
if
(
IS_ERR
(
c
))
{
/* Not fatal */
printk
(
KERN_WARNING
"Unable to create class_device for framebuffer %d; errno = %ld
\n
"
,
i
,
PTR_ERR
(
c
));
}
if
(
fb_info
->
pixmap
.
addr
==
NULL
)
{
fb_info
->
pixmap
.
addr
=
kmalloc
(
FBPIXMAPSIZE
,
GFP_KERNEL
);
if
(
fb_info
->
pixmap
.
addr
)
{
...
...
@@ -1332,6 +1344,7 @@ unregister_framebuffer(struct fb_info *fb_info)
kfree
(
fb_info
->
sprite
.
addr
);
registered_fb
[
i
]
=
NULL
;
num_registered_fb
--
;
class_simple_device_remove
(
MKDEV
(
FB_MAJOR
,
i
));
return
0
;
}
...
...
@@ -1393,6 +1406,12 @@ fbmem_init(void)
if
(
register_chrdev
(
FB_MAJOR
,
"fb"
,
&
fb_fops
))
printk
(
"unable to get major %d for fb devs
\n
"
,
FB_MAJOR
);
fb_class
=
class_simple_create
(
THIS_MODULE
,
"graphics"
);
if
(
IS_ERR
(
fb_class
))
{
printk
(
KERN_WARNING
"Unable to create fb class; errno = %ld
\n
"
,
PTR_ERR
(
fb_class
));
fb_class
=
NULL
;
}
#ifdef CONFIG_FB_OF
if
(
ofonly
)
{
offb_init
();
...
...
fs/coda/psdev.c
View file @
9add6ead
...
...
@@ -37,6 +37,7 @@
#include <linux/init.h>
#include <linux/list.h>
#include <linux/smp_lock.h>
#include <linux/device.h>
#include <asm/io.h>
#include <asm/system.h>
#include <asm/poll.h>
...
...
@@ -61,6 +62,7 @@ unsigned long coda_timeout = 30; /* .. secs, then signals will dequeue */
struct
venus_comm
coda_comms
[
MAX_CODADEVS
];
static
struct
class_simple
*
coda_psdev_class
;
/*
* Device operations
...
...
@@ -358,20 +360,38 @@ static struct file_operations coda_psdev_fops = {
static
int
init_coda_psdev
(
void
)
{
int
i
;
int
i
,
err
=
0
;
if
(
register_chrdev
(
CODA_PSDEV_MAJOR
,
"coda_psdev"
,
&
coda_psdev_fops
))
{
printk
(
KERN_ERR
"coda_psdev: unable to get major %d
\n
"
,
CODA_PSDEV_MAJOR
);
return
-
EIO
;
}
coda_psdev_class
=
class_simple_create
(
THIS_MODULE
,
"coda_psdev"
);
if
(
IS_ERR
(
coda_psdev_class
))
{
err
=
PTR_ERR
(
coda_psdev_class
);
goto
out_chrdev
;
}
devfs_mk_dir
(
"coda"
);
for
(
i
=
0
;
i
<
MAX_CODADEVS
;
i
++
)
{
devfs_mk_cdev
(
MKDEV
(
CODA_PSDEV_MAJOR
,
i
),
class_simple_device_add
(
coda_psdev_class
,
MKDEV
(
CODA_PSDEV_MAJOR
,
i
),
NULL
,
"cfs%d"
,
i
);
err
=
devfs_mk_cdev
(
MKDEV
(
CODA_PSDEV_MAJOR
,
i
),
S_IFCHR
|
S_IRUSR
|
S_IWUSR
,
"coda/%d"
,
i
);
if
(
err
)
goto
out_class
;
}
coda_sysctl_init
();
return
0
;
goto
out
;
out_class:
for
(
i
=
0
;
i
<
MAX_CODADEVS
;
i
++
)
class_simple_device_remove
(
MKDEV
(
CODA_PSDEV_MAJOR
,
i
));
class_simple_destroy
(
coda_psdev_class
);
out_chrdev:
unregister_chrdev
(
CODA_PSDEV_MAJOR
,
"coda_psdev"
);
out:
return
err
;
}
...
...
@@ -408,8 +428,11 @@ static int __init init_coda(void)
}
return
0
;
out:
for
(
i
=
0
;
i
<
MAX_CODADEVS
;
i
++
)
for
(
i
=
0
;
i
<
MAX_CODADEVS
;
i
++
)
{
class_simple_device_remove
(
MKDEV
(
CODA_PSDEV_MAJOR
,
i
));
devfs_remove
(
"coda/%d"
,
i
);
}
class_simple_destroy
(
coda_psdev_class
);
devfs_remove
(
"coda"
);
unregister_chrdev
(
CODA_PSDEV_MAJOR
,
"coda_psdev"
);
coda_sysctl_clean
();
...
...
@@ -427,8 +450,11 @@ static void __exit exit_coda(void)
if
(
err
!=
0
)
{
printk
(
"coda: failed to unregister filesystem
\n
"
);
}
for
(
i
=
0
;
i
<
MAX_CODADEVS
;
i
++
)
for
(
i
=
0
;
i
<
MAX_CODADEVS
;
i
++
)
{
class_simple_device_remove
(
MKDEV
(
CODA_PSDEV_MAJOR
,
i
));
devfs_remove
(
"coda/%d"
,
i
);
}
class_simple_destroy
(
coda_psdev_class
);
devfs_remove
(
"coda"
);
unregister_chrdev
(
CODA_PSDEV_MAJOR
,
"coda_psdev"
);
coda_sysctl_clean
();
...
...
lib/kobject.c
View file @
9add6ead
...
...
@@ -349,16 +349,16 @@ int kobject_set_name(struct kobject * kobj, const char * fmt, ...)
/*
* Need more space? Allocate it and try again
*/
name
=
kmalloc
(
need
,
GFP_KERNEL
);
limit
=
need
+
1
;
name
=
kmalloc
(
limit
,
GFP_KERNEL
);
if
(
!
name
)
{
error
=
-
ENOMEM
;
goto
Done
;
}
limit
=
need
;
need
=
vsnprintf
(
name
,
limit
,
fmt
,
args
);
/* Still? Give up. */
if
(
need
>
limit
)
{
if
(
need
>
=
limit
)
{
kfree
(
name
);
error
=
-
EFAULT
;
goto
Done
;
...
...
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