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
e22af66f
Commit
e22af66f
authored
May 30, 2008
by
Uwe Kleine-König
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'atags' into for-rmk
parents
a4831fbe
f7b0b939
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
40 additions
and
45 deletions
+40
-45
arch/arm/kernel/atags.c
arch/arm/kernel/atags.c
+40
-43
include/asm-arm/kexec.h
include/asm-arm/kexec.h
+0
-2
No files found.
arch/arm/kernel/atags.c
View file @
e22af66f
#include <linux/slab.h>
#include <linux/kexec.h>
#include <linux/proc_fs.h>
#include <asm/setup.h>
#include <asm/types.h>
...
...
@@ -7,9 +6,8 @@
struct
buffer
{
size_t
size
;
char
*
data
;
char
data
[]
;
};
static
struct
buffer
tags_buffer
;
static
int
read_buffer
(
char
*
page
,
char
**
start
,
off_t
off
,
int
count
,
...
...
@@ -29,58 +27,57 @@ read_buffer(char* page, char** start, off_t off, int count,
return
count
;
}
static
int
create_proc_entries
(
void
)
{
struct
proc_dir_entry
*
tags_entry
;
tags_entry
=
create_proc_read_entry
(
"atags"
,
0400
,
NULL
,
read_buffer
,
&
tags_buffer
);
if
(
!
tags_entry
)
return
-
ENOMEM
;
return
0
;
}
static
char
__initdata
atags_copy_buf
[
KEXEC_BOOT_PARAMS_SIZE
];
static
char
__initdata
*
atags_copy
;
#define BOOT_PARAMS_SIZE 1536
static
char
__initdata
atags_copy
[
BOOT_PARAMS_SIZE
];
void
__init
save_atags
(
const
struct
tag
*
tags
)
{
atags_copy
=
atags_copy_buf
;
memcpy
(
atags_copy
,
tags
,
KEXEC_BOOT_PARAMS_SIZE
);
memcpy
(
atags_copy
,
tags
,
sizeof
(
atags_copy
));
}
static
int
__init
init_atags_procfs
(
void
)
{
struct
tag
*
tag
;
int
error
;
/*
* This cannot go into save_atags() because kmalloc and proc don't work
* yet when it is called.
*/
struct
proc_dir_entry
*
tags_entry
;
struct
tag
*
tag
=
(
struct
tag
*
)
atags_copy
;
struct
buffer
*
b
;
size_t
size
;
if
(
!
atags_copy
)
{
printk
(
KERN_
WARNING
"Exporting ATAGs: No saved tags found
\n
"
);
return
-
EI
O
;
if
(
tag
->
hdr
.
tag
!=
ATAG_CORE
)
{
printk
(
KERN_
INFO
"No ATAGs?
"
);
return
-
EI
NVAL
;
}
for
(
tag
=
(
struct
tag
*
)
atags_copy
;
tag
->
hdr
.
size
;
tag
=
tag_next
(
tag
))
for
(;
tag
->
hdr
.
size
;
tag
=
tag_next
(
tag
))
;
tags_buffer
.
size
=
((
char
*
)
tag
-
atags_copy
)
+
sizeof
(
tag
->
hdr
);
tags_buffer
.
data
=
kmalloc
(
tags_buffer
.
size
,
GFP_KERNEL
);
if
(
tags_buffer
.
data
==
NULL
)
return
-
ENOMEM
;
memcpy
(
tags_buffer
.
data
,
atags_copy
,
tags_buffer
.
size
);
error
=
create_proc_entries
();
if
(
error
)
{
printk
(
KERN_ERR
"Exporting ATAGs: not enough memory
\n
"
);
kfree
(
tags_buffer
.
data
);
tags_buffer
.
size
=
0
;
tags_buffer
.
data
=
NULL
;
}
/* include the terminating ATAG_NONE */
size
=
(
char
*
)
tag
-
atags_copy
+
sizeof
(
struct
tag_header
);
return
error
;
}
WARN_ON
(
tag
->
hdr
.
tag
!=
ATAG_NONE
);
b
=
kmalloc
(
sizeof
(
*
b
)
+
size
,
GFP_KERNEL
);
if
(
!
b
)
goto
nomem
;
b
->
size
=
size
;
memcpy
(
b
->
data
,
atags_copy
,
size
);
tags_entry
=
create_proc_read_entry
(
"atags"
,
0400
,
NULL
,
read_buffer
,
b
);
if
(
!
tags_entry
)
goto
nomem
;
return
0
;
nomem:
kfree
(
b
);
printk
(
KERN_ERR
"Exporting ATAGs: not enough memory
\n
"
);
return
-
ENOMEM
;
}
arch_initcall
(
init_atags_procfs
);
include/asm-arm/kexec.h
View file @
e22af66f
...
...
@@ -14,8 +14,6 @@
#define KEXEC_ARCH KEXEC_ARCH_ARM
#define KEXEC_BOOT_PARAMS_SIZE 1536
#define KEXEC_ARM_ATAGS_OFFSET 0x1000
#define KEXEC_ARM_ZIMAGE_OFFSET 0x8000
...
...
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