Merge branch 'merge'
This commit is contained in:
commit
57cad8084e
10
CREDITS
10
CREDITS
|
@ -528,11 +528,11 @@ S: Oxford
|
|||
S: United Kingdom
|
||||
|
||||
N: Luiz Fernando N. Capitulino
|
||||
E: lcapitulino@terra.com.br
|
||||
E: lcapitulino@prefeitura.sp.gov.br
|
||||
W: http://www.telecentros.sp.gov.br
|
||||
D: Little fixes and a lot of janitorial work
|
||||
S: E-GOV Telecentros SP
|
||||
E: lcapitulino@mandriva.com.br
|
||||
E: lcapitulino@gmail.com
|
||||
W: http://www.cpu.eti.br
|
||||
D: misc kernel hacking
|
||||
S: Mandriva
|
||||
S: Brazil
|
||||
|
||||
N: Remy Card
|
||||
|
|
|
@ -698,12 +698,12 @@ these interfaces. Remember that, as defined, consistent mappings are
|
|||
always going to be SAC addressable.
|
||||
|
||||
The first thing your driver needs to do is query the PCI platform
|
||||
layer with your devices DAC addressing capabilities:
|
||||
layer if it is capable of handling your devices DAC addressing
|
||||
capabilities:
|
||||
|
||||
int pci_dac_set_dma_mask(struct pci_dev *pdev, u64 mask);
|
||||
int pci_dac_dma_supported(struct pci_dev *hwdev, u64 mask);
|
||||
|
||||
This routine behaves identically to pci_set_dma_mask. You may not
|
||||
use the following interfaces if this routine fails.
|
||||
You may not use the following interfaces if this routine fails.
|
||||
|
||||
Next, DMA addresses using this API are kept track of using the
|
||||
dma64_addr_t type. It is guaranteed to be big enough to hold any
|
||||
|
|
|
@ -58,6 +58,9 @@
|
|||
!Iinclude/linux/ktime.h
|
||||
!Iinclude/linux/hrtimer.h
|
||||
!Ekernel/hrtimer.c
|
||||
</sect1>
|
||||
<sect1><title>Workqueues and Kevents</title>
|
||||
!Ekernel/workqueue.c
|
||||
</sect1>
|
||||
<sect1><title>Internal Functions</title>
|
||||
!Ikernel/exit.c
|
||||
|
@ -300,7 +303,7 @@ X!Ekernel/module.c
|
|||
</sect1>
|
||||
|
||||
<sect1><title>Resources Management</title>
|
||||
!Ekernel/resource.c
|
||||
!Ikernel/resource.c
|
||||
</sect1>
|
||||
|
||||
<sect1><title>MTRR Handling</title>
|
||||
|
@ -312,9 +315,7 @@ X!Ekernel/module.c
|
|||
!Edrivers/pci/pci-driver.c
|
||||
!Edrivers/pci/remove.c
|
||||
!Edrivers/pci/pci-acpi.c
|
||||
<!-- kerneldoc does not understand __devinit
|
||||
X!Edrivers/pci/search.c
|
||||
-->
|
||||
!Edrivers/pci/search.c
|
||||
!Edrivers/pci/msi.c
|
||||
!Edrivers/pci/bus.c
|
||||
<!-- FIXME: Removed for now since no structured comments in source
|
||||
|
|
|
@ -687,8 +687,9 @@ diff shows how closely related RCU and reader-writer locking can be.
|
|||
+ spin_lock(&listmutex);
|
||||
list_for_each_entry(p, head, lp) {
|
||||
if (p->key == key) {
|
||||
list_del(&p->list);
|
||||
- list_del(&p->list);
|
||||
- write_unlock(&listmutex);
|
||||
+ list_del_rcu(&p->list);
|
||||
+ spin_unlock(&listmutex);
|
||||
+ synchronize_rcu();
|
||||
kfree(p);
|
||||
|
@ -736,7 +737,7 @@ Or, for those who prefer a side-by-side listing:
|
|||
5 write_lock(&listmutex); 5 spin_lock(&listmutex);
|
||||
6 list_for_each_entry(p, head, lp) { 6 list_for_each_entry(p, head, lp) {
|
||||
7 if (p->key == key) { 7 if (p->key == key) {
|
||||
8 list_del(&p->list); 8 list_del(&p->list);
|
||||
8 list_del(&p->list); 8 list_del_rcu(&p->list);
|
||||
9 write_unlock(&listmutex); 9 spin_unlock(&listmutex);
|
||||
10 synchronize_rcu();
|
||||
10 kfree(p); 11 kfree(p);
|
||||
|
|
|
@ -1,57 +1,63 @@
|
|||
Linux Kernel patch sumbittal checklist
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Here are some basic things that developers should do if they
|
||||
want to see their kernel patch submittals accepted quicker.
|
||||
Here are some basic things that developers should do if they want to see their
|
||||
kernel patch submissions accepted more quickly.
|
||||
|
||||
These are all above and beyond the documentation that is provided
|
||||
in Documentation/SubmittingPatches and elsewhere about submitting
|
||||
Linux kernel patches.
|
||||
These are all above and beyond the documentation that is provided in
|
||||
Documentation/SubmittingPatches and elsewhere regarding submitting Linux
|
||||
kernel patches.
|
||||
|
||||
|
||||
|
||||
- Builds cleanly with applicable or modified CONFIG options =y, =m, and =n.
|
||||
No gcc warnings/errors, no linker warnings/errors.
|
||||
1: Builds cleanly with applicable or modified CONFIG options =y, =m, and
|
||||
=n. No gcc warnings/errors, no linker warnings/errors.
|
||||
|
||||
- Passes allnoconfig, allmodconfig
|
||||
2: Passes allnoconfig, allmodconfig
|
||||
|
||||
- Builds on multiple CPU arch-es by using local cross-compile tools
|
||||
or something like PLM at OSDL.
|
||||
3: Builds on multiple CPU architectures by using local cross-compile tools
|
||||
or something like PLM at OSDL.
|
||||
|
||||
- ppc64 is a good architecture for cross-compilation checking because it
|
||||
tends to use `unsigned long' for 64-bit quantities.
|
||||
4: ppc64 is a good architecture for cross-compilation checking because it
|
||||
tends to use `unsigned long' for 64-bit quantities.
|
||||
|
||||
- Matches kernel coding style(!)
|
||||
5: Matches kernel coding style(!)
|
||||
|
||||
- Any new or modified CONFIG options don't muck up the config menu.
|
||||
6: Any new or modified CONFIG options don't muck up the config menu.
|
||||
|
||||
- All new Kconfig options have help text.
|
||||
7: All new Kconfig options have help text.
|
||||
|
||||
- Has been carefully reviewed with respect to relevant Kconfig
|
||||
combinations. This is very hard to get right with testing --
|
||||
brainpower pays off here.
|
||||
8: Has been carefully reviewed with respect to relevant Kconfig
|
||||
combinations. This is very hard to get right with testing -- brainpower
|
||||
pays off here.
|
||||
|
||||
- Check cleanly with sparse.
|
||||
9: Check cleanly with sparse.
|
||||
|
||||
- Use 'make checkstack' and 'make namespacecheck' and fix any
|
||||
problems that they find. Note: checkstack does not point out
|
||||
problems explicitly, but any one function that uses more than
|
||||
512 bytes on the stack is a candidate for change.
|
||||
10: Use 'make checkstack' and 'make namespacecheck' and fix any problems
|
||||
that they find. Note: checkstack does not point out problems explicitly,
|
||||
but any one function that uses more than 512 bytes on the stack is a
|
||||
candidate for change.
|
||||
|
||||
- Include kernel-doc to document global kernel APIs. (Not required
|
||||
for static functions, but OK there also.) Use 'make htmldocs'
|
||||
or 'make mandocs' to check the kernel-doc and fix any issues.
|
||||
11: Include kernel-doc to document global kernel APIs. (Not required for
|
||||
static functions, but OK there also.) Use 'make htmldocs' or 'make
|
||||
mandocs' to check the kernel-doc and fix any issues.
|
||||
|
||||
- Has been tested with CONFIG_PREEMPT, CONFIG_DEBUG_PREEMPT,
|
||||
CONFIG_DEBUG_SLAB, CONFIG_DEBUG_PAGEALLOC, CONFIG_DEBUG_MUTEXES,
|
||||
CONFIG_DEBUG_SPINLOCK, CONFIG_DEBUG_SPINLOCK_SLEEP all simultaneously
|
||||
enabled.
|
||||
12: Has been tested with CONFIG_PREEMPT, CONFIG_DEBUG_PREEMPT,
|
||||
CONFIG_DEBUG_SLAB, CONFIG_DEBUG_PAGEALLOC, CONFIG_DEBUG_MUTEXES,
|
||||
CONFIG_DEBUG_SPINLOCK, CONFIG_DEBUG_SPINLOCK_SLEEP all simultaneously
|
||||
enabled.
|
||||
|
||||
- Has been build- and runtime tested with and without CONFIG_SMP and
|
||||
CONFIG_PREEMPT.
|
||||
13: Has been build- and runtime tested with and without CONFIG_SMP and
|
||||
CONFIG_PREEMPT.
|
||||
|
||||
- If the patch affects IO/Disk, etc: has been tested with and without
|
||||
CONFIG_LBD.
|
||||
14: If the patch affects IO/Disk, etc: has been tested with and without
|
||||
CONFIG_LBD.
|
||||
|
||||
15: All codepaths have been exercised with all lockdep features enabled.
|
||||
|
||||
2006-APR-27
|
||||
16: All new /proc entries are documented under Documentation/
|
||||
|
||||
17: All new kernel boot parameters are documented in
|
||||
Documentation/kernel-parameters.txt.
|
||||
|
||||
18: All new module parameters are documented with MODULE_PARM_DESC()
|
||||
|
|
|
@ -10,7 +10,9 @@ kernel, the process can sometimes be daunting if you're not familiar
|
|||
with "the system." This text is a collection of suggestions which
|
||||
can greatly increase the chances of your change being accepted.
|
||||
|
||||
If you are submitting a driver, also read Documentation/SubmittingDrivers.
|
||||
Read Documentation/SubmitChecklist for a list of items to check
|
||||
before submitting code. If you are submitting a driver, also read
|
||||
Documentation/SubmittingDrivers.
|
||||
|
||||
|
||||
|
||||
|
@ -74,9 +76,6 @@ There are a number of scripts which can aid in this:
|
|||
Quilt:
|
||||
http://savannah.nongnu.org/projects/quilt
|
||||
|
||||
Randy Dunlap's patch scripts:
|
||||
http://www.xenotime.net/linux/scripts/patching-scripts-002.tar.gz
|
||||
|
||||
Andrew Morton's patch scripts:
|
||||
http://www.zip.com.au/~akpm/linux/patches/
|
||||
Instead of these scripts, quilt is the recommended patch management
|
||||
|
@ -484,7 +483,7 @@ Greg Kroah-Hartman "How to piss off a kernel subsystem maintainer".
|
|||
<http://www.kroah.com/log/2005/10/19/>
|
||||
<http://www.kroah.com/log/2006/01/11/>
|
||||
|
||||
NO!!!! No more huge patch bombs to linux-kernel@vger.kernel.org people!.
|
||||
NO!!!! No more huge patch bombs to linux-kernel@vger.kernel.org people!
|
||||
<http://marc.theaimsgroup.com/?l=linux-kernel&m=112112749912944&w=2>
|
||||
|
||||
Kernel Documentation/CodingStyle
|
||||
|
@ -493,4 +492,3 @@ Kernel Documentation/CodingStyle
|
|||
Linus Torvald's mail on the canonical patch format:
|
||||
<http://lkml.org/lkml/2005/4/7/183>
|
||||
--
|
||||
Last updated on 17 Nov 2005.
|
||||
|
|
|
@ -0,0 +1,112 @@
|
|||
Delay accounting
|
||||
----------------
|
||||
|
||||
Tasks encounter delays in execution when they wait
|
||||
for some kernel resource to become available e.g. a
|
||||
runnable task may wait for a free CPU to run on.
|
||||
|
||||
The per-task delay accounting functionality measures
|
||||
the delays experienced by a task while
|
||||
|
||||
a) waiting for a CPU (while being runnable)
|
||||
b) completion of synchronous block I/O initiated by the task
|
||||
c) swapping in pages
|
||||
|
||||
and makes these statistics available to userspace through
|
||||
the taskstats interface.
|
||||
|
||||
Such delays provide feedback for setting a task's cpu priority,
|
||||
io priority and rss limit values appropriately. Long delays for
|
||||
important tasks could be a trigger for raising its corresponding priority.
|
||||
|
||||
The functionality, through its use of the taskstats interface, also provides
|
||||
delay statistics aggregated for all tasks (or threads) belonging to a
|
||||
thread group (corresponding to a traditional Unix process). This is a commonly
|
||||
needed aggregation that is more efficiently done by the kernel.
|
||||
|
||||
Userspace utilities, particularly resource management applications, can also
|
||||
aggregate delay statistics into arbitrary groups. To enable this, delay
|
||||
statistics of a task are available both during its lifetime as well as on its
|
||||
exit, ensuring continuous and complete monitoring can be done.
|
||||
|
||||
|
||||
Interface
|
||||
---------
|
||||
|
||||
Delay accounting uses the taskstats interface which is described
|
||||
in detail in a separate document in this directory. Taskstats returns a
|
||||
generic data structure to userspace corresponding to per-pid and per-tgid
|
||||
statistics. The delay accounting functionality populates specific fields of
|
||||
this structure. See
|
||||
include/linux/taskstats.h
|
||||
for a description of the fields pertaining to delay accounting.
|
||||
It will generally be in the form of counters returning the cumulative
|
||||
delay seen for cpu, sync block I/O, swapin etc.
|
||||
|
||||
Taking the difference of two successive readings of a given
|
||||
counter (say cpu_delay_total) for a task will give the delay
|
||||
experienced by the task waiting for the corresponding resource
|
||||
in that interval.
|
||||
|
||||
When a task exits, records containing the per-task statistics
|
||||
are sent to userspace without requiring a command. If it is the last exiting
|
||||
task of a thread group, the per-tgid statistics are also sent. More details
|
||||
are given in the taskstats interface description.
|
||||
|
||||
The getdelays.c userspace utility in this directory allows simple commands to
|
||||
be run and the corresponding delay statistics to be displayed. It also serves
|
||||
as an example of using the taskstats interface.
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
Compile the kernel with
|
||||
CONFIG_TASK_DELAY_ACCT=y
|
||||
CONFIG_TASKSTATS=y
|
||||
|
||||
Delay accounting is enabled by default at boot up.
|
||||
To disable, add
|
||||
nodelayacct
|
||||
to the kernel boot options. The rest of the instructions
|
||||
below assume this has not been done.
|
||||
|
||||
After the system has booted up, use a utility
|
||||
similar to getdelays.c to access the delays
|
||||
seen by a given task or a task group (tgid).
|
||||
The utility also allows a given command to be
|
||||
executed and the corresponding delays to be
|
||||
seen.
|
||||
|
||||
General format of the getdelays command
|
||||
|
||||
getdelays [-t tgid] [-p pid] [-c cmd...]
|
||||
|
||||
|
||||
Get delays, since system boot, for pid 10
|
||||
# ./getdelays -p 10
|
||||
(output similar to next case)
|
||||
|
||||
Get sum of delays, since system boot, for all pids with tgid 5
|
||||
# ./getdelays -t 5
|
||||
|
||||
|
||||
CPU count real total virtual total delay total
|
||||
7876 92005750 100000000 24001500
|
||||
IO count delay total
|
||||
0 0
|
||||
MEM count delay total
|
||||
0 0
|
||||
|
||||
Get delays seen in executing a given simple command
|
||||
# ./getdelays -c ls /
|
||||
|
||||
bin data1 data3 data5 dev home media opt root srv sys usr
|
||||
boot data2 data4 data6 etc lib mnt proc sbin subdomain tmp var
|
||||
|
||||
|
||||
CPU count real total virtual total delay total
|
||||
6 4000250 4000000 0
|
||||
IO count delay total
|
||||
0 0
|
||||
MEM count delay total
|
||||
0 0
|
|
@ -0,0 +1,396 @@
|
|||
/* getdelays.c
|
||||
*
|
||||
* Utility to get per-pid and per-tgid delay accounting statistics
|
||||
* Also illustrates usage of the taskstats interface
|
||||
*
|
||||
* Copyright (C) Shailabh Nagar, IBM Corp. 2005
|
||||
* Copyright (C) Balbir Singh, IBM Corp. 2006
|
||||
* Copyright (c) Jay Lan, SGI. 2006
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include <poll.h>
|
||||
#include <string.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/types.h>
|
||||
#include <signal.h>
|
||||
|
||||
#include <linux/genetlink.h>
|
||||
#include <linux/taskstats.h>
|
||||
|
||||
/*
|
||||
* Generic macros for dealing with netlink sockets. Might be duplicated
|
||||
* elsewhere. It is recommended that commercial grade applications use
|
||||
* libnl or libnetlink and use the interfaces provided by the library
|
||||
*/
|
||||
#define GENLMSG_DATA(glh) ((void *)(NLMSG_DATA(glh) + GENL_HDRLEN))
|
||||
#define GENLMSG_PAYLOAD(glh) (NLMSG_PAYLOAD(glh, 0) - GENL_HDRLEN)
|
||||
#define NLA_DATA(na) ((void *)((char*)(na) + NLA_HDRLEN))
|
||||
#define NLA_PAYLOAD(len) (len - NLA_HDRLEN)
|
||||
|
||||
#define err(code, fmt, arg...) do { printf(fmt, ##arg); exit(code); } while (0)
|
||||
int done = 0;
|
||||
int rcvbufsz=0;
|
||||
|
||||
char name[100];
|
||||
int dbg=0, print_delays=0;
|
||||
__u64 stime, utime;
|
||||
#define PRINTF(fmt, arg...) { \
|
||||
if (dbg) { \
|
||||
printf(fmt, ##arg); \
|
||||
} \
|
||||
}
|
||||
|
||||
/* Maximum size of response requested or message sent */
|
||||
#define MAX_MSG_SIZE 256
|
||||
/* Maximum number of cpus expected to be specified in a cpumask */
|
||||
#define MAX_CPUS 32
|
||||
/* Maximum length of pathname to log file */
|
||||
#define MAX_FILENAME 256
|
||||
|
||||
struct msgtemplate {
|
||||
struct nlmsghdr n;
|
||||
struct genlmsghdr g;
|
||||
char buf[MAX_MSG_SIZE];
|
||||
};
|
||||
|
||||
char cpumask[100+6*MAX_CPUS];
|
||||
|
||||
/*
|
||||
* Create a raw netlink socket and bind
|
||||
*/
|
||||
static int create_nl_socket(int protocol)
|
||||
{
|
||||
int fd;
|
||||
struct sockaddr_nl local;
|
||||
|
||||
fd = socket(AF_NETLINK, SOCK_RAW, protocol);
|
||||
if (fd < 0)
|
||||
return -1;
|
||||
|
||||
if (rcvbufsz)
|
||||
if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF,
|
||||
&rcvbufsz, sizeof(rcvbufsz)) < 0) {
|
||||
printf("Unable to set socket rcv buf size to %d\n",
|
||||
rcvbufsz);
|
||||
return -1;
|
||||
}
|
||||
|
||||
memset(&local, 0, sizeof(local));
|
||||
local.nl_family = AF_NETLINK;
|
||||
|
||||
if (bind(fd, (struct sockaddr *) &local, sizeof(local)) < 0)
|
||||
goto error;
|
||||
|
||||
return fd;
|
||||
error:
|
||||
close(fd);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int send_cmd(int sd, __u16 nlmsg_type, __u32 nlmsg_pid,
|
||||
__u8 genl_cmd, __u16 nla_type,
|
||||
void *nla_data, int nla_len)
|
||||
{
|
||||
struct nlattr *na;
|
||||
struct sockaddr_nl nladdr;
|
||||
int r, buflen;
|
||||
char *buf;
|
||||
|
||||
struct msgtemplate msg;
|
||||
|
||||
msg.n.nlmsg_len = NLMSG_LENGTH(GENL_HDRLEN);
|
||||
msg.n.nlmsg_type = nlmsg_type;
|
||||
msg.n.nlmsg_flags = NLM_F_REQUEST;
|
||||
msg.n.nlmsg_seq = 0;
|
||||
msg.n.nlmsg_pid = nlmsg_pid;
|
||||
msg.g.cmd = genl_cmd;
|
||||
msg.g.version = 0x1;
|
||||
na = (struct nlattr *) GENLMSG_DATA(&msg);
|
||||
na->nla_type = nla_type;
|
||||
na->nla_len = nla_len + 1 + NLA_HDRLEN;
|
||||
memcpy(NLA_DATA(na), nla_data, nla_len);
|
||||
msg.n.nlmsg_len += NLMSG_ALIGN(na->nla_len);
|
||||
|
||||
buf = (char *) &msg;
|
||||
buflen = msg.n.nlmsg_len ;
|
||||
memset(&nladdr, 0, sizeof(nladdr));
|
||||
nladdr.nl_family = AF_NETLINK;
|
||||
while ((r = sendto(sd, buf, buflen, 0, (struct sockaddr *) &nladdr,
|
||||
sizeof(nladdr))) < buflen) {
|
||||
if (r > 0) {
|
||||
buf += r;
|
||||
buflen -= r;
|
||||
} else if (errno != EAGAIN)
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Probe the controller in genetlink to find the family id
|
||||
* for the TASKSTATS family
|
||||
*/
|
||||
int get_family_id(int sd)
|
||||
{
|
||||
struct {
|
||||
struct nlmsghdr n;
|
||||
struct genlmsghdr g;
|
||||
char buf[256];
|
||||
} ans;
|
||||
|
||||
int id, rc;
|
||||
struct nlattr *na;
|
||||
int rep_len;
|
||||
|
||||
strcpy(name, TASKSTATS_GENL_NAME);
|
||||
rc = send_cmd(sd, GENL_ID_CTRL, getpid(), CTRL_CMD_GETFAMILY,
|
||||
CTRL_ATTR_FAMILY_NAME, (void *)name,
|
||||
strlen(TASKSTATS_GENL_NAME)+1);
|
||||
|
||||
rep_len = recv(sd, &ans, sizeof(ans), 0);
|
||||
if (ans.n.nlmsg_type == NLMSG_ERROR ||
|
||||
(rep_len < 0) || !NLMSG_OK((&ans.n), rep_len))
|
||||
return 0;
|
||||
|
||||
na = (struct nlattr *) GENLMSG_DATA(&ans);
|
||||
na = (struct nlattr *) ((char *) na + NLA_ALIGN(na->nla_len));
|
||||
if (na->nla_type == CTRL_ATTR_FAMILY_ID) {
|
||||
id = *(__u16 *) NLA_DATA(na);
|
||||
}
|
||||
return id;
|
||||
}
|
||||
|
||||
void print_delayacct(struct taskstats *t)
|
||||
{
|
||||
printf("\n\nCPU %15s%15s%15s%15s\n"
|
||||
" %15llu%15llu%15llu%15llu\n"
|
||||
"IO %15s%15s\n"
|
||||
" %15llu%15llu\n"
|
||||
"MEM %15s%15s\n"
|
||||
" %15llu%15llu\n\n",
|
||||
"count", "real total", "virtual total", "delay total",
|
||||
t->cpu_count, t->cpu_run_real_total, t->cpu_run_virtual_total,
|
||||
t->cpu_delay_total,
|
||||
"count", "delay total",
|
||||
t->blkio_count, t->blkio_delay_total,
|
||||
"count", "delay total", t->swapin_count, t->swapin_delay_total);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int c, rc, rep_len, aggr_len, len2, cmd_type;
|
||||
__u16 id;
|
||||
__u32 mypid;
|
||||
|
||||
struct nlattr *na;
|
||||
int nl_sd = -1;
|
||||
int len = 0;
|
||||
pid_t tid = 0;
|
||||
pid_t rtid = 0;
|
||||
|
||||
int fd = 0;
|
||||
int count = 0;
|
||||
int write_file = 0;
|
||||
int maskset = 0;
|
||||
char logfile[128];
|
||||
int loop = 0;
|
||||
|
||||
struct msgtemplate msg;
|
||||
|
||||
while (1) {
|
||||
c = getopt(argc, argv, "dw:r:m:t:p:v:l");
|
||||
if (c < 0)
|
||||
break;
|
||||
|
||||
switch (c) {
|
||||
case 'd':
|
||||
printf("print delayacct stats ON\n");
|
||||
print_delays = 1;
|
||||
break;
|
||||
case 'w':
|
||||
strncpy(logfile, optarg, MAX_FILENAME);
|
||||
printf("write to file %s\n", logfile);
|
||||
write_file = 1;
|
||||
break;
|
||||
case 'r':
|
||||
rcvbufsz = atoi(optarg);
|
||||
printf("receive buf size %d\n", rcvbufsz);
|
||||
if (rcvbufsz < 0)
|
||||
err(1, "Invalid rcv buf size\n");
|
||||
break;
|
||||
case 'm':
|
||||
strncpy(cpumask, optarg, sizeof(cpumask));
|
||||
maskset = 1;
|
||||
printf("cpumask %s maskset %d\n", cpumask, maskset);
|
||||
break;
|
||||
case 't':
|
||||
tid = atoi(optarg);
|
||||
if (!tid)
|
||||
err(1, "Invalid tgid\n");
|
||||
cmd_type = TASKSTATS_CMD_ATTR_TGID;
|
||||
print_delays = 1;
|
||||
break;
|
||||
case 'p':
|
||||
tid = atoi(optarg);
|
||||
if (!tid)
|
||||
err(1, "Invalid pid\n");
|
||||
cmd_type = TASKSTATS_CMD_ATTR_PID;
|
||||
print_delays = 1;
|
||||
break;
|
||||
case 'v':
|
||||
printf("debug on\n");
|
||||
dbg = 1;
|
||||
break;
|
||||
case 'l':
|
||||
printf("listen forever\n");
|
||||
loop = 1;
|
||||
break;
|
||||
default:
|
||||
printf("Unknown option %d\n", c);
|
||||
exit(-1);
|
||||
}
|
||||
}
|
||||
|
||||
if (write_file) {
|
||||
fd = open(logfile, O_WRONLY | O_CREAT | O_TRUNC,
|
||||
S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
|
||||
if (fd == -1) {
|
||||
perror("Cannot open output file\n");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
if ((nl_sd = create_nl_socket(NETLINK_GENERIC)) < 0)
|
||||
err(1, "error creating Netlink socket\n");
|
||||
|
||||
|
||||
mypid = getpid();
|
||||
id = get_family_id(nl_sd);
|
||||
if (!id) {
|
||||
printf("Error getting family id, errno %d", errno);
|
||||
goto err;
|
||||
}
|
||||
PRINTF("family id %d\n", id);
|
||||
|
||||
if (maskset) {
|
||||
rc = send_cmd(nl_sd, id, mypid, TASKSTATS_CMD_GET,
|
||||
TASKSTATS_CMD_ATTR_REGISTER_CPUMASK,
|
||||
&cpumask, sizeof(cpumask));
|
||||
PRINTF("Sent register cpumask, retval %d\n", rc);
|
||||
if (rc < 0) {
|
||||
printf("error sending register cpumask\n");
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
|
||||
if (tid) {
|
||||
rc = send_cmd(nl_sd, id, mypid, TASKSTATS_CMD_GET,
|
||||
cmd_type, &tid, sizeof(__u32));
|
||||
PRINTF("Sent pid/tgid, retval %d\n", rc);
|
||||
if (rc < 0) {
|
||||
printf("error sending tid/tgid cmd\n");
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
||||
do {
|
||||
int i;
|
||||
|
||||
rep_len = recv(nl_sd, &msg, sizeof(msg), 0);
|
||||
PRINTF("received %d bytes\n", rep_len);
|
||||
|
||||
if (rep_len < 0) {
|
||||
printf("nonfatal reply error: errno %d\n", errno);
|
||||
continue;
|
||||
}
|
||||
if (msg.n.nlmsg_type == NLMSG_ERROR ||
|
||||
!NLMSG_OK((&msg.n), rep_len)) {
|
||||
printf("fatal reply error, errno %d\n", errno);
|
||||
goto done;
|
||||
}
|
||||
|
||||
PRINTF("nlmsghdr size=%d, nlmsg_len=%d, rep_len=%d\n",
|
||||
sizeof(struct nlmsghdr), msg.n.nlmsg_len, rep_len);
|
||||
|
||||
|
||||
rep_len = GENLMSG_PAYLOAD(&msg.n);
|
||||
|
||||
na = (struct nlattr *) GENLMSG_DATA(&msg);
|
||||
len = 0;
|
||||
i = 0;
|
||||
while (len < rep_len) {
|
||||
len += NLA_ALIGN(na->nla_len);
|
||||
switch (na->nla_type) {
|
||||
case TASKSTATS_TYPE_AGGR_TGID:
|
||||
/* Fall through */
|
||||
case TASKSTATS_TYPE_AGGR_PID:
|
||||
aggr_len = NLA_PAYLOAD(na->nla_len);
|
||||
len2 = 0;
|
||||
/* For nested attributes, na follows */
|
||||
na = (struct nlattr *) NLA_DATA(na);
|
||||
done = 0;
|
||||
while (len2 < aggr_len) {
|
||||
switch (na->nla_type) {
|
||||
case TASKSTATS_TYPE_PID:
|
||||
rtid = *(int *) NLA_DATA(na);
|
||||
if (print_delays)
|
||||
printf("PID\t%d\n", rtid);
|
||||
break;
|
||||
case TASKSTATS_TYPE_TGID:
|
||||
rtid = *(int *) NLA_DATA(na);
|
||||
if (print_delays)
|
||||
printf("TGID\t%d\n", rtid);
|
||||
break;
|
||||
case TASKSTATS_TYPE_STATS:
|
||||
count++;
|
||||
if (print_delays)
|
||||
print_delayacct((struct taskstats *) NLA_DATA(na));
|
||||
if (fd) {
|
||||
if (write(fd, NLA_DATA(na), na->nla_len) < 0) {
|
||||
err(1,"write error\n");
|
||||
}
|
||||
}
|
||||
if (!loop)
|
||||
goto done;
|
||||
break;
|
||||
default:
|
||||
printf("Unknown nested nla_type %d\n", na->nla_type);
|
||||
break;
|
||||
}
|
||||
len2 += NLA_ALIGN(na->nla_len);
|
||||
na = (struct nlattr *) ((char *) na + len2);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
printf("Unknown nla_type %d\n", na->nla_type);
|
||||
break;
|
||||
}
|
||||
na = (struct nlattr *) (GENLMSG_DATA(&msg) + len);
|
||||
}
|
||||
} while (loop);
|
||||
done:
|
||||
if (maskset) {
|
||||
rc = send_cmd(nl_sd, id, mypid, TASKSTATS_CMD_GET,
|
||||
TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK,
|
||||
&cpumask, sizeof(cpumask));
|
||||
printf("Sent deregister mask, retval %d\n", rc);
|
||||
if (rc < 0)
|
||||
err(rc, "error sending deregister cpumask\n");
|
||||
}
|
||||
err:
|
||||
close(nl_sd);
|
||||
if (fd)
|
||||
close(fd);
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,181 @@
|
|||
Per-task statistics interface
|
||||
-----------------------------
|
||||
|
||||
|
||||
Taskstats is a netlink-based interface for sending per-task and
|
||||
per-process statistics from the kernel to userspace.
|
||||
|
||||
Taskstats was designed for the following benefits:
|
||||
|
||||
- efficiently provide statistics during lifetime of a task and on its exit
|
||||
- unified interface for multiple accounting subsystems
|
||||
- extensibility for use by future accounting patches
|
||||
|
||||
Terminology
|
||||
-----------
|
||||
|
||||
"pid", "tid" and "task" are used interchangeably and refer to the standard
|
||||
Linux task defined by struct task_struct. per-pid stats are the same as
|
||||
per-task stats.
|
||||
|
||||
"tgid", "process" and "thread group" are used interchangeably and refer to the
|
||||
tasks that share an mm_struct i.e. the traditional Unix process. Despite the
|
||||
use of tgid, there is no special treatment for the task that is thread group
|
||||
leader - a process is deemed alive as long as it has any task belonging to it.
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
To get statistics during a task's lifetime, userspace opens a unicast netlink
|
||||
socket (NETLINK_GENERIC family) and sends commands specifying a pid or a tgid.
|
||||
The response contains statistics for a task (if pid is specified) or the sum of
|
||||
statistics for all tasks of the process (if tgid is specified).
|
||||
|
||||
To obtain statistics for tasks which are exiting, the userspace listener
|
||||
sends a register command and specifies a cpumask. Whenever a task exits on
|
||||
one of the cpus in the cpumask, its per-pid statistics are sent to the
|
||||
registered listener. Using cpumasks allows the data received by one listener
|
||||
to be limited and assists in flow control over the netlink interface and is
|
||||
explained in more detail below.
|
||||
|
||||
If the exiting task is the last thread exiting its thread group,
|
||||
an additional record containing the per-tgid stats is also sent to userspace.
|
||||
The latter contains the sum of per-pid stats for all threads in the thread
|
||||
group, both past and present.
|
||||
|
||||
getdelays.c is a simple utility demonstrating usage of the taskstats interface
|
||||
for reporting delay accounting statistics. Users can register cpumasks,
|
||||
send commands and process responses, listen for per-tid/tgid exit data,
|
||||
write the data received to a file and do basic flow control by increasing
|
||||
receive buffer sizes.
|
||||
|
||||
Interface
|
||||
---------
|
||||
|
||||
The user-kernel interface is encapsulated in include/linux/taskstats.h
|
||||
|
||||
To avoid this documentation becoming obsolete as the interface evolves, only
|
||||
an outline of the current version is given. taskstats.h always overrides the
|
||||
description here.
|
||||
|
||||
struct taskstats is the common accounting structure for both per-pid and
|
||||
per-tgid data. It is versioned and can be extended by each accounting subsystem
|
||||
that is added to the kernel. The fields and their semantics are defined in the
|
||||
taskstats.h file.
|
||||
|
||||
The data exchanged between user and kernel space is a netlink message belonging
|
||||
to the NETLINK_GENERIC family and using the netlink attributes interface.
|
||||
The messages are in the format
|
||||
|
||||
+----------+- - -+-------------+-------------------+
|
||||
| nlmsghdr | Pad | genlmsghdr | taskstats payload |
|
||||
+----------+- - -+-------------+-------------------+
|
||||
|
||||
|
||||
The taskstats payload is one of the following three kinds:
|
||||
|
||||
1. Commands: Sent from user to kernel. Commands to get data on
|
||||
a pid/tgid consist of one attribute, of type TASKSTATS_CMD_ATTR_PID/TGID,
|
||||
containing a u32 pid or tgid in the attribute payload. The pid/tgid denotes
|
||||
the task/process for which userspace wants statistics.
|
||||
|
||||
Commands to register/deregister interest in exit data from a set of cpus
|
||||
consist of one attribute, of type
|
||||
TASKSTATS_CMD_ATTR_REGISTER/DEREGISTER_CPUMASK and contain a cpumask in the
|
||||
attribute payload. The cpumask is specified as an ascii string of
|
||||
comma-separated cpu ranges e.g. to listen to exit data from cpus 1,2,3,5,7,8
|
||||
the cpumask would be "1-3,5,7-8". If userspace forgets to deregister interest
|
||||
in cpus before closing the listening socket, the kernel cleans up its interest
|
||||
set over time. However, for the sake of efficiency, an explicit deregistration
|
||||
is advisable.
|
||||
|
||||
2. Response for a command: sent from the kernel in response to a userspace
|
||||
command. The payload is a series of three attributes of type:
|
||||
|
||||
a) TASKSTATS_TYPE_AGGR_PID/TGID : attribute containing no payload but indicates
|
||||
a pid/tgid will be followed by some stats.
|
||||
|
||||
b) TASKSTATS_TYPE_PID/TGID: attribute whose payload is the pid/tgid whose stats
|
||||
is being returned.
|
||||
|
||||
c) TASKSTATS_TYPE_STATS: attribute with a struct taskstsats as payload. The
|
||||
same structure is used for both per-pid and per-tgid stats.
|
||||
|
||||
3. New message sent by kernel whenever a task exits. The payload consists of a
|
||||
series of attributes of the following type:
|
||||
|
||||
a) TASKSTATS_TYPE_AGGR_PID: indicates next two attributes will be pid+stats
|
||||
b) TASKSTATS_TYPE_PID: contains exiting task's pid
|
||||
c) TASKSTATS_TYPE_STATS: contains the exiting task's per-pid stats
|
||||
d) TASKSTATS_TYPE_AGGR_TGID: indicates next two attributes will be tgid+stats
|
||||
e) TASKSTATS_TYPE_TGID: contains tgid of process to which task belongs
|
||||
f) TASKSTATS_TYPE_STATS: contains the per-tgid stats for exiting task's process
|
||||
|
||||
|
||||
per-tgid stats
|
||||
--------------
|
||||
|
||||
Taskstats provides per-process stats, in addition to per-task stats, since
|
||||
resource management is often done at a process granularity and aggregating task
|
||||
stats in userspace alone is inefficient and potentially inaccurate (due to lack
|
||||
of atomicity).
|
||||
|
||||
However, maintaining per-process, in addition to per-task stats, within the
|
||||
kernel has space and time overheads. To address this, the taskstats code
|
||||
accumalates each exiting task's statistics into a process-wide data structure.
|
||||
When the last task of a process exits, the process level data accumalated also
|
||||
gets sent to userspace (along with the per-task data).
|
||||
|
||||
When a user queries to get per-tgid data, the sum of all other live threads in
|
||||
the group is added up and added to the accumalated total for previously exited
|
||||
threads of the same thread group.
|
||||
|
||||
Extending taskstats
|
||||
-------------------
|
||||
|
||||
There are two ways to extend the taskstats interface to export more
|
||||
per-task/process stats as patches to collect them get added to the kernel
|
||||
in future:
|
||||
|
||||
1. Adding more fields to the end of the existing struct taskstats. Backward
|
||||
compatibility is ensured by the version number within the
|
||||
structure. Userspace will use only the fields of the struct that correspond
|
||||
to the version its using.
|
||||
|
||||
2. Defining separate statistic structs and using the netlink attributes
|
||||
interface to return them. Since userspace processes each netlink attribute
|
||||
independently, it can always ignore attributes whose type it does not
|
||||
understand (because it is using an older version of the interface).
|
||||
|
||||
|
||||
Choosing between 1. and 2. is a matter of trading off flexibility and
|
||||
overhead. If only a few fields need to be added, then 1. is the preferable
|
||||
path since the kernel and userspace don't need to incur the overhead of
|
||||
processing new netlink attributes. But if the new fields expand the existing
|
||||
struct too much, requiring disparate userspace accounting utilities to
|
||||
unnecessarily receive large structures whose fields are of no interest, then
|
||||
extending the attributes structure would be worthwhile.
|
||||
|
||||
Flow control for taskstats
|
||||
--------------------------
|
||||
|
||||
When the rate of task exits becomes large, a listener may not be able to keep
|
||||
up with the kernel's rate of sending per-tid/tgid exit data leading to data
|
||||
loss. This possibility gets compounded when the taskstats structure gets
|
||||
extended and the number of cpus grows large.
|
||||
|
||||
To avoid losing statistics, userspace should do one or more of the following:
|
||||
|
||||
- increase the receive buffer sizes for the netlink sockets opened by
|
||||
listeners to receive exit data.
|
||||
|
||||
- create more listeners and reduce the number of cpus being listened to by
|
||||
each listener. In the extreme case, there could be one listener for each cpu.
|
||||
Users may also consider setting the cpu affinity of the listener to the subset
|
||||
of cpus to which it listens, especially if they are listening to just one cpu.
|
||||
|
||||
Despite these measures, if the userspace receives ENOBUFS error messages
|
||||
indicated overflow of receive buffers, it should take measures to handle the
|
||||
loss of data.
|
||||
|
||||
----
|
|
@ -251,16 +251,24 @@ A: This is what you would need in your kernel code to receive notifications.
|
|||
return NOTIFY_OK;
|
||||
}
|
||||
|
||||
static struct notifier_block foobar_cpu_notifer =
|
||||
static struct notifier_block __cpuinitdata foobar_cpu_notifer =
|
||||
{
|
||||
.notifier_call = foobar_cpu_callback,
|
||||
};
|
||||
|
||||
You need to call register_cpu_notifier() from your init function.
|
||||
Init functions could be of two types:
|
||||
1. early init (init function called when only the boot processor is online).
|
||||
2. late init (init function called _after_ all the CPUs are online).
|
||||
|
||||
In your init function,
|
||||
For the first case, you should add the following to your init function
|
||||
|
||||
register_cpu_notifier(&foobar_cpu_notifier);
|
||||
|
||||
For the second case, you should add the following to your init function
|
||||
|
||||
register_hotcpu_notifier(&foobar_cpu_notifier);
|
||||
|
||||
You can fail PREPARE notifiers if something doesn't work to prepare resources.
|
||||
This will stop the activity and send a following CANCELED event back.
|
||||
|
||||
|
|
|
@ -2565,10 +2565,10 @@ Your cooperation is appreciated.
|
|||
243 = /dev/usb/dabusb3 Fourth dabusb device
|
||||
|
||||
180 block USB block devices
|
||||
0 = /dev/uba First USB block device
|
||||
8 = /dev/ubb Second USB block device
|
||||
16 = /dev/ubc Thrid USB block device
|
||||
...
|
||||
0 = /dev/uba First USB block device
|
||||
8 = /dev/ubb Second USB block device
|
||||
16 = /dev/ubc Third USB block device
|
||||
...
|
||||
|
||||
181 char Conrad Electronic parallel port radio clocks
|
||||
0 = /dev/pcfclock0 First Conrad radio clock
|
||||
|
|
|
@ -35,15 +35,14 @@ the vendor should tie the parity status bits to 0 if they do not intend
|
|||
to generate parity. Some vendors do not do this, and thus the parity bit
|
||||
can "float" giving false positives.
|
||||
|
||||
The PCI Parity EDAC device has the ability to "skip" known flaky
|
||||
cards during the parity scan. These are set by the parity "blacklist"
|
||||
interface in the sysfs for PCI Parity. (See the PCI section in the sysfs
|
||||
section below.) There is also a parity "whitelist" which is used as
|
||||
an explicit list of devices to scan, while the blacklist is a list
|
||||
of devices to skip.
|
||||
[There are patches in the kernel queue which will allow for storage of
|
||||
quirks of PCI devices reporting false parity positives. The 2.6.18
|
||||
kernel should have those patches included. When that becomes available,
|
||||
then EDAC will be patched to utilize that information to "skip" such
|
||||
devices.]
|
||||
|
||||
EDAC will have future error detectors that will be added or integrated
|
||||
into EDAC in the following list:
|
||||
EDAC will have future error detectors that will be integrated with
|
||||
EDAC or added to it, in the following list:
|
||||
|
||||
MCE Machine Check Exception
|
||||
MCA Machine Check Architecture
|
||||
|
@ -93,22 +92,24 @@ EDAC lives in the /sys/devices/system/edac directory. Within this directory
|
|||
there currently reside 2 'edac' components:
|
||||
|
||||
mc memory controller(s) system
|
||||
pci PCI status system
|
||||
pci PCI control and status system
|
||||
|
||||
|
||||
============================================================================
|
||||
Memory Controller (mc) Model
|
||||
|
||||
First a background on the memory controller's model abstracted in EDAC.
|
||||
Each mc device controls a set of DIMM memory modules. These modules are
|
||||
Each 'mc' device controls a set of DIMM memory modules. These modules are
|
||||
laid out in a Chip-Select Row (csrowX) and Channel table (chX). There can
|
||||
be multiple csrows and two channels.
|
||||
be multiple csrows and multiple channels.
|
||||
|
||||
Memory controllers allow for several csrows, with 8 csrows being a typical value.
|
||||
Yet, the actual number of csrows depends on the electrical "loading"
|
||||
of a given motherboard, memory controller and DIMM characteristics.
|
||||
|
||||
Dual channels allows for 128 bit data transfers to the CPU from memory.
|
||||
Some newer chipsets allow for more than 2 channels, like Fully Buffered DIMMs
|
||||
(FB-DIMMs). The following example will assume 2 channels:
|
||||
|
||||
|
||||
Channel 0 Channel 1
|
||||
|
@ -234,23 +235,15 @@ Polling period control file:
|
|||
The time period, in milliseconds, for polling for error information.
|
||||
Too small a value wastes resources. Too large a value might delay
|
||||
necessary handling of errors and might loose valuable information for
|
||||
locating the error. 1000 milliseconds (once each second) is about
|
||||
right for most uses.
|
||||
locating the error. 1000 milliseconds (once each second) is the current
|
||||
default. Systems which require all the bandwidth they can get, may
|
||||
increase this.
|
||||
|
||||
LOAD TIME: module/kernel parameter: poll_msec=[0|1]
|
||||
|
||||
RUN TIME: echo "1000" >/sys/devices/system/edac/mc/poll_msec
|
||||
|
||||
|
||||
Module Version read-only attribute file:
|
||||
|
||||
'mc_version'
|
||||
|
||||
The EDAC CORE module's version and compile date are shown here to
|
||||
indicate what EDAC is running.
|
||||
|
||||
|
||||
|
||||
============================================================================
|
||||
'mcX' DIRECTORIES
|
||||
|
||||
|
@ -284,35 +277,6 @@ Seconds since last counter reset control file:
|
|||
|
||||
|
||||
|
||||
DIMM capability attribute file:
|
||||
|
||||
'edac_capability'
|
||||
|
||||
The EDAC (Error Detection and Correction) capabilities/modes of
|
||||
the memory controller hardware.
|
||||
|
||||
|
||||
DIMM Current Capability attribute file:
|
||||
|
||||
'edac_current_capability'
|
||||
|
||||
The EDAC capabilities available with the hardware
|
||||
configuration. This may not be the same as "EDAC capability"
|
||||
if the correct memory is not used. If a memory controller is
|
||||
capable of EDAC, but DIMMs without check bits are in use, then
|
||||
Parity, SECDED, S4ECD4ED capabilities will not be available
|
||||
even though the memory controller might be capable of those
|
||||
modes with the proper memory loaded.
|
||||
|
||||
|
||||
Memory Type supported on this controller attribute file:
|
||||
|
||||
'supported_mem_type'
|
||||
|
||||
This attribute file displays the memory type, usually
|
||||
buffered and unbuffered DIMMs.
|
||||
|
||||
|
||||
Memory Controller name attribute file:
|
||||
|
||||
'mc_name'
|
||||
|
@ -321,16 +285,6 @@ Memory Controller name attribute file:
|
|||
that is being utilized.
|
||||
|
||||
|
||||
Memory Controller Module name attribute file:
|
||||
|
||||
'module_name'
|
||||
|
||||
This attribute file displays the memory controller module name,
|
||||
version and date built. The name of the memory controller
|
||||
hardware - some drivers work with multiple controllers and
|
||||
this field shows which hardware is present.
|
||||
|
||||
|
||||
Total memory managed by this memory controller attribute file:
|
||||
|
||||
'size_mb'
|
||||
|
@ -432,6 +386,9 @@ Memory Type attribute file:
|
|||
|
||||
This attribute file will display what type of memory is currently
|
||||
on this csrow. Normally, either buffered or unbuffered memory.
|
||||
Examples:
|
||||
Registered-DDR
|
||||
Unbuffered-DDR
|
||||
|
||||
|
||||
EDAC Mode of operation attribute file:
|
||||
|
@ -446,8 +403,13 @@ Device type attribute file:
|
|||
|
||||
'dev_type'
|
||||
|
||||
This attribute file will display what type of DIMM device is
|
||||
being utilized. Example: x4
|
||||
This attribute file will display what type of DRAM device is
|
||||
being utilized on this DIMM.
|
||||
Examples:
|
||||
x1
|
||||
x2
|
||||
x4
|
||||
x8
|
||||
|
||||
|
||||
Channel 0 CE Count attribute file:
|
||||
|
@ -522,10 +484,10 @@ SYSTEM LOGGING
|
|||
If logging for UEs and CEs are enabled then system logs will have
|
||||
error notices indicating errors that have been detected:
|
||||
|
||||
MC0: CE page 0x283, offset 0xce0, grain 8, syndrome 0x6ec3, row 0,
|
||||
EDAC MC0: CE page 0x283, offset 0xce0, grain 8, syndrome 0x6ec3, row 0,
|
||||
channel 1 "DIMM_B1": amd76x_edac
|
||||
|
||||
MC0: CE page 0x1e5, offset 0xfb0, grain 8, syndrome 0xb741, row 0,
|
||||
EDAC MC0: CE page 0x1e5, offset 0xfb0, grain 8, syndrome 0xb741, row 0,
|
||||
channel 1 "DIMM_B1": amd76x_edac
|
||||
|
||||
|
||||
|
@ -610,64 +572,4 @@ Parity Count:
|
|||
|
||||
|
||||
|
||||
PCI Device Whitelist:
|
||||
|
||||
'pci_parity_whitelist'
|
||||
|
||||
This control file allows for an explicit list of PCI devices to be
|
||||
scanned for parity errors. Only devices found on this list will
|
||||
be examined. The list is a line of hexadecimal VENDOR and DEVICE
|
||||
ID tuples:
|
||||
|
||||
1022:7450,1434:16a6
|
||||
|
||||
One or more can be inserted, separated by a comma.
|
||||
|
||||
To write the above list doing the following as one command line:
|
||||
|
||||
echo "1022:7450,1434:16a6"
|
||||
> /sys/devices/system/edac/pci/pci_parity_whitelist
|
||||
|
||||
|
||||
|
||||
To display what the whitelist is, simply 'cat' the same file.
|
||||
|
||||
|
||||
PCI Device Blacklist:
|
||||
|
||||
'pci_parity_blacklist'
|
||||
|
||||
This control file allows for a list of PCI devices to be
|
||||
skipped for scanning.
|
||||
The list is a line of hexadecimal VENDOR and DEVICE ID tuples:
|
||||
|
||||
1022:7450,1434:16a6
|
||||
|
||||
One or more can be inserted, separated by a comma.
|
||||
|
||||
To write the above list doing the following as one command line:
|
||||
|
||||
echo "1022:7450,1434:16a6"
|
||||
> /sys/devices/system/edac/pci/pci_parity_blacklist
|
||||
|
||||
|
||||
To display what the whitelist currently contains,
|
||||
simply 'cat' the same file.
|
||||
|
||||
=======================================================================
|
||||
|
||||
PCI Vendor and Devices IDs can be obtained with the lspci command. Using
|
||||
the -n option lspci will display the vendor and device IDs. The system
|
||||
administrator will have to determine which devices should be scanned or
|
||||
skipped.
|
||||
|
||||
|
||||
|
||||
The two lists (white and black) are prioritized. blacklist is the lower
|
||||
priority and will NOT be utilized when a whitelist has been set.
|
||||
Turn OFF a whitelist by an empty echo command:
|
||||
|
||||
echo > /sys/devices/system/edac/pci/pci_parity_whitelist
|
||||
|
||||
and any previous blacklist will be utilized.
|
||||
|
||||
|
|
|
@ -55,14 +55,6 @@ Who: Mauro Carvalho Chehab <mchehab@brturbo.com.br>
|
|||
|
||||
---------------------------
|
||||
|
||||
What: remove EXPORT_SYMBOL(insert_resource)
|
||||
When: April 2006
|
||||
Files: kernel/resource.c
|
||||
Why: No modular usage in the kernel.
|
||||
Who: Adrian Bunk <bunk@stusta.de>
|
||||
|
||||
---------------------------
|
||||
|
||||
What: PCMCIA control ioctl (needed for pcmcia-cs [cardmgr, cardctl])
|
||||
When: November 2005
|
||||
Files: drivers/pcmcia/: pcmcia_ioctl.c
|
||||
|
@ -166,17 +158,6 @@ Who: Arjan van de Ven <arjan@linux.intel.com>
|
|||
|
||||
---------------------------
|
||||
|
||||
What: remove EXPORT_SYMBOL(tasklist_lock)
|
||||
When: August 2006
|
||||
Files: kernel/fork.c
|
||||
Why: tasklist_lock protects the kernel internal task list. Modules have
|
||||
no business looking at it, and all instances in drivers have been due
|
||||
to use of too-lowlevel APIs. Having this symbol exported prevents
|
||||
moving to more scalable locking schemes for the task list.
|
||||
Who: Christoph Hellwig <hch@lst.de>
|
||||
|
||||
---------------------------
|
||||
|
||||
What: mount/umount uevents
|
||||
When: February 2007
|
||||
Why: These events are not correct, and do not properly let userspace know
|
||||
|
@ -266,3 +247,30 @@ Why: The interrupt related SA_* flags are replaced by IRQF_* to move them
|
|||
Who: Thomas Gleixner <tglx@linutronix.de>
|
||||
|
||||
---------------------------
|
||||
|
||||
What: i2c-ite and i2c-algo-ite drivers
|
||||
When: September 2006
|
||||
Why: These drivers never compiled since they were added to the kernel
|
||||
tree 5 years ago. This feature removal can be reevaluated if
|
||||
someone shows interest in the drivers, fixes them and takes over
|
||||
maintenance.
|
||||
http://marc.theaimsgroup.com/?l=linux-mips&m=115040510817448
|
||||
Who: Jean Delvare <khali@linux-fr.org>
|
||||
|
||||
---------------------------
|
||||
|
||||
What: Bridge netfilter deferred IPv4/IPv6 output hook calling
|
||||
When: January 2007
|
||||
Why: The deferred output hooks are a layering violation causing unusual
|
||||
and broken behaviour on bridge devices. Examples of things they
|
||||
break include QoS classifation using the MARK or CLASSIFY targets,
|
||||
the IPsec policy match and connection tracking with VLANs on a
|
||||
bridge. Their only use is to enable bridge output port filtering
|
||||
within iptables with the physdev match, which can also be done by
|
||||
combining iptables and ebtables using netfilter marks. Until it
|
||||
will get removed the hook deferral is disabled by default and is
|
||||
only enabled when needed.
|
||||
|
||||
Who: Patrick McHardy <kaber@trash.net>
|
||||
|
||||
---------------------------
|
||||
|
|
|
@ -142,8 +142,8 @@ see also dquot_operations section.
|
|||
|
||||
--------------------------- file_system_type ---------------------------
|
||||
prototypes:
|
||||
struct int (*get_sb) (struct file_system_type *, int,
|
||||
const char *, void *, struct vfsmount *);
|
||||
int (*get_sb) (struct file_system_type *, int,
|
||||
const char *, void *, struct vfsmount *);
|
||||
void (*kill_sb) (struct super_block *);
|
||||
locking rules:
|
||||
may block BKL
|
||||
|
|
|
@ -113,8 +113,8 @@ members are defined:
|
|||
struct file_system_type {
|
||||
const char *name;
|
||||
int fs_flags;
|
||||
struct int (*get_sb) (struct file_system_type *, int,
|
||||
const char *, void *, struct vfsmount *);
|
||||
int (*get_sb) (struct file_system_type *, int,
|
||||
const char *, void *, struct vfsmount *);
|
||||
void (*kill_sb) (struct super_block *);
|
||||
struct module *owner;
|
||||
struct file_system_type * next;
|
||||
|
|
|
@ -2,13 +2,36 @@ Kernel driver abituguru
|
|||
=======================
|
||||
|
||||
Supported chips:
|
||||
* Abit uGuru (Hardware Monitor part only)
|
||||
* Abit uGuru revision 1-3 (Hardware Monitor part only)
|
||||
Prefix: 'abituguru'
|
||||
Addresses scanned: ISA 0x0E0
|
||||
Datasheet: Not available, this driver is based on reverse engineering.
|
||||
A "Datasheet" has been written based on the reverse engineering it
|
||||
should be available in the same dir as this file under the name
|
||||
abituguru-datasheet.
|
||||
Note:
|
||||
The uGuru is a microcontroller with onboard firmware which programs
|
||||
it to behave as a hwmon IC. There are many different revisions of the
|
||||
firmware and thus effectivly many different revisions of the uGuru.
|
||||
Below is an incomplete list with which revisions are used for which
|
||||
Motherboards:
|
||||
uGuru 1.00 ~ 1.24 (AI7, KV8-MAX3, AN7) (1)
|
||||
uGuru 2.0.0.0 ~ 2.0.4.2 (KV8-PRO)
|
||||
uGuru 2.1.0.0 ~ 2.1.2.8 (AS8, AV8, AA8, AG8, AA8XE, AX8)
|
||||
uGuru 2.2.0.0 ~ 2.2.0.6 (AA8 Fatal1ty)
|
||||
uGuru 2.3.0.0 ~ 2.3.0.9 (AN8)
|
||||
uGuru 3.0.0.0 ~ 3.0.1.2 (AW8, AL8, NI8)
|
||||
uGuru 4.xxxxx? (AT8 32X) (2)
|
||||
1) For revisions 2 and 3 uGuru's the driver can autodetect the
|
||||
sensortype (Volt or Temp) for bank1 sensors, for revision 1 uGuru's
|
||||
this doesnot always work. For these uGuru's the autodection can
|
||||
be overriden with the bank1_types module param. For all 3 known
|
||||
revison 1 motherboards the correct use of this param is:
|
||||
bank1_types=1,1,0,0,0,0,0,2,0,0,0,0,2,0,0,1
|
||||
You may also need to specify the fan_sensors option for these boards
|
||||
fan_sensors=5
|
||||
2) The current version of the abituguru driver is known to NOT work
|
||||
on these Motherboards
|
||||
|
||||
Authors:
|
||||
Hans de Goede <j.w.r.degoede@hhs.nl>,
|
||||
|
@ -22,6 +45,11 @@ Module Parameters
|
|||
* force: bool Force detection. Note this parameter only causes the
|
||||
detection to be skipped, if the uGuru can't be read
|
||||
the module initialization (insmod) will still fail.
|
||||
* bank1_types: int[] Bank1 sensortype autodetection override:
|
||||
-1 autodetect (default)
|
||||
0 volt sensor
|
||||
1 temp sensor
|
||||
2 not connected
|
||||
* fan_sensors: int Tell the driver how many fan speed sensors there are
|
||||
on your motherboard. Default: 0 (autodetect).
|
||||
* pwms: int Tell the driver how many fan speed controls (fan
|
||||
|
@ -29,7 +57,7 @@ Module Parameters
|
|||
* verbose: int How verbose should the driver be? (0-3):
|
||||
0 normal output
|
||||
1 + verbose error reporting
|
||||
2 + sensors type probing info\n"
|
||||
2 + sensors type probing info (default)
|
||||
3 + retryable error reporting
|
||||
Default: 2 (the driver is still in the testing phase)
|
||||
|
||||
|
|
|
@ -42,8 +42,8 @@ I suspect that this driver could be made to work for the following SiS
|
|||
chipsets as well: 635, and 635T. If anyone owns a board with those chips
|
||||
AND is willing to risk crashing & burning an otherwise well-behaved kernel
|
||||
in the name of progress... please contact me at <mhoffman@lightlink.com> or
|
||||
via the project's mailing list: <lm-sensors@lm-sensors.org>. Please
|
||||
send bug reports and/or success stories as well.
|
||||
via the project's mailing list: <i2c@lm-sensors.org>. Please send bug
|
||||
reports and/or success stories as well.
|
||||
|
||||
|
||||
TO DOs
|
||||
|
|
|
@ -72,6 +72,22 @@ initrd adds the following new options:
|
|||
initrd is mounted as root, and the normal boot procedure is followed,
|
||||
with the RAM disk still mounted as root.
|
||||
|
||||
Compressed cpio images
|
||||
----------------------
|
||||
|
||||
Recent kernels have support for populating a ramdisk from a compressed cpio
|
||||
archive, on such systems, the creation of a ramdisk image doesn't need to
|
||||
involve special block devices or loopbacks, you merely create a directory on
|
||||
disk with the desired initrd content, cd to that directory, and run (as an
|
||||
example):
|
||||
|
||||
find . | cpio --quiet -c -o | gzip -9 -n > /boot/imagefile.img
|
||||
|
||||
Examining the contents of an existing image file is just as simple:
|
||||
|
||||
mkdir /tmp/imagefile
|
||||
cd /tmp/imagefile
|
||||
gzip -cd /boot/imagefile.img | cpio -imd --quiet
|
||||
|
||||
Installation
|
||||
------------
|
||||
|
|
|
@ -407,6 +407,20 @@ more details, with real examples.
|
|||
The second argument is optional, and if supplied will be used
|
||||
if first argument is not supported.
|
||||
|
||||
ld-option
|
||||
ld-option is used to check if $(CC) when used to link object files
|
||||
supports the given option. An optional second option may be
|
||||
specified if first option are not supported.
|
||||
|
||||
Example:
|
||||
#arch/i386/kernel/Makefile
|
||||
vsyscall-flags += $(call ld-option, -Wl$(comma)--hash-style=sysv)
|
||||
|
||||
In the above example vsyscall-flags will be assigned the option
|
||||
-Wl$(comma)--hash-style=sysv if it is supported by $(CC).
|
||||
The second argument is optional, and if supplied will be used
|
||||
if first argument is not supported.
|
||||
|
||||
cc-option
|
||||
cc-option is used to check if $(CC) support a given option, and not
|
||||
supported to use an optional second option.
|
||||
|
|
|
@ -1029,6 +1029,8 @@ running once the system is up.
|
|||
|
||||
nocache [ARM]
|
||||
|
||||
nodelayacct [KNL] Disable per-task delay accounting
|
||||
|
||||
nodisconnect [HW,SCSI,M68K] Disables SCSI disconnects.
|
||||
|
||||
noexec [IA-64]
|
||||
|
|
|
@ -1015,10 +1015,9 @@ CPU from reordering them.
|
|||
There are some more advanced barrier functions:
|
||||
|
||||
(*) set_mb(var, value)
|
||||
(*) set_wmb(var, value)
|
||||
|
||||
These assign the value to the variable and then insert at least a write
|
||||
barrier after it, depending on the function. They aren't guaranteed to
|
||||
This assigns the value to the variable and then inserts at least a write
|
||||
barrier after it, depending on the function. It isn't guaranteed to
|
||||
insert anything more than a compiler barrier in a UP compilation.
|
||||
|
||||
|
||||
|
|
|
@ -65,7 +65,7 @@ the following functions or values:
|
|||
1. (optional) set up RTC routines
|
||||
2. (optional) calibrate and set the mips_counter_frequency
|
||||
|
||||
b) board_timer_setup - a function pointer. Invoked at the end of time_init()
|
||||
b) plat_timer_setup - a function pointer. Invoked at the end of time_init()
|
||||
1. (optional) over-ride any decisions made in time_init()
|
||||
2. set up the irqaction for timer interrupt.
|
||||
3. enable the timer interrupt
|
||||
|
@ -116,19 +116,17 @@ Step 2: the machine setup() function
|
|||
|
||||
If you supply board_time_init(), set the function poointer.
|
||||
|
||||
Set the function pointer board_timer_setup() (mandatory)
|
||||
|
||||
|
||||
Step 3: implement rtc routines, board_time_init() and board_timer_setup()
|
||||
Step 3: implement rtc routines, board_time_init() and plat_timer_setup()
|
||||
if needed.
|
||||
|
||||
board_time_init() -
|
||||
board_time_init() -
|
||||
a) (optional) set up RTC routines,
|
||||
b) (optional) calibrate and set the mips_counter_frequency
|
||||
(only needed if you intended to use fixed_rate_gettimeoffset
|
||||
or use cpu counter as timer interrupt source)
|
||||
|
||||
board_timer_setup() -
|
||||
plat_timer_setup() -
|
||||
a) (optional) over-write any choices made above by time_init().
|
||||
b) machine specific code should setup the timer irqaction.
|
||||
c) enable the timer interrupt
|
||||
|
|
|
@ -4,15 +4,16 @@ Mounting the root filesystem via NFS (nfsroot)
|
|||
Written 1996 by Gero Kuhlmann <gero@gkminix.han.de>
|
||||
Updated 1997 by Martin Mares <mj@atrey.karlin.mff.cuni.cz>
|
||||
Updated 2006 by Nico Schottelius <nico-kernel-nfsroot@schottelius.org>
|
||||
Updated 2006 by Horms <horms@verge.net.au>
|
||||
|
||||
|
||||
|
||||
If you want to use a diskless system, as an X-terminal or printer
|
||||
server for example, you have to put your root filesystem onto a
|
||||
non-disk device. This can either be a ramdisk (see initrd.txt in
|
||||
this directory for further information) or a filesystem mounted
|
||||
via NFS. The following text describes on how to use NFS for the
|
||||
root filesystem. For the rest of this text 'client' means the
|
||||
In order to use a diskless system, such as an X-terminal or printer server
|
||||
for example, it is necessary for the root filesystem to be present on a
|
||||
non-disk device. This may be an initramfs (see Documentation/filesystems/
|
||||
ramfs-rootfs-initramfs.txt), a ramdisk (see Documenation/initrd.txt) or a
|
||||
filesystem mounted via NFS. The following text describes on how to use NFS
|
||||
for the root filesystem. For the rest of this text 'client' means the
|
||||
diskless system, and 'server' means the NFS server.
|
||||
|
||||
|
||||
|
@ -21,11 +22,13 @@ diskless system, and 'server' means the NFS server.
|
|||
1.) Enabling nfsroot capabilities
|
||||
-----------------------------
|
||||
|
||||
In order to use nfsroot you have to select support for NFS during
|
||||
kernel configuration. Note that NFS cannot be loaded as a module
|
||||
in this case. The configuration script will then ask you whether
|
||||
you want to use nfsroot, and if yes what kind of auto configuration
|
||||
system you want to use. Selecting both BOOTP and RARP is safe.
|
||||
In order to use nfsroot, NFS client support needs to be selected as
|
||||
built-in during configuration. Once this has been selected, the nfsroot
|
||||
option will become available, which should also be selected.
|
||||
|
||||
In the networking options, kernel level autoconfiguration can be selected,
|
||||
along with the types of autoconfiguration to support. Selecting all of
|
||||
DHCP, BOOTP and RARP is safe.
|
||||
|
||||
|
||||
|
||||
|
@ -33,11 +36,10 @@ system you want to use. Selecting both BOOTP and RARP is safe.
|
|||
2.) Kernel command line
|
||||
-------------------
|
||||
|
||||
When the kernel has been loaded by a boot loader (either by loadlin,
|
||||
LILO or a network boot program) it has to be told what root fs device
|
||||
to use, and where to find the server and the name of the directory
|
||||
on the server to mount as root. This can be established by a couple
|
||||
of kernel command line parameters:
|
||||
When the kernel has been loaded by a boot loader (see below) it needs to be
|
||||
told what root fs device to use. And in the case of nfsroot, where to find
|
||||
both the server and the name of the directory on the server to mount as root.
|
||||
This can be established using the following kernel command line parameters:
|
||||
|
||||
|
||||
root=/dev/nfs
|
||||
|
@ -49,23 +51,21 @@ root=/dev/nfs
|
|||
|
||||
nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
|
||||
|
||||
If the `nfsroot' parameter is NOT given on the command line, the default
|
||||
"/tftpboot/%s" will be used.
|
||||
If the `nfsroot' parameter is NOT given on the command line,
|
||||
the default "/tftpboot/%s" will be used.
|
||||
|
||||
<server-ip> Specifies the IP address of the NFS server. If this field
|
||||
is not given, the default address as determined by the
|
||||
`ip' variable (see below) is used. One use of this
|
||||
parameter is for example to allow using different servers
|
||||
for RARP and NFS. Usually you can leave this blank.
|
||||
<server-ip> Specifies the IP address of the NFS server.
|
||||
The default address is determined by the `ip' parameter
|
||||
(see below). This parameter allows the use of different
|
||||
servers for IP autoconfiguration and NFS.
|
||||
|
||||
<root-dir> Name of the directory on the server to mount as root. If
|
||||
there is a "%s" token in the string, the token will be
|
||||
replaced by the ASCII-representation of the client's IP
|
||||
address.
|
||||
<root-dir> Name of the directory on the server to mount as root.
|
||||
If there is a "%s" token in the string, it will be
|
||||
replaced by the ASCII-representation of the client's
|
||||
IP address.
|
||||
|
||||
<nfs-options> Standard NFS options. All options are separated by commas.
|
||||
If the options field is not given, the following defaults
|
||||
will be used:
|
||||
The following defaults are used:
|
||||
port = as given by server portmap daemon
|
||||
rsize = 1024
|
||||
wsize = 1024
|
||||
|
@ -81,129 +81,174 @@ nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
|
|||
ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>
|
||||
|
||||
This parameter tells the kernel how to configure IP addresses of devices
|
||||
and also how to set up the IP routing table. It was originally called `nfsaddrs',
|
||||
but now the boot-time IP configuration works independently of NFS, so it
|
||||
was renamed to `ip' and the old name remained as an alias for compatibility
|
||||
reasons.
|
||||
and also how to set up the IP routing table. It was originally called
|
||||
`nfsaddrs', but now the boot-time IP configuration works independently of
|
||||
NFS, so it was renamed to `ip' and the old name remained as an alias for
|
||||
compatibility reasons.
|
||||
|
||||
If this parameter is missing from the kernel command line, all fields are
|
||||
assumed to be empty, and the defaults mentioned below apply. In general
|
||||
this means that the kernel tries to configure everything using both
|
||||
RARP and BOOTP (depending on what has been enabled during kernel confi-
|
||||
guration, and if both what protocol answer got in first).
|
||||
|
||||
<client-ip> IP address of the client. If empty, the address will either
|
||||
be determined by RARP or BOOTP. What protocol is used de-
|
||||
pends on what has been enabled during kernel configuration
|
||||
and on the <autoconf> parameter. If this parameter is not
|
||||
empty, neither RARP nor BOOTP will be used.
|
||||
|
||||
<server-ip> IP address of the NFS server. If RARP is used to determine
|
||||
the client address and this parameter is NOT empty only
|
||||
replies from the specified server are accepted. To use
|
||||
different RARP and NFS server, specify your RARP server
|
||||
here (or leave it blank), and specify your NFS server in
|
||||
the `nfsroot' parameter (see above). If this entry is blank
|
||||
the address of the server is used which answered the RARP
|
||||
or BOOTP request.
|
||||
|
||||
<gw-ip> IP address of a gateway if the server is on a different
|
||||
subnet. If this entry is empty no gateway is used and the
|
||||
server is assumed to be on the local network, unless a
|
||||
value has been received by BOOTP.
|
||||
|
||||
<netmask> Netmask for local network interface. If this is empty,
|
||||
the netmask is derived from the client IP address assuming
|
||||
classful addressing, unless overridden in BOOTP reply.
|
||||
|
||||
<hostname> Name of the client. If empty, the client IP address is
|
||||
used in ASCII notation, or the value received by BOOTP.
|
||||
|
||||
<device> Name of network device to use. If this is empty, all
|
||||
devices are used for RARP and BOOTP requests, and the
|
||||
first one we receive a reply on is configured. If you have
|
||||
only one device, you can safely leave this blank.
|
||||
|
||||
<autoconf> Method to use for autoconfiguration. If this is either
|
||||
'rarp' or 'bootp', the specified protocol is used.
|
||||
If the value is 'both' or empty, both protocols are used
|
||||
so far as they have been enabled during kernel configura-
|
||||
tion. 'off' means no autoconfiguration.
|
||||
this means that the kernel tries to configure everything using
|
||||
autoconfiguration.
|
||||
|
||||
The <autoconf> parameter can appear alone as the value to the `ip'
|
||||
parameter (without all the ':' characters before) in which case auto-
|
||||
configuration is used.
|
||||
|
||||
<client-ip> IP address of the client.
|
||||
|
||||
Default: Determined using autoconfiguration.
|
||||
|
||||
<server-ip> IP address of the NFS server. If RARP is used to determine
|
||||
the client address and this parameter is NOT empty only
|
||||
replies from the specified server are accepted.
|
||||
|
||||
Only required for for NFS root. That is autoconfiguration
|
||||
will not be triggered if it is missing and NFS root is not
|
||||
in operation.
|
||||
|
||||
Default: Determined using autoconfiguration.
|
||||
The address of the autoconfiguration server is used.
|
||||
|
||||
<gw-ip> IP address of a gateway if the server is on a different subnet.
|
||||
|
||||
Default: Determined using autoconfiguration.
|
||||
|
||||
<netmask> Netmask for local network interface. If unspecified
|
||||
the netmask is derived from the client IP address assuming
|
||||
classful addressing.
|
||||
|
||||
Default: Determined using autoconfiguration.
|
||||
|
||||
<hostname> Name of the client. May be supplied by autoconfiguration,
|
||||
but its absence will not trigger autoconfiguration.
|
||||
|
||||
Default: Client IP address is used in ASCII notation.
|
||||
|
||||
<device> Name of network device to use.
|
||||
|
||||
Default: If the host only has one device, it is used.
|
||||
Otherwise the device is determined using
|
||||
autoconfiguration. This is done by sending
|
||||
autoconfiguration requests out of all devices,
|
||||
and using the device that received the first reply.
|
||||
|
||||
<autoconf> Method to use for autoconfiguration. In the case of options
|
||||
which specify multiple autoconfiguration protocols,
|
||||
requests are sent using all protocols, and the first one
|
||||
to reply is used.
|
||||
|
||||
Only autoconfiguration protocols that have been compiled
|
||||
into the kernel will be used, regardless of the value of
|
||||
this option.
|
||||
|
||||
off or none: don't use autoconfiguration (default)
|
||||
on or any: use any protocol available in the kernel
|
||||
dhcp: use DHCP
|
||||
bootp: use BOOTP
|
||||
rarp: use RARP
|
||||
both: use both BOOTP and RARP but not DHCP
|
||||
(old option kept for backwards compatibility)
|
||||
|
||||
Default: any
|
||||
|
||||
|
||||
|
||||
3.) Kernel loader
|
||||
-------------
|
||||
|
||||
To get the kernel into memory different approaches can be used. They
|
||||
depend on what facilities are available:
|
||||
3.) Boot Loader
|
||||
----------
|
||||
|
||||
To get the kernel into memory different approaches can be used.
|
||||
They depend on various facilities being available:
|
||||
|
||||
|
||||
3.1) Writing the kernel onto a floppy using dd:
|
||||
As always you can just write the kernel onto a floppy using dd,
|
||||
but then it's not possible to use kernel command lines at all.
|
||||
To substitute the 'root=' parameter, create a dummy device on any
|
||||
linux system with major number 0 and minor number 255 using mknod:
|
||||
3.1) Booting from a floppy using syslinux
|
||||
|
||||
mknod /dev/boot255 c 0 255
|
||||
When building kernels, an easy way to create a boot floppy that uses
|
||||
syslinux is to use the zdisk or bzdisk make targets which use
|
||||
and bzimage images respectively. Both targets accept the
|
||||
FDARGS parameter which can be used to set the kernel command line.
|
||||
|
||||
Then copy the kernel zImage file onto a floppy using dd:
|
||||
e.g.
|
||||
make bzdisk FDARGS="root=/dev/nfs"
|
||||
|
||||
dd if=/usr/src/linux/arch/i386/boot/zImage of=/dev/fd0
|
||||
Note that the user running this command will need to have
|
||||
access to the floppy drive device, /dev/fd0
|
||||
|
||||
And finally use rdev to set the root device:
|
||||
For more information on syslinux, including how to create bootdisks
|
||||
for prebuilt kernels, see http://syslinux.zytor.com/
|
||||
|
||||
rdev /dev/fd0 /dev/boot255
|
||||
N.B: Previously it was possible to write a kernel directly to
|
||||
a floppy using dd, configure the boot device using rdev, and
|
||||
boot using the resulting floppy. Linux no longer supports this
|
||||
method of booting.
|
||||
|
||||
You can then remove the dummy device /dev/boot255 again. There
|
||||
is no real device available for it.
|
||||
The other two kernel command line parameters cannot be substi-
|
||||
tuted with rdev. Therefore, using this method the kernel will
|
||||
by default use RARP and/or BOOTP, and if it gets an answer via
|
||||
RARP will mount the directory /tftpboot/<client-ip>/ as its
|
||||
root. If it got a BOOTP answer the directory name in that answer
|
||||
is used.
|
||||
3.2) Booting from a cdrom using isolinux
|
||||
|
||||
When building kernels, an easy way to create a bootable cdrom that
|
||||
uses isolinux is to use the isoimage target which uses a bzimage
|
||||
image. Like zdisk and bzdisk, this target accepts the FDARGS
|
||||
parameter which can be used to set the kernel command line.
|
||||
|
||||
e.g.
|
||||
make isoimage FDARGS="root=/dev/nfs"
|
||||
|
||||
The resulting iso image will be arch/<ARCH>/boot/image.iso
|
||||
This can be written to a cdrom using a variety of tools including
|
||||
cdrecord.
|
||||
|
||||
e.g.
|
||||
cdrecord dev=ATAPI:1,0,0 arch/i386/boot/image.iso
|
||||
|
||||
For more information on isolinux, including how to create bootdisks
|
||||
for prebuilt kernels, see http://syslinux.zytor.com/
|
||||
|
||||
3.2) Using LILO
|
||||
When using LILO you can specify all necessary command line
|
||||
parameters with the 'append=' command in the LILO configuration
|
||||
file. However, to use the 'root=' command you also need to
|
||||
set up a dummy device as described in 3.1 above. For how to use
|
||||
LILO and its 'append=' command please refer to the LILO
|
||||
documentation.
|
||||
When using LILO all the necessary command line parameters may be
|
||||
specified using the 'append=' directive in the LILO configuration
|
||||
file.
|
||||
|
||||
However, to use the 'root=' directive you also need to create
|
||||
a dummy root device, which may be removed after LILO is run.
|
||||
|
||||
mknod /dev/boot255 c 0 255
|
||||
|
||||
For information on configuring LILO, please refer to its documentation.
|
||||
|
||||
3.3) Using GRUB
|
||||
When you use GRUB, you simply append the parameters after the kernel
|
||||
specification: "kernel <kernel> <parameters>" (without the quotes).
|
||||
When using GRUB, kernel parameter are simply appended after the kernel
|
||||
specification: kernel <kernel> <parameters>
|
||||
|
||||
3.4) Using loadlin
|
||||
When you want to boot Linux from a DOS command prompt without
|
||||
having a local hard disk to mount as root, you can use loadlin.
|
||||
I was told that it works, but haven't used it myself yet. In
|
||||
general you should be able to create a kernel command line simi-
|
||||
lar to how LILO is doing it. Please refer to the loadlin docu-
|
||||
mentation for further information.
|
||||
loadlin may be used to boot Linux from a DOS command prompt without
|
||||
requiring a local hard disk to mount as root. This has not been
|
||||
thoroughly tested by the authors of this document, but in general
|
||||
it should be possible configure the kernel command line similarly
|
||||
to the configuration of LILO.
|
||||
|
||||
Please refer to the loadlin documentation for further information.
|
||||
|
||||
3.5) Using a boot ROM
|
||||
This is probably the most elegant way of booting a diskless
|
||||
client. With a boot ROM the kernel gets loaded using the TFTP
|
||||
protocol. As far as I know, no commercial boot ROMs yet
|
||||
support booting Linux over the network, but there are two
|
||||
free implementations of a boot ROM available on sunsite.unc.edu
|
||||
and its mirrors. They are called 'netboot-nfs' and 'etherboot'.
|
||||
Both contain everything you need to boot a diskless Linux client.
|
||||
This is probably the most elegant way of booting a diskless client.
|
||||
With a boot ROM the kernel is loaded using the TFTP protocol. The
|
||||
authors of this document are not aware of any no commercial boot
|
||||
ROMs that support booting Linux over the network. However, there
|
||||
are two free implementations of a boot ROM, netboot-nfs and
|
||||
etherboot, both of which are available on sunsite.unc.edu, and both
|
||||
of which contain everything you need to boot a diskless Linux client.
|
||||
|
||||
3.6) Using pxelinux
|
||||
Using pxelinux you specify the kernel you built with
|
||||
Pxelinux may be used to boot linux using the PXE boot loader
|
||||
which is present on many modern network cards.
|
||||
|
||||
When using pxelinux, the kernel image is specified using
|
||||
"kernel <relative-path-below /tftpboot>". The nfsroot parameters
|
||||
are passed to the kernel by adding them to the "append" line.
|
||||
You may perhaps also want to fine tune the console output,
|
||||
see Documentation/serial-console.txt for serial console help.
|
||||
It is common to use serial console in conjunction with pxeliunx,
|
||||
see Documentation/serial-console.txt for more information.
|
||||
|
||||
For more information on isolinux, including how to create bootdisks
|
||||
for prebuilt kernels, see http://syslinux.zytor.com/
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ Contents:
|
|||
1) Overview
|
||||
2) Kernel Command Line Parameters
|
||||
3) Using "rdev -r"
|
||||
4) An Example of Creating a Compressed RAM Disk
|
||||
4) An Example of Creating a Compressed RAM Disk
|
||||
|
||||
|
||||
1) Overview
|
||||
|
@ -34,7 +34,7 @@ make it clearer. The original "ramdisk=<ram_size>" has been kept around for
|
|||
compatibility reasons, but it may be removed in the future.
|
||||
|
||||
The new RAM disk also has the ability to load compressed RAM disk images,
|
||||
allowing one to squeeze more programs onto an average installation or
|
||||
allowing one to squeeze more programs onto an average installation or
|
||||
rescue floppy disk.
|
||||
|
||||
|
||||
|
@ -51,7 +51,7 @@ default is 4096 (4 MB) (8192 (8 MB) on S390).
|
|||
===================
|
||||
|
||||
This parameter tells the RAM disk driver how many bytes to use per block. The
|
||||
default is 512.
|
||||
default is 1024 (BLOCK_SIZE).
|
||||
|
||||
|
||||
3) Using "rdev -r"
|
||||
|
@ -70,7 +70,7 @@ These numbers are no magical secrets, as seen below:
|
|||
./arch/i386/kernel/setup.c:#define RAMDISK_PROMPT_FLAG 0x8000
|
||||
./arch/i386/kernel/setup.c:#define RAMDISK_LOAD_FLAG 0x4000
|
||||
|
||||
Consider a typical two floppy disk setup, where you will have the
|
||||
Consider a typical two floppy disk setup, where you will have the
|
||||
kernel on disk one, and have already put a RAM disk image onto disk #2.
|
||||
|
||||
Hence you want to set bits 0 to 13 as 0, meaning that your RAM disk
|
||||
|
@ -97,12 +97,12 @@ Since the default start = 0 and the default prompt = 1, you could use:
|
|||
append = "load_ramdisk=1"
|
||||
|
||||
|
||||
4) An Example of Creating a Compressed RAM Disk
|
||||
4) An Example of Creating a Compressed RAM Disk
|
||||
----------------------------------------------
|
||||
|
||||
To create a RAM disk image, you will need a spare block device to
|
||||
construct it on. This can be the RAM disk device itself, or an
|
||||
unused disk partition (such as an unmounted swap partition). For this
|
||||
unused disk partition (such as an unmounted swap partition). For this
|
||||
example, we will use the RAM disk device, "/dev/ram0".
|
||||
|
||||
Note: This technique should not be done on a machine with less than 8 MB
|
||||
|
|
|
@ -1172,7 +1172,7 @@
|
|||
}
|
||||
|
||||
/* PCI IDs */
|
||||
static struct pci_device_id snd_mychip_ids[] __devinitdata = {
|
||||
static struct pci_device_id snd_mychip_ids[] = {
|
||||
{ PCI_VENDOR_ID_FOO, PCI_DEVICE_ID_BAR,
|
||||
PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, },
|
||||
....
|
||||
|
@ -1565,7 +1565,7 @@
|
|||
<informalexample>
|
||||
<programlisting>
|
||||
<![CDATA[
|
||||
static struct pci_device_id snd_mychip_ids[] __devinitdata = {
|
||||
static struct pci_device_id snd_mychip_ids[] = {
|
||||
{ PCI_VENDOR_ID_FOO, PCI_DEVICE_ID_BAR,
|
||||
PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, },
|
||||
....
|
||||
|
|
|
@ -399,10 +399,10 @@ REINER SCT cyberJack pinpad/e-com USB chipcard reader
|
|||
|
||||
Prolific PL2303 Driver
|
||||
|
||||
This driver support any device that has the PL2303 chip from Prolific
|
||||
This driver supports any device that has the PL2303 chip from Prolific
|
||||
in it. This includes a number of single port USB to serial
|
||||
converters and USB GPS devices. Devices from Aten (the UC-232) and
|
||||
IO-Data work with this driver.
|
||||
IO-Data work with this driver, as does the DCU-11 mobile-phone cable.
|
||||
|
||||
For any questions or problems with this driver, please contact Greg
|
||||
Kroah-Hartman at greg@kroah.com
|
||||
|
|
|
@ -238,6 +238,13 @@ Debugging
|
|||
pagefaulttrace Dump all page faults. Only useful for extreme debugging
|
||||
and will create a lot of output.
|
||||
|
||||
call_trace=[old|both|newfallback|new]
|
||||
old: use old inexact backtracer
|
||||
new: use new exact dwarf2 unwinder
|
||||
both: print entries from both
|
||||
newfallback: use new unwinder but fall back to old if it gets
|
||||
stuck (default)
|
||||
|
||||
Misc
|
||||
|
||||
noreplacement Don't replace instructions with more appropriate ones
|
||||
|
|
68
MAINTAINERS
68
MAINTAINERS
|
@ -274,7 +274,7 @@ S: Maintained
|
|||
ALI1563 I2C DRIVER
|
||||
P: Rudolf Marek
|
||||
M: r.marek@sh.cvut.cz
|
||||
L: lm-sensors@lm-sensors.org
|
||||
L: i2c@lm-sensors.org
|
||||
S: Maintained
|
||||
|
||||
ALPHA PORT
|
||||
|
@ -601,6 +601,15 @@ W: http://linuxtv.org
|
|||
T: git kernel.org:/pub/scm/linux/kernel/git/mchehab/v4l-dvb.git
|
||||
S: Maintained
|
||||
|
||||
CALGARY x86-64 IOMMU
|
||||
P: Muli Ben-Yehuda
|
||||
M: muli@il.ibm.com
|
||||
P: Jon D. Mason
|
||||
M: jdmason@us.ibm.com
|
||||
L: linux-kernel@vger.kernel.org
|
||||
L: discuss@x86-64.org
|
||||
S: Maintained
|
||||
|
||||
COMMON INTERNET FILE SYSTEM (CIFS)
|
||||
P: Steve French
|
||||
M: sfrench@samba.org
|
||||
|
@ -762,6 +771,7 @@ M: aliakc@web.de
|
|||
P: Jamie Lenehan
|
||||
M: lenehan@twibble.org
|
||||
W: http://twibble.org/dist/dc395x/
|
||||
L: dc395x@twibble.org
|
||||
L: http://lists.twibble.org/mailman/listinfo/dc395x/
|
||||
S: Maintained
|
||||
|
||||
|
@ -958,6 +968,10 @@ P: Andrey V. Savochkin
|
|||
M: saw@saw.sw.com.sg
|
||||
S: Maintained
|
||||
|
||||
EFS FILESYSTEM
|
||||
W: http://aeschi.ch.eu.org/efs/
|
||||
S: Orphan
|
||||
|
||||
EMU10K1 SOUND DRIVER
|
||||
P: James Courtier-Dutton
|
||||
M: James@superbug.demon.co.uk
|
||||
|
@ -1240,7 +1254,7 @@ S: Maintained
|
|||
I2C SUBSYSTEM
|
||||
P: Jean Delvare
|
||||
M: khali@linux-fr.org
|
||||
L: lm-sensors@lm-sensors.org
|
||||
L: i2c@lm-sensors.org
|
||||
W: http://www.lm-sensors.nu/
|
||||
T: quilt kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/
|
||||
S: Maintained
|
||||
|
@ -1492,6 +1506,7 @@ P: Yi Zhu
|
|||
M: yi.zhu@intel.com
|
||||
P: James Ketrenos
|
||||
M: jketreno@linux.intel.com
|
||||
L: ipw2100-devel@lists.sourceforge.net
|
||||
L: http://lists.sourceforge.net/mailman/listinfo/ipw2100-devel
|
||||
W: http://ipw2100.sourceforge.net
|
||||
S: Supported
|
||||
|
@ -1501,6 +1516,7 @@ P: Yi Zhu
|
|||
M: yi.zhu@intel.com
|
||||
P: James Ketrenos
|
||||
M: jketreno@linux.intel.com
|
||||
L: ipw2100-devel@lists.sourceforge.net
|
||||
L: http://lists.sourceforge.net/mailman/listinfo/ipw2100-devel
|
||||
W: http://ipw2200.sourceforge.net
|
||||
S: Supported
|
||||
|
@ -1586,7 +1602,7 @@ W: http://jfs.sourceforge.net/
|
|||
T: git kernel.org:/pub/scm/linux/kernel/git/shaggy/jfs-2.6.git
|
||||
S: Supported
|
||||
|
||||
JOURNALLING LAYER FOR BLOCK DEVICS (JBD)
|
||||
JOURNALLING LAYER FOR BLOCK DEVICES (JBD)
|
||||
P: Stephen Tweedie, Andrew Morton
|
||||
M: sct@redhat.com, akpm@osdl.org
|
||||
L: ext2-devel@lists.sourceforge.net
|
||||
|
@ -1630,9 +1646,8 @@ S: Maintained
|
|||
|
||||
KERNEL JANITORS
|
||||
P: Several
|
||||
L: kernel-janitors@osdl.org
|
||||
L: kernel-janitors@lists.osdl.org
|
||||
W: http://www.kerneljanitors.org/
|
||||
W: http://sf.net/projects/kernel-janitor/
|
||||
S: Maintained
|
||||
|
||||
KERNEL NFSD
|
||||
|
@ -1664,10 +1679,8 @@ L: linux-kernel@vger.kernel.org
|
|||
S: Maintained
|
||||
|
||||
LAPB module
|
||||
P: Henner Eisen
|
||||
M: eis@baty.hanse.de
|
||||
L: linux-x25@vger.kernel.org
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
|
||||
LASI 53c700 driver for PARISC
|
||||
P: James E.J. Bottomley
|
||||
|
@ -1872,6 +1885,12 @@ S: linux-scsi@vger.kernel.org
|
|||
W: http://megaraid.lsilogic.com
|
||||
S: Maintained
|
||||
|
||||
MEMORY MANAGEMENT
|
||||
L: linux-mm@kvack.org
|
||||
L: linux-kernel@vger.kernel.org
|
||||
W: http://www.linux-mm.org
|
||||
S: Maintained
|
||||
|
||||
MEMORY TECHNOLOGY DEVICES (MTD)
|
||||
P: David Woodhouse
|
||||
M: dwmw2@infradead.org
|
||||
|
@ -2084,7 +2103,7 @@ S: Maintained
|
|||
OPENCORES I2C BUS DRIVER
|
||||
P: Peter Korsgaard
|
||||
M: jacmet@sunsite.dk
|
||||
L: lm-sensors@lm-sensors.org
|
||||
L: i2c@lm-sensors.org
|
||||
S: Maintained
|
||||
|
||||
ORACLE CLUSTER FILESYSTEM 2 (OCFS2)
|
||||
|
@ -2217,6 +2236,7 @@ S: Maintained
|
|||
|
||||
PCMCIA SUBSYSTEM
|
||||
P: Linux PCMCIA Team
|
||||
L: linux-pcmcia@lists.infradead.org
|
||||
L: http://lists.infradead.org/mailman/listinfo/linux-pcmcia
|
||||
T: git kernel.org:/pub/scm/linux/kernel/git/brodo/pcmcia-2.6.git
|
||||
S: Maintained
|
||||
|
@ -2227,6 +2247,12 @@ M: tsbogend@alpha.franken.de
|
|||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
PER-TASK DELAY ACCOUNTING
|
||||
P: Shailabh Nagar
|
||||
M: nagar@watson.ibm.com
|
||||
L: linux-kernel@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
PERSONALITY HANDLING
|
||||
P: Christoph Hellwig
|
||||
M: hch@infradead.org
|
||||
|
@ -2666,6 +2692,11 @@ M: shemminger@osdl.org
|
|||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
SOEKRIS NET48XX LED SUPPORT
|
||||
P: Chris Boot
|
||||
M: bootc@bootc.net
|
||||
S: Maintained
|
||||
|
||||
SPARC (sparc32):
|
||||
P: William L. Irwin
|
||||
M: wli@holomorphy.com
|
||||
|
@ -2738,11 +2769,23 @@ P: Christoph Hellwig
|
|||
M: hch@infradead.org
|
||||
S: Maintained
|
||||
|
||||
TC CLASSIFIER
|
||||
P: Jamal Hadi Salim
|
||||
M: hadi@cyberus.ca
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
TI OMAP RANDOM NUMBER GENERATOR SUPPORT
|
||||
P: Deepak Saxena
|
||||
M: dsaxena@plexity.net
|
||||
S: Maintained
|
||||
|
||||
TASKSTATS STATISTICS INTERFACE
|
||||
P: Shailabh Nagar
|
||||
M: nagar@watson.ibm.com
|
||||
L: linux-kernel@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
TI PARALLEL LINK CABLE DRIVER
|
||||
P: Romain Lievin
|
||||
M: roms@lpg.ticalc.org
|
||||
|
@ -3118,7 +3161,7 @@ S: Maintained
|
|||
VIAPRO SMBUS DRIVER
|
||||
P: Jean Delvare
|
||||
M: khali@linux-fr.org
|
||||
L: lm-sensors@lm-sensors.org
|
||||
L: i2c@lm-sensors.org
|
||||
S: Maintained
|
||||
|
||||
UCLINUX (AND M68KNOMMU)
|
||||
|
@ -3166,6 +3209,11 @@ S: Maintained
|
|||
W1 DALLAS'S 1-WIRE BUS
|
||||
P: Evgeniy Polyakov
|
||||
M: johnpol@2ka.mipt.ru
|
||||
S: Maintained
|
||||
|
||||
W83791D HARDWARE MONITORING DRIVER
|
||||
P: Charles Spirakis
|
||||
M: bezaur@gmail.com
|
||||
L: lm-sensors@lm-sensors.org
|
||||
S: Maintained
|
||||
|
||||
|
|
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
|||
VERSION = 2
|
||||
PATCHLEVEL = 6
|
||||
SUBLEVEL = 18
|
||||
EXTRAVERSION = -rc1
|
||||
EXTRAVERSION = -rc3
|
||||
NAME=Crazed Snow-Weasel
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
#include <linux/in.h>
|
||||
#include <linux/in6.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/screen_info.h>
|
||||
#include <linux/tty.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/delay.h>
|
||||
|
|
|
@ -274,16 +274,14 @@ ev7_process_pal_subpacket(struct el_subpacket *header)
|
|||
struct el_subpacket_handler ev7_pal_subpacket_handler =
|
||||
SUBPACKET_HANDLER_INIT(EL_CLASS__PAL, ev7_process_pal_subpacket);
|
||||
|
||||
void
|
||||
void
|
||||
ev7_register_error_handlers(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for(i = 0;
|
||||
i<sizeof(el_ev7_pal_annotations)/sizeof(el_ev7_pal_annotations[1]);
|
||||
i++) {
|
||||
for (i = 0; i < ARRAY_SIZE(el_ev7_pal_annotations); i++)
|
||||
cdl_register_subpacket_annotation(&el_ev7_pal_annotations[i]);
|
||||
}
|
||||
|
||||
cdl_register_subpacket_handler(&ev7_pal_subpacket_handler);
|
||||
}
|
||||
|
||||
|
|
|
@ -623,12 +623,12 @@ osf_sysinfo(int command, char __user *buf, long count)
|
|||
long len, err = -EINVAL;
|
||||
|
||||
offset = command-1;
|
||||
if (offset >= sizeof(sysinfo_table)/sizeof(char *)) {
|
||||
if (offset >= ARRAY_SIZE(sysinfo_table)) {
|
||||
/* Digital UNIX has a few unpublished interfaces here */
|
||||
printk("sysinfo(%d)", command);
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
||||
down_read(&uts_sem);
|
||||
res = sysinfo_table[offset];
|
||||
len = strlen(res)+1;
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#include <linux/time.h>
|
||||
#include <linux/major.h>
|
||||
#include <linux/stat.h>
|
||||
#include <linux/vt.h>
|
||||
#include <linux/mman.h>
|
||||
#include <linux/elfcore.h>
|
||||
#include <linux/reboot.h>
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
#include <linux/slab.h>
|
||||
#include <linux/user.h>
|
||||
#include <linux/a.out.h>
|
||||
#include <linux/tty.h>
|
||||
#include <linux/screen_info.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/config.h> /* CONFIG_ALPHA_LCA etc */
|
||||
#include <linux/mc146818rtc.h>
|
||||
|
@ -114,8 +114,6 @@ struct alpha_machine_vector alpha_mv;
|
|||
int alpha_using_srm;
|
||||
#endif
|
||||
|
||||
#define N(a) (sizeof(a)/sizeof(a[0]))
|
||||
|
||||
static struct alpha_machine_vector *get_sysvec(unsigned long, unsigned long,
|
||||
unsigned long);
|
||||
static struct alpha_machine_vector *get_sysvec_byname(const char *);
|
||||
|
@ -240,7 +238,7 @@ reserve_std_resources(void)
|
|||
standard_io_resources[0].start = RTC_PORT(0);
|
||||
standard_io_resources[0].end = RTC_PORT(0) + 0x10;
|
||||
|
||||
for (i = 0; i < N(standard_io_resources); ++i)
|
||||
for (i = 0; i < ARRAY_SIZE(standard_io_resources); ++i)
|
||||
request_resource(io, standard_io_resources+i);
|
||||
}
|
||||
|
||||
|
@ -918,13 +916,13 @@ get_sysvec(unsigned long type, unsigned long variation, unsigned long cpu)
|
|||
|
||||
/* Search the system tables first... */
|
||||
vec = NULL;
|
||||
if (type < N(systype_vecs)) {
|
||||
if (type < ARRAY_SIZE(systype_vecs)) {
|
||||
vec = systype_vecs[type];
|
||||
} else if ((type > ST_API_BIAS) &&
|
||||
(type - ST_API_BIAS) < N(api_vecs)) {
|
||||
(type - ST_API_BIAS) < ARRAY_SIZE(api_vecs)) {
|
||||
vec = api_vecs[type - ST_API_BIAS];
|
||||
} else if ((type > ST_UNOFFICIAL_BIAS) &&
|
||||
(type - ST_UNOFFICIAL_BIAS) < N(unofficial_vecs)) {
|
||||
(type - ST_UNOFFICIAL_BIAS) < ARRAY_SIZE(unofficial_vecs)) {
|
||||
vec = unofficial_vecs[type - ST_UNOFFICIAL_BIAS];
|
||||
}
|
||||
|
||||
|
@ -938,11 +936,11 @@ get_sysvec(unsigned long type, unsigned long variation, unsigned long cpu)
|
|||
|
||||
switch (type) {
|
||||
case ST_DEC_ALCOR:
|
||||
if (member < N(alcor_indices))
|
||||
if (member < ARRAY_SIZE(alcor_indices))
|
||||
vec = alcor_vecs[alcor_indices[member]];
|
||||
break;
|
||||
case ST_DEC_EB164:
|
||||
if (member < N(eb164_indices))
|
||||
if (member < ARRAY_SIZE(eb164_indices))
|
||||
vec = eb164_vecs[eb164_indices[member]];
|
||||
/* PC164 may show as EB164 variation with EV56 CPU,
|
||||
but, since no true EB164 had anything but EV5... */
|
||||
|
@ -950,24 +948,24 @@ get_sysvec(unsigned long type, unsigned long variation, unsigned long cpu)
|
|||
vec = &pc164_mv;
|
||||
break;
|
||||
case ST_DEC_EB64P:
|
||||
if (member < N(eb64p_indices))
|
||||
if (member < ARRAY_SIZE(eb64p_indices))
|
||||
vec = eb64p_vecs[eb64p_indices[member]];
|
||||
break;
|
||||
case ST_DEC_EB66:
|
||||
if (member < N(eb66_indices))
|
||||
if (member < ARRAY_SIZE(eb66_indices))
|
||||
vec = eb66_vecs[eb66_indices[member]];
|
||||
break;
|
||||
case ST_DEC_MARVEL:
|
||||
if (member < N(marvel_indices))
|
||||
if (member < ARRAY_SIZE(marvel_indices))
|
||||
vec = marvel_vecs[marvel_indices[member]];
|
||||
break;
|
||||
case ST_DEC_TITAN:
|
||||
vec = titan_vecs[0]; /* default */
|
||||
if (member < N(titan_indices))
|
||||
if (member < ARRAY_SIZE(titan_indices))
|
||||
vec = titan_vecs[titan_indices[member]];
|
||||
break;
|
||||
case ST_DEC_TSUNAMI:
|
||||
if (member < N(tsunami_indices))
|
||||
if (member < ARRAY_SIZE(tsunami_indices))
|
||||
vec = tsunami_vecs[tsunami_indices[member]];
|
||||
break;
|
||||
case ST_DEC_1000:
|
||||
|
@ -1039,7 +1037,7 @@ get_sysvec_byname(const char *name)
|
|||
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < N(all_vecs); ++i) {
|
||||
for (i = 0; i < ARRAY_SIZE(all_vecs); ++i) {
|
||||
struct alpha_machine_vector *mv = all_vecs[i];
|
||||
if (strcasecmp(mv->vector_name, name) == 0)
|
||||
return mv;
|
||||
|
@ -1055,13 +1053,13 @@ get_sysnames(unsigned long type, unsigned long variation, unsigned long cpu,
|
|||
|
||||
/* If not in the tables, make it UNKNOWN,
|
||||
else set type name to family */
|
||||
if (type < N(systype_names)) {
|
||||
if (type < ARRAY_SIZE(systype_names)) {
|
||||
*type_name = systype_names[type];
|
||||
} else if ((type > ST_API_BIAS) &&
|
||||
(type - ST_API_BIAS) < N(api_names)) {
|
||||
(type - ST_API_BIAS) < ARRAY_SIZE(api_names)) {
|
||||
*type_name = api_names[type - ST_API_BIAS];
|
||||
} else if ((type > ST_UNOFFICIAL_BIAS) &&
|
||||
(type - ST_UNOFFICIAL_BIAS) < N(unofficial_names)) {
|
||||
(type - ST_UNOFFICIAL_BIAS) < ARRAY_SIZE(unofficial_names)) {
|
||||
*type_name = unofficial_names[type - ST_UNOFFICIAL_BIAS];
|
||||
} else {
|
||||
*type_name = sys_unknown;
|
||||
|
@ -1083,7 +1081,7 @@ get_sysnames(unsigned long type, unsigned long variation, unsigned long cpu,
|
|||
default: /* default to variation "0" for now */
|
||||
break;
|
||||
case ST_DEC_EB164:
|
||||
if (member < N(eb164_indices))
|
||||
if (member < ARRAY_SIZE(eb164_indices))
|
||||
*variation_name = eb164_names[eb164_indices[member]];
|
||||
/* PC164 may show as EB164 variation, but with EV56 CPU,
|
||||
so, since no true EB164 had anything but EV5... */
|
||||
|
@ -1091,32 +1089,32 @@ get_sysnames(unsigned long type, unsigned long variation, unsigned long cpu,
|
|||
*variation_name = eb164_names[1]; /* make it PC164 */
|
||||
break;
|
||||
case ST_DEC_ALCOR:
|
||||
if (member < N(alcor_indices))
|
||||
if (member < ARRAY_SIZE(alcor_indices))
|
||||
*variation_name = alcor_names[alcor_indices[member]];
|
||||
break;
|
||||
case ST_DEC_EB64P:
|
||||
if (member < N(eb64p_indices))
|
||||
if (member < ARRAY_SIZE(eb64p_indices))
|
||||
*variation_name = eb64p_names[eb64p_indices[member]];
|
||||
break;
|
||||
case ST_DEC_EB66:
|
||||
if (member < N(eb66_indices))
|
||||
if (member < ARRAY_SIZE(eb66_indices))
|
||||
*variation_name = eb66_names[eb66_indices[member]];
|
||||
break;
|
||||
case ST_DEC_MARVEL:
|
||||
if (member < N(marvel_indices))
|
||||
if (member < ARRAY_SIZE(marvel_indices))
|
||||
*variation_name = marvel_names[marvel_indices[member]];
|
||||
break;
|
||||
case ST_DEC_RAWHIDE:
|
||||
if (member < N(rawhide_indices))
|
||||
if (member < ARRAY_SIZE(rawhide_indices))
|
||||
*variation_name = rawhide_names[rawhide_indices[member]];
|
||||
break;
|
||||
case ST_DEC_TITAN:
|
||||
*variation_name = titan_names[0]; /* default */
|
||||
if (member < N(titan_indices))
|
||||
if (member < ARRAY_SIZE(titan_indices))
|
||||
*variation_name = titan_names[titan_indices[member]];
|
||||
break;
|
||||
case ST_DEC_TSUNAMI:
|
||||
if (member < N(tsunami_indices))
|
||||
if (member < ARRAY_SIZE(tsunami_indices))
|
||||
*variation_name = tsunami_names[tsunami_indices[member]];
|
||||
break;
|
||||
}
|
||||
|
@ -1211,7 +1209,7 @@ show_cpuinfo(struct seq_file *f, void *slot)
|
|||
|
||||
cpu_index = (unsigned) (cpu->type - 1);
|
||||
cpu_name = "Unknown";
|
||||
if (cpu_index < N(cpu_names))
|
||||
if (cpu_index < ARRAY_SIZE(cpu_names))
|
||||
cpu_name = cpu_names[cpu_index];
|
||||
|
||||
get_sysnames(hwrpb->sys_type, hwrpb->sys_variation,
|
||||
|
|
|
@ -182,16 +182,16 @@ static unsigned long __init
|
|||
ruffian_get_bank_size(unsigned long offset)
|
||||
{
|
||||
unsigned long bank_addr, bank, ret = 0;
|
||||
|
||||
|
||||
/* Valid offsets are: 0x800, 0x840 and 0x880
|
||||
since Ruffian only uses three banks. */
|
||||
bank_addr = (unsigned long)PYXIS_MCR + offset;
|
||||
bank = *(vulp)bank_addr;
|
||||
|
||||
|
||||
/* Check BANK_ENABLE */
|
||||
if (bank & 0x01) {
|
||||
static unsigned long size[] __initdata = {
|
||||
0x40000000UL, /* 0x00, 1G */
|
||||
0x40000000UL, /* 0x00, 1G */
|
||||
0x20000000UL, /* 0x02, 512M */
|
||||
0x10000000UL, /* 0x04, 256M */
|
||||
0x08000000UL, /* 0x06, 128M */
|
||||
|
@ -203,7 +203,7 @@ ruffian_get_bank_size(unsigned long offset)
|
|||
};
|
||||
|
||||
bank = (bank & 0x1e) >> 1;
|
||||
if (bank < sizeof(size)/sizeof(*size))
|
||||
if (bank < ARRAY_SIZE(size))
|
||||
ret = size[bank];
|
||||
}
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
#include <linux/sched.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/tty.h>
|
||||
#include <linux/screen_info.h>
|
||||
|
||||
#include <asm/compiler.h>
|
||||
#include <asm/ptrace.h>
|
||||
|
|
|
@ -233,7 +233,7 @@ validate_cc_value(unsigned long cc)
|
|||
index = cpu->type & 0xffffffff;
|
||||
|
||||
/* If index out of bounds, no way to validate. */
|
||||
if (index >= sizeof(cpu_hz)/sizeof(cpu_hz[0]))
|
||||
if (index >= ARRAY_SIZE(cpu_hz))
|
||||
return cc;
|
||||
|
||||
/* If index contains no data, no way to validate. */
|
||||
|
|
|
@ -506,7 +506,7 @@ locomo_init_one_child(struct locomo *lchip, struct locomo_dev_info *info)
|
|||
goto out;
|
||||
}
|
||||
|
||||
strncpy(dev->dev.bus_id,info->name,sizeof(dev->dev.bus_id));
|
||||
strncpy(dev->dev.bus_id, info->name, sizeof(dev->dev.bus_id));
|
||||
/*
|
||||
* If the parent device has a DMA mask associated with it,
|
||||
* propagate it down to the children.
|
||||
|
@ -729,7 +729,6 @@ __locomo_probe(struct device *me, struct resource *mem, int irq)
|
|||
|
||||
for (i = 0; i < ARRAY_SIZE(locomo_devices); i++)
|
||||
locomo_init_one_child(lchip, &locomo_devices[i]);
|
||||
|
||||
return 0;
|
||||
|
||||
out:
|
||||
|
|
|
@ -412,8 +412,10 @@ static int sharpsl_check_battery_temp(void)
|
|||
val = get_select_val(buff);
|
||||
|
||||
dev_dbg(sharpsl_pm.dev, "Temperature: %d\n", val);
|
||||
if (val > sharpsl_pm.machinfo->charge_on_temp)
|
||||
if (val > sharpsl_pm.machinfo->charge_on_temp) {
|
||||
printk(KERN_WARNING "Not charging: temperature out of limits.\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1,14 +1,18 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.17-rc2
|
||||
# Wed Apr 19 21:21:01 2006
|
||||
# Linux kernel version: 2.6.18-rc1-git9
|
||||
# Sat Jul 15 15:08:10 2006
|
||||
#
|
||||
CONFIG_ARM=y
|
||||
CONFIG_MMU=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_HARDIRQS_SW_RESEND=y
|
||||
CONFIG_GENERIC_IRQ_PROBE=y
|
||||
CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
||||
CONFIG_GENERIC_HWEIGHT=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_VECTORS_BASE=0xffff0000
|
||||
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
||||
|
||||
#
|
||||
# Code maturity level options
|
||||
|
@ -26,6 +30,7 @@ CONFIG_SWAP=y
|
|||
CONFIG_SYSVIPC=y
|
||||
# CONFIG_POSIX_MQUEUE is not set
|
||||
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||
# CONFIG_TASKSTATS is not set
|
||||
CONFIG_SYSCTL=y
|
||||
# CONFIG_AUDIT is not set
|
||||
CONFIG_IKCONFIG=y
|
||||
|
@ -43,14 +48,15 @@ CONFIG_PRINTK=y
|
|||
CONFIG_BUG=y
|
||||
CONFIG_ELF_CORE=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_RT_MUTEXES=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_SLAB=y
|
||||
CONFIG_VM_EVENT_COUNTERS=y
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
# CONFIG_SLOB is not set
|
||||
CONFIG_OBSOLETE_INTERMODULE=y
|
||||
|
||||
#
|
||||
# Loadable module support
|
||||
|
@ -83,18 +89,26 @@ CONFIG_DEFAULT_IOSCHED="deadline"
|
|||
#
|
||||
# System Type
|
||||
#
|
||||
# CONFIG_ARCH_AAEC2000 is not set
|
||||
# CONFIG_ARCH_INTEGRATOR is not set
|
||||
# CONFIG_ARCH_REALVIEW is not set
|
||||
# CONFIG_ARCH_VERSATILE is not set
|
||||
# CONFIG_ARCH_AT91 is not set
|
||||
# CONFIG_ARCH_CLPS7500 is not set
|
||||
# CONFIG_ARCH_CLPS711X is not set
|
||||
# CONFIG_ARCH_CO285 is not set
|
||||
# CONFIG_ARCH_EBSA110 is not set
|
||||
CONFIG_ARCH_EP93XX=y
|
||||
# CONFIG_ARCH_FOOTBRIDGE is not set
|
||||
# CONFIG_ARCH_INTEGRATOR is not set
|
||||
# CONFIG_ARCH_NETX is not set
|
||||
# CONFIG_ARCH_H720X is not set
|
||||
# CONFIG_ARCH_IMX is not set
|
||||
# CONFIG_ARCH_IOP3XX is not set
|
||||
# CONFIG_ARCH_IXP4XX is not set
|
||||
# CONFIG_ARCH_IXP2000 is not set
|
||||
# CONFIG_ARCH_IXP23XX is not set
|
||||
# CONFIG_ARCH_L7200 is not set
|
||||
# CONFIG_ARCH_PNX4008 is not set
|
||||
# CONFIG_ARCH_PXA is not set
|
||||
# CONFIG_ARCH_RPC is not set
|
||||
# CONFIG_ARCH_SA1100 is not set
|
||||
|
@ -102,20 +116,18 @@ CONFIG_ARCH_EP93XX=y
|
|||
# CONFIG_ARCH_SHARK is not set
|
||||
# CONFIG_ARCH_LH7A40X is not set
|
||||
# CONFIG_ARCH_OMAP is not set
|
||||
# CONFIG_ARCH_VERSATILE is not set
|
||||
# CONFIG_ARCH_REALVIEW is not set
|
||||
# CONFIG_ARCH_IMX is not set
|
||||
# CONFIG_ARCH_H720X is not set
|
||||
# CONFIG_ARCH_AAEC2000 is not set
|
||||
# CONFIG_ARCH_AT91RM9200 is not set
|
||||
|
||||
#
|
||||
# Cirrus EP93xx Implementation Options
|
||||
#
|
||||
CONFIG_CRUNCH=y
|
||||
|
||||
#
|
||||
# EP93xx Platforms
|
||||
#
|
||||
CONFIG_MACH_EDB9302=y
|
||||
CONFIG_MACH_EDB9315=y
|
||||
CONFIG_MACH_EDB9315A=y
|
||||
CONFIG_MACH_GESBC9312=y
|
||||
CONFIG_MACH_TS72XX=y
|
||||
|
||||
|
@ -166,6 +178,7 @@ CONFIG_FLATMEM=y
|
|||
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||
# CONFIG_SPARSEMEM_STATIC is not set
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4096
|
||||
# CONFIG_RESOURCES_64BIT is not set
|
||||
CONFIG_ALIGNMENT_TRAP=y
|
||||
|
||||
#
|
||||
|
@ -233,6 +246,8 @@ CONFIG_SYN_COOKIES=y
|
|||
# CONFIG_INET_IPCOMP is not set
|
||||
# CONFIG_INET_XFRM_TUNNEL is not set
|
||||
# CONFIG_INET_TUNNEL is not set
|
||||
CONFIG_INET_XFRM_MODE_TRANSPORT=y
|
||||
CONFIG_INET_XFRM_MODE_TUNNEL=y
|
||||
CONFIG_INET_DIAG=y
|
||||
CONFIG_INET_TCP_DIAG=y
|
||||
# CONFIG_TCP_CONG_ADVANCED is not set
|
||||
|
@ -240,6 +255,7 @@ CONFIG_TCP_CONG_BIC=y
|
|||
# CONFIG_IPV6 is not set
|
||||
# CONFIG_INET6_XFRM_TUNNEL is not set
|
||||
# CONFIG_INET6_TUNNEL is not set
|
||||
# CONFIG_NETWORK_SECMARK is not set
|
||||
# CONFIG_NETFILTER is not set
|
||||
|
||||
#
|
||||
|
@ -294,6 +310,7 @@ CONFIG_STANDALONE=y
|
|||
CONFIG_PREVENT_FIRMWARE_BUILD=y
|
||||
# CONFIG_FW_LOADER is not set
|
||||
# CONFIG_DEBUG_DRIVER is not set
|
||||
# CONFIG_SYS_HYPERVISOR is not set
|
||||
|
||||
#
|
||||
# Connector - unified userspace <-> kernelspace linker
|
||||
|
@ -386,6 +403,8 @@ CONFIG_MTD_PHYSMAP_BANKWIDTH=1
|
|||
#
|
||||
CONFIG_MTD_NAND=y
|
||||
CONFIG_MTD_NAND_VERIFY_WRITE=y
|
||||
# CONFIG_MTD_NAND_ECC_SMC is not set
|
||||
CONFIG_MTD_NAND_TS7250=y
|
||||
CONFIG_MTD_NAND_IDS=y
|
||||
# CONFIG_MTD_NAND_DISKONCHIP is not set
|
||||
# CONFIG_MTD_NAND_NANDSIM is not set
|
||||
|
@ -582,6 +601,7 @@ CONFIG_EP93XX_WATCHDOG=y
|
|||
# USB-based Watchdog Cards
|
||||
#
|
||||
# CONFIG_USBPCWATCHDOG is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
# CONFIG_NVRAM is not set
|
||||
# CONFIG_DTLK is not set
|
||||
# CONFIG_R3964 is not set
|
||||
|
@ -613,6 +633,7 @@ CONFIG_I2C_ALGOBIT=y
|
|||
#
|
||||
# I2C Hardware Bus support
|
||||
#
|
||||
# CONFIG_I2C_OCORES is not set
|
||||
# CONFIG_I2C_PARPORT_LIGHT is not set
|
||||
# CONFIG_I2C_STUB is not set
|
||||
# CONFIG_I2C_PCA_ISA is not set
|
||||
|
@ -641,13 +662,13 @@ CONFIG_I2C_DEBUG_CHIP=y
|
|||
#
|
||||
# Dallas's 1-wire bus
|
||||
#
|
||||
# CONFIG_W1 is not set
|
||||
|
||||
#
|
||||
# Hardware Monitoring support
|
||||
#
|
||||
CONFIG_HWMON=y
|
||||
# CONFIG_HWMON_VID is not set
|
||||
# CONFIG_SENSORS_ABITUGURU is not set
|
||||
# CONFIG_SENSORS_ADM1021 is not set
|
||||
# CONFIG_SENSORS_ADM1025 is not set
|
||||
# CONFIG_SENSORS_ADM1026 is not set
|
||||
|
@ -675,8 +696,10 @@ CONFIG_HWMON=y
|
|||
# CONFIG_SENSORS_MAX1619 is not set
|
||||
# CONFIG_SENSORS_PC87360 is not set
|
||||
# CONFIG_SENSORS_SMSC47M1 is not set
|
||||
# CONFIG_SENSORS_SMSC47M192 is not set
|
||||
# CONFIG_SENSORS_SMSC47B397 is not set
|
||||
# CONFIG_SENSORS_W83781D is not set
|
||||
# CONFIG_SENSORS_W83791D is not set
|
||||
# CONFIG_SENSORS_W83792D is not set
|
||||
# CONFIG_SENSORS_W83L785TS is not set
|
||||
# CONFIG_SENSORS_W83627HF is not set
|
||||
|
@ -704,6 +727,7 @@ CONFIG_HWMON=y
|
|||
# Multimedia devices
|
||||
#
|
||||
# CONFIG_VIDEO_DEV is not set
|
||||
CONFIG_VIDEO_V4L2=y
|
||||
|
||||
#
|
||||
# Digital Video Broadcasting Devices
|
||||
|
@ -714,6 +738,7 @@ CONFIG_HWMON=y
|
|||
#
|
||||
# Graphics support
|
||||
#
|
||||
# CONFIG_FIRMWARE_EDID is not set
|
||||
# CONFIG_FB is not set
|
||||
|
||||
#
|
||||
|
@ -725,7 +750,7 @@ CONFIG_HWMON=y
|
|||
# USB support
|
||||
#
|
||||
CONFIG_USB_ARCH_HAS_HCD=y
|
||||
# CONFIG_USB_ARCH_HAS_OHCI is not set
|
||||
CONFIG_USB_ARCH_HAS_OHCI=y
|
||||
# CONFIG_USB_ARCH_HAS_EHCI is not set
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_DEBUG=y
|
||||
|
@ -742,6 +767,9 @@ CONFIG_USB_DYNAMIC_MINORS=y
|
|||
# USB Host Controller Drivers
|
||||
#
|
||||
# CONFIG_USB_ISP116X_HCD is not set
|
||||
CONFIG_USB_OHCI_HCD=y
|
||||
# CONFIG_USB_OHCI_BIG_ENDIAN is not set
|
||||
CONFIG_USB_OHCI_LITTLE_ENDIAN=y
|
||||
# CONFIG_USB_SL811_HCD is not set
|
||||
|
||||
#
|
||||
|
@ -806,6 +834,7 @@ CONFIG_USB_SERIAL_CONSOLE=y
|
|||
# CONFIG_USB_SERIAL_GENERIC is not set
|
||||
# CONFIG_USB_SERIAL_AIRPRIME is not set
|
||||
# CONFIG_USB_SERIAL_ANYDATA is not set
|
||||
# CONFIG_USB_SERIAL_ARK3116 is not set
|
||||
# CONFIG_USB_SERIAL_BELKIN is not set
|
||||
# CONFIG_USB_SERIAL_WHITEHEAT is not set
|
||||
# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
|
||||
|
@ -830,9 +859,11 @@ CONFIG_USB_SERIAL_CONSOLE=y
|
|||
CONFIG_USB_SERIAL_PL2303=y
|
||||
# CONFIG_USB_SERIAL_HP4X is not set
|
||||
# CONFIG_USB_SERIAL_SAFE is not set
|
||||
# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
|
||||
# CONFIG_USB_SERIAL_TI is not set
|
||||
# CONFIG_USB_SERIAL_CYBERJACK is not set
|
||||
# CONFIG_USB_SERIAL_XIRCOM is not set
|
||||
# CONFIG_USB_SERIAL_OPTION is not set
|
||||
# CONFIG_USB_SERIAL_OMNINET is not set
|
||||
|
||||
#
|
||||
|
@ -845,10 +876,12 @@ CONFIG_USB_SERIAL_PL2303=y
|
|||
# CONFIG_USB_LEGOTOWER is not set
|
||||
# CONFIG_USB_LCD is not set
|
||||
# CONFIG_USB_LED is not set
|
||||
# CONFIG_USB_CYPRESS_CY7C63 is not set
|
||||
# CONFIG_USB_CYTHERM is not set
|
||||
# CONFIG_USB_PHIDGETKIT is not set
|
||||
# CONFIG_USB_PHIDGETSERVO is not set
|
||||
# CONFIG_USB_IDMOUSE is not set
|
||||
# CONFIG_USB_APPLEDISPLAY is not set
|
||||
# CONFIG_USB_LD is not set
|
||||
# CONFIG_USB_TEST is not set
|
||||
|
||||
|
@ -880,17 +913,25 @@ CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
|
|||
CONFIG_RTC_INTF_SYSFS=y
|
||||
CONFIG_RTC_INTF_PROC=y
|
||||
CONFIG_RTC_INTF_DEV=y
|
||||
# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
|
||||
|
||||
#
|
||||
# RTC drivers
|
||||
#
|
||||
# CONFIG_RTC_DRV_X1205 is not set
|
||||
# CONFIG_RTC_DRV_DS1307 is not set
|
||||
# CONFIG_RTC_DRV_DS1553 is not set
|
||||
# CONFIG_RTC_DRV_ISL1208 is not set
|
||||
# CONFIG_RTC_DRV_DS1672 is not set
|
||||
# CONFIG_RTC_DRV_DS1742 is not set
|
||||
# CONFIG_RTC_DRV_PCF8563 is not set
|
||||
# CONFIG_RTC_DRV_PCF8583 is not set
|
||||
# CONFIG_RTC_DRV_RS5C372 is not set
|
||||
CONFIG_RTC_DRV_M48T86=y
|
||||
CONFIG_RTC_DRV_EP93XX=y
|
||||
# CONFIG_RTC_DRV_PL031 is not set
|
||||
# CONFIG_RTC_DRV_TEST is not set
|
||||
# CONFIG_RTC_DRV_V3020 is not set
|
||||
|
||||
#
|
||||
# File systems
|
||||
|
@ -910,6 +951,7 @@ CONFIG_JBD=y
|
|||
# CONFIG_MINIX_FS is not set
|
||||
# CONFIG_ROMFS_FS is not set
|
||||
CONFIG_INOTIFY=y
|
||||
CONFIG_INOTIFY_USER=y
|
||||
# CONFIG_QUOTA is not set
|
||||
CONFIG_DNOTIFY=y
|
||||
# CONFIG_AUTOFS_FS is not set
|
||||
|
@ -957,6 +999,7 @@ CONFIG_JFFS2_FS=y
|
|||
CONFIG_JFFS2_FS_DEBUG=0
|
||||
CONFIG_JFFS2_FS_WRITEBUFFER=y
|
||||
# CONFIG_JFFS2_SUMMARY is not set
|
||||
# CONFIG_JFFS2_FS_XATTR is not set
|
||||
# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
|
||||
CONFIG_JFFS2_ZLIB=y
|
||||
CONFIG_JFFS2_RTIME=y
|
||||
|
@ -1066,15 +1109,20 @@ CONFIG_NLS_ISO8859_1=y
|
|||
#
|
||||
# CONFIG_PRINTK_TIME is not set
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
# CONFIG_UNUSED_SYMBOLS is not set
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_DETECT_SOFTLOCKUP=y
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
CONFIG_DEBUG_SLAB=y
|
||||
# CONFIG_DEBUG_SLAB_LEAK is not set
|
||||
CONFIG_DEBUG_MUTEXES=y
|
||||
# CONFIG_DEBUG_RT_MUTEXES is not set
|
||||
# CONFIG_RT_MUTEX_TESTER is not set
|
||||
CONFIG_DEBUG_SPINLOCK=y
|
||||
CONFIG_DEBUG_MUTEXES=y
|
||||
# CONFIG_DEBUG_RWSEMS is not set
|
||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
|
||||
# CONFIG_DEBUG_KOBJECT is not set
|
||||
CONFIG_DEBUG_BUGVERBOSE=y
|
||||
# CONFIG_DEBUG_INFO is not set
|
||||
|
@ -1114,3 +1162,4 @@ CONFIG_CRC32=y
|
|||
CONFIG_LIBCRC32C=y
|
||||
CONFIG_ZLIB_INFLATE=y
|
||||
CONFIG_ZLIB_DEFLATE=y
|
||||
CONFIG_PLIST=y
|
||||
|
|
|
@ -1,14 +1,18 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.17-rc2
|
||||
# Wed Apr 19 21:12:49 2006
|
||||
# Linux kernel version: 2.6.18-rc1
|
||||
# Sun Jul 9 15:28:50 2006
|
||||
#
|
||||
CONFIG_ARM=y
|
||||
CONFIG_MMU=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_HARDIRQS_SW_RESEND=y
|
||||
CONFIG_GENERIC_IRQ_PROBE=y
|
||||
CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
||||
CONFIG_GENERIC_HWEIGHT=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_VECTORS_BASE=0xffff0000
|
||||
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
||||
|
||||
#
|
||||
# Code maturity level options
|
||||
|
@ -43,14 +47,15 @@ CONFIG_PRINTK=y
|
|||
CONFIG_BUG=y
|
||||
CONFIG_ELF_CORE=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_RT_MUTEXES=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_SLAB=y
|
||||
CONFIG_VM_EVENT_COUNTERS=y
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
# CONFIG_SLOB is not set
|
||||
CONFIG_OBSOLETE_INTERMODULE=y
|
||||
|
||||
#
|
||||
# Loadable module support
|
||||
|
@ -83,18 +88,26 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
|
|||
#
|
||||
# System Type
|
||||
#
|
||||
# CONFIG_ARCH_AAEC2000 is not set
|
||||
# CONFIG_ARCH_INTEGRATOR is not set
|
||||
# CONFIG_ARCH_REALVIEW is not set
|
||||
# CONFIG_ARCH_VERSATILE is not set
|
||||
# CONFIG_ARCH_AT91 is not set
|
||||
# CONFIG_ARCH_CLPS7500 is not set
|
||||
# CONFIG_ARCH_CLPS711X is not set
|
||||
# CONFIG_ARCH_CO285 is not set
|
||||
# CONFIG_ARCH_EBSA110 is not set
|
||||
# CONFIG_ARCH_EP93XX is not set
|
||||
# CONFIG_ARCH_FOOTBRIDGE is not set
|
||||
# CONFIG_ARCH_INTEGRATOR is not set
|
||||
# CONFIG_ARCH_NETX is not set
|
||||
# CONFIG_ARCH_H720X is not set
|
||||
# CONFIG_ARCH_IMX is not set
|
||||
# CONFIG_ARCH_IOP3XX is not set
|
||||
# CONFIG_ARCH_IXP4XX is not set
|
||||
CONFIG_ARCH_IXP2000=y
|
||||
# CONFIG_ARCH_IXP23XX is not set
|
||||
# CONFIG_ARCH_L7200 is not set
|
||||
# CONFIG_ARCH_PNX4008 is not set
|
||||
# CONFIG_ARCH_PXA is not set
|
||||
# CONFIG_ARCH_RPC is not set
|
||||
# CONFIG_ARCH_SA1100 is not set
|
||||
|
@ -102,12 +115,6 @@ CONFIG_ARCH_IXP2000=y
|
|||
# CONFIG_ARCH_SHARK is not set
|
||||
# CONFIG_ARCH_LH7A40X is not set
|
||||
# CONFIG_ARCH_OMAP is not set
|
||||
# CONFIG_ARCH_VERSATILE is not set
|
||||
# CONFIG_ARCH_REALVIEW is not set
|
||||
# CONFIG_ARCH_IMX is not set
|
||||
# CONFIG_ARCH_H720X is not set
|
||||
# CONFIG_ARCH_AAEC2000 is not set
|
||||
# CONFIG_ARCH_AT91RM9200 is not set
|
||||
CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y
|
||||
|
||||
#
|
||||
|
@ -171,6 +178,7 @@ CONFIG_FLATMEM=y
|
|||
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||
# CONFIG_SPARSEMEM_STATIC is not set
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4096
|
||||
# CONFIG_RESOURCES_64BIT is not set
|
||||
CONFIG_ALIGNMENT_TRAP=y
|
||||
|
||||
#
|
||||
|
@ -218,6 +226,8 @@ CONFIG_NET=y
|
|||
CONFIG_PACKET=y
|
||||
CONFIG_PACKET_MMAP=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_XFRM=y
|
||||
# CONFIG_XFRM_USER is not set
|
||||
# CONFIG_NET_KEY is not set
|
||||
CONFIG_INET=y
|
||||
# CONFIG_IP_MULTICAST is not set
|
||||
|
@ -236,6 +246,8 @@ CONFIG_SYN_COOKIES=y
|
|||
# CONFIG_INET_IPCOMP is not set
|
||||
# CONFIG_INET_XFRM_TUNNEL is not set
|
||||
# CONFIG_INET_TUNNEL is not set
|
||||
CONFIG_INET_XFRM_MODE_TRANSPORT=y
|
||||
CONFIG_INET_XFRM_MODE_TUNNEL=y
|
||||
CONFIG_INET_DIAG=y
|
||||
CONFIG_INET_TCP_DIAG=y
|
||||
# CONFIG_TCP_CONG_ADVANCED is not set
|
||||
|
@ -243,6 +255,7 @@ CONFIG_TCP_CONG_BIC=y
|
|||
# CONFIG_IPV6 is not set
|
||||
# CONFIG_INET6_XFRM_TUNNEL is not set
|
||||
# CONFIG_INET6_TUNNEL is not set
|
||||
# CONFIG_NETWORK_SECMARK is not set
|
||||
# CONFIG_NETFILTER is not set
|
||||
|
||||
#
|
||||
|
@ -297,6 +310,7 @@ CONFIG_STANDALONE=y
|
|||
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
||||
# CONFIG_FW_LOADER is not set
|
||||
# CONFIG_DEBUG_DRIVER is not set
|
||||
# CONFIG_SYS_HYPERVISOR is not set
|
||||
|
||||
#
|
||||
# Connector - unified userspace <-> kernelspace linker
|
||||
|
@ -525,6 +539,7 @@ CONFIG_ENP2611_MSF_NET=y
|
|||
# CONFIG_CHELSIO_T1 is not set
|
||||
# CONFIG_IXGB is not set
|
||||
# CONFIG_S2IO is not set
|
||||
# CONFIG_MYRI10GE is not set
|
||||
|
||||
#
|
||||
# Token Ring devices
|
||||
|
@ -542,7 +557,6 @@ CONFIG_ENP2611_MSF_NET=y
|
|||
CONFIG_WAN=y
|
||||
# CONFIG_DSCC4 is not set
|
||||
# CONFIG_LANMEDIA is not set
|
||||
# CONFIG_SYNCLINK_SYNCPPP is not set
|
||||
CONFIG_HDLC=y
|
||||
CONFIG_HDLC_RAW=y
|
||||
# CONFIG_HDLC_RAW_ETH is not set
|
||||
|
@ -654,6 +668,7 @@ CONFIG_IXP2000_WATCHDOG=y
|
|||
#
|
||||
# CONFIG_PCIPCWATCHDOG is not set
|
||||
# CONFIG_WDTPCI is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
# CONFIG_NVRAM is not set
|
||||
# CONFIG_DTLK is not set
|
||||
# CONFIG_R3964 is not set
|
||||
|
@ -697,6 +712,7 @@ CONFIG_I2C_ALGOBIT=y
|
|||
# CONFIG_I2C_PIIX4 is not set
|
||||
CONFIG_I2C_IXP2000=y
|
||||
# CONFIG_I2C_NFORCE2 is not set
|
||||
# CONFIG_I2C_OCORES is not set
|
||||
# CONFIG_I2C_PARPORT_LIGHT is not set
|
||||
# CONFIG_I2C_PROSAVAGE is not set
|
||||
# CONFIG_I2C_SAVAGE4 is not set
|
||||
|
@ -733,13 +749,13 @@ CONFIG_SENSORS_EEPROM=y
|
|||
#
|
||||
# Dallas's 1-wire bus
|
||||
#
|
||||
# CONFIG_W1 is not set
|
||||
|
||||
#
|
||||
# Hardware Monitoring support
|
||||
#
|
||||
CONFIG_HWMON=y
|
||||
# CONFIG_HWMON_VID is not set
|
||||
# CONFIG_SENSORS_ABITUGURU is not set
|
||||
# CONFIG_SENSORS_ADM1021 is not set
|
||||
# CONFIG_SENSORS_ADM1025 is not set
|
||||
# CONFIG_SENSORS_ADM1026 is not set
|
||||
|
@ -768,10 +784,12 @@ CONFIG_HWMON=y
|
|||
# CONFIG_SENSORS_PC87360 is not set
|
||||
# CONFIG_SENSORS_SIS5595 is not set
|
||||
# CONFIG_SENSORS_SMSC47M1 is not set
|
||||
# CONFIG_SENSORS_SMSC47M192 is not set
|
||||
# CONFIG_SENSORS_SMSC47B397 is not set
|
||||
# CONFIG_SENSORS_VIA686A is not set
|
||||
# CONFIG_SENSORS_VT8231 is not set
|
||||
# CONFIG_SENSORS_W83781D is not set
|
||||
# CONFIG_SENSORS_W83791D is not set
|
||||
# CONFIG_SENSORS_W83792D is not set
|
||||
# CONFIG_SENSORS_W83L785TS is not set
|
||||
# CONFIG_SENSORS_W83627HF is not set
|
||||
|
@ -799,6 +817,7 @@ CONFIG_HWMON=y
|
|||
# Multimedia devices
|
||||
#
|
||||
# CONFIG_VIDEO_DEV is not set
|
||||
CONFIG_VIDEO_V4L2=y
|
||||
|
||||
#
|
||||
# Digital Video Broadcasting Devices
|
||||
|
@ -808,6 +827,7 @@ CONFIG_HWMON=y
|
|||
#
|
||||
# Graphics support
|
||||
#
|
||||
# CONFIG_FIRMWARE_EDID is not set
|
||||
# CONFIG_FB is not set
|
||||
|
||||
#
|
||||
|
@ -866,6 +886,7 @@ CONFIG_FS_POSIX_ACL=y
|
|||
# CONFIG_MINIX_FS is not set
|
||||
# CONFIG_ROMFS_FS is not set
|
||||
CONFIG_INOTIFY=y
|
||||
CONFIG_INOTIFY_USER=y
|
||||
# CONFIG_QUOTA is not set
|
||||
CONFIG_DNOTIFY=y
|
||||
# CONFIG_AUTOFS_FS is not set
|
||||
|
@ -910,6 +931,7 @@ CONFIG_JFFS2_FS=y
|
|||
CONFIG_JFFS2_FS_DEBUG=0
|
||||
CONFIG_JFFS2_FS_WRITEBUFFER=y
|
||||
# CONFIG_JFFS2_SUMMARY is not set
|
||||
# CONFIG_JFFS2_FS_XATTR is not set
|
||||
# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
|
||||
CONFIG_JFFS2_ZLIB=y
|
||||
CONFIG_JFFS2_RTIME=y
|
||||
|
@ -939,6 +961,7 @@ CONFIG_SUNRPC=y
|
|||
# CONFIG_RPCSEC_GSS_SPKM3 is not set
|
||||
# CONFIG_SMB_FS is not set
|
||||
# CONFIG_CIFS is not set
|
||||
# CONFIG_CIFS_DEBUG2 is not set
|
||||
# CONFIG_NCP_FS is not set
|
||||
# CONFIG_CODA_FS is not set
|
||||
# CONFIG_AFS_FS is not set
|
||||
|
@ -980,14 +1003,19 @@ CONFIG_MSDOS_PARTITION=y
|
|||
#
|
||||
# CONFIG_PRINTK_TIME is not set
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
# CONFIG_UNUSED_SYMBOLS is not set
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_DETECT_SOFTLOCKUP=y
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
# CONFIG_DEBUG_SLAB is not set
|
||||
CONFIG_DEBUG_MUTEXES=y
|
||||
# CONFIG_DEBUG_RT_MUTEXES is not set
|
||||
# CONFIG_RT_MUTEX_TESTER is not set
|
||||
# CONFIG_DEBUG_SPINLOCK is not set
|
||||
CONFIG_DEBUG_MUTEXES=y
|
||||
# CONFIG_DEBUG_RWSEMS is not set
|
||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
|
||||
# CONFIG_DEBUG_KOBJECT is not set
|
||||
CONFIG_DEBUG_BUGVERBOSE=y
|
||||
# CONFIG_DEBUG_INFO is not set
|
||||
|
@ -1027,3 +1055,4 @@ CONFIG_CRC32=y
|
|||
# CONFIG_LIBCRC32C is not set
|
||||
CONFIG_ZLIB_INFLATE=y
|
||||
CONFIG_ZLIB_DEFLATE=y
|
||||
CONFIG_PLIST=y
|
||||
|
|
|
@ -1,14 +1,18 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.17-rc2
|
||||
# Wed Apr 19 21:13:50 2006
|
||||
# Linux kernel version: 2.6.18-rc1
|
||||
# Sun Jul 9 14:13:35 2006
|
||||
#
|
||||
CONFIG_ARM=y
|
||||
CONFIG_MMU=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_HARDIRQS_SW_RESEND=y
|
||||
CONFIG_GENERIC_IRQ_PROBE=y
|
||||
CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
||||
CONFIG_GENERIC_HWEIGHT=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_VECTORS_BASE=0xffff0000
|
||||
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
||||
|
||||
#
|
||||
# Code maturity level options
|
||||
|
@ -43,14 +47,15 @@ CONFIG_PRINTK=y
|
|||
CONFIG_BUG=y
|
||||
CONFIG_ELF_CORE=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_RT_MUTEXES=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_SLAB=y
|
||||
CONFIG_VM_EVENT_COUNTERS=y
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
# CONFIG_SLOB is not set
|
||||
CONFIG_OBSOLETE_INTERMODULE=y
|
||||
|
||||
#
|
||||
# Loadable module support
|
||||
|
@ -83,18 +88,26 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
|
|||
#
|
||||
# System Type
|
||||
#
|
||||
# CONFIG_ARCH_AAEC2000 is not set
|
||||
# CONFIG_ARCH_INTEGRATOR is not set
|
||||
# CONFIG_ARCH_REALVIEW is not set
|
||||
# CONFIG_ARCH_VERSATILE is not set
|
||||
# CONFIG_ARCH_AT91 is not set
|
||||
# CONFIG_ARCH_CLPS7500 is not set
|
||||
# CONFIG_ARCH_CLPS711X is not set
|
||||
# CONFIG_ARCH_CO285 is not set
|
||||
# CONFIG_ARCH_EBSA110 is not set
|
||||
# CONFIG_ARCH_EP93XX is not set
|
||||
# CONFIG_ARCH_FOOTBRIDGE is not set
|
||||
# CONFIG_ARCH_INTEGRATOR is not set
|
||||
# CONFIG_ARCH_NETX is not set
|
||||
# CONFIG_ARCH_H720X is not set
|
||||
# CONFIG_ARCH_IMX is not set
|
||||
# CONFIG_ARCH_IOP3XX is not set
|
||||
# CONFIG_ARCH_IXP4XX is not set
|
||||
# CONFIG_ARCH_IXP2000 is not set
|
||||
CONFIG_ARCH_IXP23XX=y
|
||||
# CONFIG_ARCH_L7200 is not set
|
||||
# CONFIG_ARCH_PNX4008 is not set
|
||||
# CONFIG_ARCH_PXA is not set
|
||||
# CONFIG_ARCH_RPC is not set
|
||||
# CONFIG_ARCH_SA1100 is not set
|
||||
|
@ -102,12 +115,6 @@ CONFIG_ARCH_IXP23XX=y
|
|||
# CONFIG_ARCH_SHARK is not set
|
||||
# CONFIG_ARCH_LH7A40X is not set
|
||||
# CONFIG_ARCH_OMAP is not set
|
||||
# CONFIG_ARCH_VERSATILE is not set
|
||||
# CONFIG_ARCH_REALVIEW is not set
|
||||
# CONFIG_ARCH_IMX is not set
|
||||
# CONFIG_ARCH_H720X is not set
|
||||
# CONFIG_ARCH_AAEC2000 is not set
|
||||
# CONFIG_ARCH_AT91RM9200 is not set
|
||||
CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y
|
||||
|
||||
#
|
||||
|
@ -165,6 +172,7 @@ CONFIG_FLATMEM=y
|
|||
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||
# CONFIG_SPARSEMEM_STATIC is not set
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4096
|
||||
CONFIG_RESOURCES_64BIT=y
|
||||
CONFIG_ALIGNMENT_TRAP=y
|
||||
|
||||
#
|
||||
|
@ -212,6 +220,8 @@ CONFIG_NET=y
|
|||
CONFIG_PACKET=y
|
||||
CONFIG_PACKET_MMAP=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_XFRM=y
|
||||
# CONFIG_XFRM_USER is not set
|
||||
# CONFIG_NET_KEY is not set
|
||||
CONFIG_INET=y
|
||||
# CONFIG_IP_MULTICAST is not set
|
||||
|
@ -230,6 +240,8 @@ CONFIG_SYN_COOKIES=y
|
|||
# CONFIG_INET_IPCOMP is not set
|
||||
# CONFIG_INET_XFRM_TUNNEL is not set
|
||||
# CONFIG_INET_TUNNEL is not set
|
||||
CONFIG_INET_XFRM_MODE_TRANSPORT=y
|
||||
CONFIG_INET_XFRM_MODE_TUNNEL=y
|
||||
CONFIG_INET_DIAG=y
|
||||
CONFIG_INET_TCP_DIAG=y
|
||||
# CONFIG_TCP_CONG_ADVANCED is not set
|
||||
|
@ -237,6 +249,7 @@ CONFIG_TCP_CONG_BIC=y
|
|||
# CONFIG_IPV6 is not set
|
||||
# CONFIG_INET6_XFRM_TUNNEL is not set
|
||||
# CONFIG_INET6_TUNNEL is not set
|
||||
# CONFIG_NETWORK_SECMARK is not set
|
||||
# CONFIG_NETFILTER is not set
|
||||
|
||||
#
|
||||
|
@ -291,6 +304,7 @@ CONFIG_STANDALONE=y
|
|||
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
|
||||
# CONFIG_FW_LOADER is not set
|
||||
# CONFIG_DEBUG_DRIVER is not set
|
||||
# CONFIG_SYS_HYPERVISOR is not set
|
||||
|
||||
#
|
||||
# Connector - unified userspace <-> kernelspace linker
|
||||
|
@ -520,6 +534,7 @@ CONFIG_BLK_DEV_SD=y
|
|||
# CONFIG_MEGARAID_LEGACY is not set
|
||||
# CONFIG_MEGARAID_SAS is not set
|
||||
# CONFIG_SCSI_SATA is not set
|
||||
# CONFIG_SCSI_HPTIOP is not set
|
||||
# CONFIG_SCSI_DMX3191D is not set
|
||||
# CONFIG_SCSI_FUTURE_DOMAIN is not set
|
||||
# CONFIG_SCSI_IPS is not set
|
||||
|
@ -641,6 +656,7 @@ CONFIG_E1000_NAPI=y
|
|||
# CONFIG_CHELSIO_T1 is not set
|
||||
# CONFIG_IXGB is not set
|
||||
# CONFIG_S2IO is not set
|
||||
# CONFIG_MYRI10GE is not set
|
||||
|
||||
#
|
||||
# Token Ring devices
|
||||
|
@ -658,7 +674,6 @@ CONFIG_E1000_NAPI=y
|
|||
CONFIG_WAN=y
|
||||
# CONFIG_DSCC4 is not set
|
||||
# CONFIG_LANMEDIA is not set
|
||||
# CONFIG_SYNCLINK_SYNCPPP is not set
|
||||
CONFIG_HDLC=y
|
||||
CONFIG_HDLC_RAW=y
|
||||
# CONFIG_HDLC_RAW_ETH is not set
|
||||
|
@ -775,6 +790,7 @@ CONFIG_WATCHDOG=y
|
|||
# USB-based Watchdog Cards
|
||||
#
|
||||
# CONFIG_USBPCWATCHDOG is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
# CONFIG_NVRAM is not set
|
||||
# CONFIG_DTLK is not set
|
||||
# CONFIG_R3964 is not set
|
||||
|
@ -817,6 +833,7 @@ CONFIG_I2C_ALGOBIT=y
|
|||
# CONFIG_I2C_I810 is not set
|
||||
# CONFIG_I2C_PIIX4 is not set
|
||||
# CONFIG_I2C_NFORCE2 is not set
|
||||
# CONFIG_I2C_OCORES is not set
|
||||
# CONFIG_I2C_PARPORT_LIGHT is not set
|
||||
# CONFIG_I2C_PROSAVAGE is not set
|
||||
# CONFIG_I2C_SAVAGE4 is not set
|
||||
|
@ -853,13 +870,13 @@ CONFIG_SENSORS_EEPROM=y
|
|||
#
|
||||
# Dallas's 1-wire bus
|
||||
#
|
||||
# CONFIG_W1 is not set
|
||||
|
||||
#
|
||||
# Hardware Monitoring support
|
||||
#
|
||||
CONFIG_HWMON=y
|
||||
# CONFIG_HWMON_VID is not set
|
||||
# CONFIG_SENSORS_ABITUGURU is not set
|
||||
# CONFIG_SENSORS_ADM1021 is not set
|
||||
# CONFIG_SENSORS_ADM1025 is not set
|
||||
# CONFIG_SENSORS_ADM1026 is not set
|
||||
|
@ -888,10 +905,12 @@ CONFIG_HWMON=y
|
|||
# CONFIG_SENSORS_PC87360 is not set
|
||||
# CONFIG_SENSORS_SIS5595 is not set
|
||||
# CONFIG_SENSORS_SMSC47M1 is not set
|
||||
# CONFIG_SENSORS_SMSC47M192 is not set
|
||||
# CONFIG_SENSORS_SMSC47B397 is not set
|
||||
# CONFIG_SENSORS_VIA686A is not set
|
||||
# CONFIG_SENSORS_VT8231 is not set
|
||||
# CONFIG_SENSORS_W83781D is not set
|
||||
# CONFIG_SENSORS_W83791D is not set
|
||||
# CONFIG_SENSORS_W83792D is not set
|
||||
# CONFIG_SENSORS_W83L785TS is not set
|
||||
# CONFIG_SENSORS_W83627HF is not set
|
||||
|
@ -919,6 +938,7 @@ CONFIG_HWMON=y
|
|||
# Multimedia devices
|
||||
#
|
||||
# CONFIG_VIDEO_DEV is not set
|
||||
CONFIG_VIDEO_V4L2=y
|
||||
|
||||
#
|
||||
# Digital Video Broadcasting Devices
|
||||
|
@ -929,6 +949,7 @@ CONFIG_HWMON=y
|
|||
#
|
||||
# Graphics support
|
||||
#
|
||||
# CONFIG_FIRMWARE_EDID is not set
|
||||
# CONFIG_FB is not set
|
||||
|
||||
#
|
||||
|
@ -959,6 +980,7 @@ CONFIG_USB=y
|
|||
CONFIG_USB_EHCI_HCD=y
|
||||
# CONFIG_USB_EHCI_SPLIT_ISO is not set
|
||||
# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
|
||||
# CONFIG_USB_EHCI_TT_NEWSCHED is not set
|
||||
# CONFIG_USB_ISP116X_HCD is not set
|
||||
CONFIG_USB_OHCI_HCD=y
|
||||
# CONFIG_USB_OHCI_BIG_ENDIAN is not set
|
||||
|
@ -1050,10 +1072,12 @@ CONFIG_USB_MON=y
|
|||
# CONFIG_USB_LEGOTOWER is not set
|
||||
# CONFIG_USB_LCD is not set
|
||||
# CONFIG_USB_LED is not set
|
||||
# CONFIG_USB_CY7C63 is not set
|
||||
# CONFIG_USB_CYTHERM is not set
|
||||
# CONFIG_USB_PHIDGETKIT is not set
|
||||
# CONFIG_USB_PHIDGETSERVO is not set
|
||||
# CONFIG_USB_IDMOUSE is not set
|
||||
# CONFIG_USB_APPLEDISPLAY is not set
|
||||
# CONFIG_USB_SISUSBVGA is not set
|
||||
# CONFIG_USB_LD is not set
|
||||
|
||||
|
@ -1100,6 +1124,7 @@ CONFIG_FS_POSIX_ACL=y
|
|||
# CONFIG_MINIX_FS is not set
|
||||
# CONFIG_ROMFS_FS is not set
|
||||
CONFIG_INOTIFY=y
|
||||
CONFIG_INOTIFY_USER=y
|
||||
# CONFIG_QUOTA is not set
|
||||
CONFIG_DNOTIFY=y
|
||||
# CONFIG_AUTOFS_FS is not set
|
||||
|
@ -1146,6 +1171,7 @@ CONFIG_JFFS2_FS=y
|
|||
CONFIG_JFFS2_FS_DEBUG=0
|
||||
CONFIG_JFFS2_FS_WRITEBUFFER=y
|
||||
# CONFIG_JFFS2_SUMMARY is not set
|
||||
# CONFIG_JFFS2_FS_XATTR is not set
|
||||
# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
|
||||
CONFIG_JFFS2_ZLIB=y
|
||||
CONFIG_JFFS2_RTIME=y
|
||||
|
@ -1175,6 +1201,7 @@ CONFIG_SUNRPC=y
|
|||
# CONFIG_RPCSEC_GSS_SPKM3 is not set
|
||||
# CONFIG_SMB_FS is not set
|
||||
# CONFIG_CIFS is not set
|
||||
# CONFIG_CIFS_DEBUG2 is not set
|
||||
# CONFIG_NCP_FS is not set
|
||||
# CONFIG_CODA_FS is not set
|
||||
# CONFIG_AFS_FS is not set
|
||||
|
@ -1255,14 +1282,19 @@ CONFIG_NLS_CODEPAGE_437=y
|
|||
#
|
||||
# CONFIG_PRINTK_TIME is not set
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
# CONFIG_UNUSED_SYMBOLS is not set
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_DETECT_SOFTLOCKUP=y
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
# CONFIG_DEBUG_SLAB is not set
|
||||
CONFIG_DEBUG_MUTEXES=y
|
||||
# CONFIG_DEBUG_RT_MUTEXES is not set
|
||||
# CONFIG_RT_MUTEX_TESTER is not set
|
||||
# CONFIG_DEBUG_SPINLOCK is not set
|
||||
CONFIG_DEBUG_MUTEXES=y
|
||||
# CONFIG_DEBUG_RWSEMS is not set
|
||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
|
||||
# CONFIG_DEBUG_KOBJECT is not set
|
||||
CONFIG_DEBUG_BUGVERBOSE=y
|
||||
# CONFIG_DEBUG_INFO is not set
|
||||
|
@ -1302,3 +1334,4 @@ CONFIG_CRC32=y
|
|||
# CONFIG_LIBCRC32C is not set
|
||||
CONFIG_ZLIB_INFLATE=y
|
||||
CONFIG_ZLIB_DEFLATE=y
|
||||
CONFIG_PLIST=y
|
||||
|
|
|
@ -1,15 +1,19 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.17-git2
|
||||
# Wed Jun 21 22:20:18 2006
|
||||
# Linux kernel version: 2.6.18-rc1
|
||||
# Sun Jul 9 14:15:23 2006
|
||||
#
|
||||
CONFIG_ARM=y
|
||||
CONFIG_MMU=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_HARDIRQS_SW_RESEND=y
|
||||
CONFIG_GENERIC_IRQ_PROBE=y
|
||||
CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
||||
CONFIG_GENERIC_HWEIGHT=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_ARCH_MTD_XIP=y
|
||||
CONFIG_VECTORS_BASE=0xffff0000
|
||||
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
||||
|
||||
#
|
||||
# Code maturity level options
|
||||
|
@ -43,10 +47,12 @@ CONFIG_PRINTK=y
|
|||
CONFIG_BUG=y
|
||||
CONFIG_ELF_CORE=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_RT_MUTEXES=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_SLAB=y
|
||||
CONFIG_VM_EVENT_COUNTERS=y
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
# CONFIG_SLOB is not set
|
||||
|
@ -85,7 +91,7 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
|
|||
# CONFIG_ARCH_INTEGRATOR is not set
|
||||
# CONFIG_ARCH_REALVIEW is not set
|
||||
# CONFIG_ARCH_VERSATILE is not set
|
||||
# CONFIG_ARCH_AT91RM9200 is not set
|
||||
# CONFIG_ARCH_AT91 is not set
|
||||
# CONFIG_ARCH_CLPS7500 is not set
|
||||
# CONFIG_ARCH_CLPS711X is not set
|
||||
# CONFIG_ARCH_CO285 is not set
|
||||
|
@ -117,6 +123,7 @@ CONFIG_MACH_LOGICPD_PXA270=y
|
|||
# CONFIG_MACH_MAINSTONE is not set
|
||||
# CONFIG_ARCH_PXA_IDP is not set
|
||||
# CONFIG_PXA_SHARPSL is not set
|
||||
# CONFIG_MACH_TRIZEPS4 is not set
|
||||
CONFIG_PXA27x=y
|
||||
CONFIG_IWMMXT=y
|
||||
|
||||
|
@ -161,6 +168,7 @@ CONFIG_FLATMEM=y
|
|||
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||
# CONFIG_SPARSEMEM_STATIC is not set
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4096
|
||||
# CONFIG_RESOURCES_64BIT is not set
|
||||
CONFIG_ALIGNMENT_TRAP=y
|
||||
|
||||
#
|
||||
|
@ -194,8 +202,6 @@ CONFIG_BINFMT_ELF=y
|
|||
# Power management options
|
||||
#
|
||||
# CONFIG_PM is not set
|
||||
# CONFIG_PM_LEGACY is not set
|
||||
# CONFIG_PM_DEBUG is not set
|
||||
# CONFIG_APM is not set
|
||||
|
||||
#
|
||||
|
@ -293,6 +299,7 @@ CONFIG_STANDALONE=y
|
|||
CONFIG_PREVENT_FIRMWARE_BUILD=y
|
||||
# CONFIG_FW_LOADER is not set
|
||||
# CONFIG_DEBUG_DRIVER is not set
|
||||
# CONFIG_SYS_HYPERVISOR is not set
|
||||
|
||||
#
|
||||
# Connector - unified userspace <-> kernelspace linker
|
||||
|
@ -561,6 +568,7 @@ CONFIG_SERIO_LIBPS2=y
|
|||
CONFIG_VT=y
|
||||
CONFIG_VT_CONSOLE=y
|
||||
CONFIG_HW_CONSOLE=y
|
||||
# CONFIG_VT_HW_CONSOLE_BINDING is not set
|
||||
# CONFIG_SERIAL_NONSTANDARD is not set
|
||||
|
||||
#
|
||||
|
@ -588,6 +596,7 @@ CONFIG_LEGACY_PTY_COUNT=256
|
|||
# Watchdog Cards
|
||||
#
|
||||
# CONFIG_WATCHDOG is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
# CONFIG_NVRAM is not set
|
||||
# CONFIG_DTLK is not set
|
||||
# CONFIG_R3964 is not set
|
||||
|
@ -617,13 +626,13 @@ CONFIG_LEGACY_PTY_COUNT=256
|
|||
#
|
||||
# Dallas's 1-wire bus
|
||||
#
|
||||
# CONFIG_W1 is not set
|
||||
|
||||
#
|
||||
# Hardware Monitoring support
|
||||
#
|
||||
CONFIG_HWMON=y
|
||||
# CONFIG_HWMON_VID is not set
|
||||
# CONFIG_SENSORS_ABITUGURU is not set
|
||||
# CONFIG_SENSORS_F71805F is not set
|
||||
# CONFIG_HWMON_DEBUG_CHIP is not set
|
||||
|
||||
|
@ -658,12 +667,13 @@ CONFIG_VIDEO_V4L2=y
|
|||
#
|
||||
# Graphics support
|
||||
#
|
||||
# CONFIG_FIRMWARE_EDID is not set
|
||||
CONFIG_FB=y
|
||||
CONFIG_FB_CFB_FILLRECT=y
|
||||
CONFIG_FB_CFB_COPYAREA=y
|
||||
CONFIG_FB_CFB_IMAGEBLIT=y
|
||||
# CONFIG_FB_MACMODES is not set
|
||||
CONFIG_FB_FIRMWARE_EDID=y
|
||||
# CONFIG_FB_BACKLIGHT is not set
|
||||
# CONFIG_FB_MODE_HELPERS is not set
|
||||
# CONFIG_FB_TILEBLITTING is not set
|
||||
# CONFIG_FB_S1D13XXX is not set
|
||||
|
@ -822,6 +832,7 @@ CONFIG_JFFS2_FS=y
|
|||
CONFIG_JFFS2_FS_DEBUG=0
|
||||
CONFIG_JFFS2_FS_WRITEBUFFER=y
|
||||
# CONFIG_JFFS2_SUMMARY is not set
|
||||
# CONFIG_JFFS2_FS_XATTR is not set
|
||||
# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
|
||||
CONFIG_JFFS2_ZLIB=y
|
||||
CONFIG_JFFS2_RTIME=y
|
||||
|
@ -849,6 +860,7 @@ CONFIG_SUNRPC=y
|
|||
# CONFIG_RPCSEC_GSS_SPKM3 is not set
|
||||
# CONFIG_SMB_FS is not set
|
||||
# CONFIG_CIFS is not set
|
||||
# CONFIG_CIFS_DEBUG2 is not set
|
||||
# CONFIG_NCP_FS is not set
|
||||
# CONFIG_CODA_FS is not set
|
||||
# CONFIG_AFS_FS is not set
|
||||
|
@ -914,14 +926,19 @@ CONFIG_NLS_ISO8859_1=y
|
|||
#
|
||||
# CONFIG_PRINTK_TIME is not set
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
# CONFIG_UNUSED_SYMBOLS is not set
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_DETECT_SOFTLOCKUP=y
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
# CONFIG_DEBUG_SLAB is not set
|
||||
# CONFIG_DEBUG_MUTEXES is not set
|
||||
# CONFIG_DEBUG_RT_MUTEXES is not set
|
||||
# CONFIG_RT_MUTEX_TESTER is not set
|
||||
# CONFIG_DEBUG_SPINLOCK is not set
|
||||
# CONFIG_DEBUG_MUTEXES is not set
|
||||
# CONFIG_DEBUG_RWSEMS is not set
|
||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
|
||||
# CONFIG_DEBUG_KOBJECT is not set
|
||||
CONFIG_DEBUG_BUGVERBOSE=y
|
||||
CONFIG_DEBUG_INFO=y
|
||||
|
@ -961,3 +978,4 @@ CONFIG_CRC32=y
|
|||
# CONFIG_LIBCRC32C is not set
|
||||
CONFIG_ZLIB_INFLATE=y
|
||||
CONFIG_ZLIB_DEFLATE=y
|
||||
CONFIG_PLIST=y
|
||||
|
|
|
@ -1,14 +1,18 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.17-git10
|
||||
# Mon Jun 26 13:45:44 2006
|
||||
# Linux kernel version: 2.6.18-rc1
|
||||
# Sun Jul 9 14:16:20 2006
|
||||
#
|
||||
CONFIG_ARM=y
|
||||
CONFIG_MMU=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_HARDIRQS_SW_RESEND=y
|
||||
CONFIG_GENERIC_IRQ_PROBE=y
|
||||
CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
||||
CONFIG_GENERIC_HWEIGHT=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_VECTORS_BASE=0xffff0000
|
||||
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
||||
|
||||
#
|
||||
# Code maturity level options
|
||||
|
@ -42,10 +46,12 @@ CONFIG_PRINTK=y
|
|||
CONFIG_BUG=y
|
||||
CONFIG_ELF_CORE=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_RT_MUTEXES=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_SLAB=y
|
||||
CONFIG_VM_EVENT_COUNTERS=y
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
# CONFIG_SLOB is not set
|
||||
|
@ -86,7 +92,6 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
|
|||
# CONFIG_ARCH_REALVIEW is not set
|
||||
# CONFIG_ARCH_VERSATILE is not set
|
||||
CONFIG_ARCH_AT91=y
|
||||
CONFIG_ARCH_AT91RM9200=y
|
||||
# CONFIG_ARCH_CLPS7500 is not set
|
||||
# CONFIG_ARCH_CLPS711X is not set
|
||||
# CONFIG_ARCH_CO285 is not set
|
||||
|
@ -111,9 +116,16 @@ CONFIG_ARCH_AT91RM9200=y
|
|||
# CONFIG_ARCH_OMAP is not set
|
||||
|
||||
#
|
||||
# AT91RM9200 Implementations
|
||||
# Atmel AT91 System-on-Chip
|
||||
#
|
||||
|
||||
#
|
||||
# Atmel AT91 Processors
|
||||
#
|
||||
CONFIG_ARCH_AT91RM9200=y
|
||||
# CONFIG_ARCH_AT91SAM9260 is not set
|
||||
# CONFIG_ARCH_AT91SAM9261 is not set
|
||||
|
||||
#
|
||||
# AT91RM9200 Board Type
|
||||
#
|
||||
|
@ -123,12 +135,12 @@ CONFIG_MACH_ONEARM=y
|
|||
# CONFIG_MACH_CSB337 is not set
|
||||
# CONFIG_MACH_CSB637 is not set
|
||||
# CONFIG_MACH_CARMEVA is not set
|
||||
# CONFIG_MACH_KB9200 is not set
|
||||
# CONFIG_MACH_ATEB9200 is not set
|
||||
# CONFIG_MACH_KB9200 is not set
|
||||
# CONFIG_MACH_KAFA is not set
|
||||
|
||||
#
|
||||
# AT91RM9200 Feature Selections
|
||||
# AT91 Feature Selections
|
||||
#
|
||||
CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
|
||||
|
||||
|
@ -186,6 +198,7 @@ CONFIG_FLATMEM=y
|
|||
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||
# CONFIG_SPARSEMEM_STATIC is not set
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4096
|
||||
# CONFIG_RESOURCES_64BIT is not set
|
||||
CONFIG_LEDS=y
|
||||
CONFIG_LEDS_TIMER=y
|
||||
# CONFIG_LEDS_CPU is not set
|
||||
|
@ -600,6 +613,7 @@ CONFIG_AT91_WATCHDOG=y
|
|||
# USB-based Watchdog Cards
|
||||
#
|
||||
# CONFIG_USBPCWATCHDOG is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
# CONFIG_NVRAM is not set
|
||||
# CONFIG_DTLK is not set
|
||||
# CONFIG_R3964 is not set
|
||||
|
@ -743,6 +757,7 @@ CONFIG_VIDEO_V4L2=y
|
|||
#
|
||||
# Graphics support
|
||||
#
|
||||
# CONFIG_FIRMWARE_EDID is not set
|
||||
# CONFIG_FB is not set
|
||||
|
||||
#
|
||||
|
@ -980,6 +995,7 @@ CONFIG_SUNRPC=y
|
|||
# CONFIG_RPCSEC_GSS_SPKM3 is not set
|
||||
# CONFIG_SMB_FS is not set
|
||||
# CONFIG_CIFS is not set
|
||||
# CONFIG_CIFS_DEBUG2 is not set
|
||||
# CONFIG_NCP_FS is not set
|
||||
# CONFIG_CODA_FS is not set
|
||||
# CONFIG_AFS_FS is not set
|
||||
|
@ -1006,14 +1022,19 @@ CONFIG_MSDOS_PARTITION=y
|
|||
#
|
||||
# CONFIG_PRINTK_TIME is not set
|
||||
# CONFIG_MAGIC_SYSRQ is not set
|
||||
# CONFIG_UNUSED_SYMBOLS is not set
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_DETECT_SOFTLOCKUP=y
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
# CONFIG_DEBUG_SLAB is not set
|
||||
# CONFIG_DEBUG_MUTEXES is not set
|
||||
# CONFIG_DEBUG_RT_MUTEXES is not set
|
||||
# CONFIG_RT_MUTEX_TESTER is not set
|
||||
# CONFIG_DEBUG_SPINLOCK is not set
|
||||
# CONFIG_DEBUG_MUTEXES is not set
|
||||
# CONFIG_DEBUG_RWSEMS is not set
|
||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
|
||||
# CONFIG_DEBUG_KOBJECT is not set
|
||||
CONFIG_DEBUG_BUGVERBOSE=y
|
||||
# CONFIG_DEBUG_INFO is not set
|
||||
|
@ -1052,3 +1073,4 @@ CONFIG_DEBUG_LL=y
|
|||
CONFIG_CRC32=y
|
||||
# CONFIG_LIBCRC32C is not set
|
||||
CONFIG_ZLIB_INFLATE=y
|
||||
CONFIG_PLIST=y
|
||||
|
|
|
@ -370,17 +370,6 @@ void __devinit pcibios_fixup_bus(struct pci_bus *bus)
|
|||
features &= ~(PCI_COMMAND_SERR | PCI_COMMAND_PARITY);
|
||||
|
||||
switch (dev->class >> 8) {
|
||||
#if defined(CONFIG_ISA) || defined(CONFIG_EISA)
|
||||
case PCI_CLASS_BRIDGE_ISA:
|
||||
case PCI_CLASS_BRIDGE_EISA:
|
||||
/*
|
||||
* If this device is an ISA bridge, set isa_bridge
|
||||
* to point at this device. We will then go looking
|
||||
* for things like keyboard, etc.
|
||||
*/
|
||||
isa_bridge = dev;
|
||||
break;
|
||||
#endif
|
||||
case PCI_CLASS_BRIDGE_PCI:
|
||||
pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &status);
|
||||
status |= PCI_BRIDGE_CTL_PARITY|PCI_BRIDGE_CTL_MASTER_ABORT;
|
||||
|
|
|
@ -114,9 +114,9 @@ ENTRY(secondary_startup)
|
|||
* Use the page tables supplied from __cpu_up.
|
||||
*/
|
||||
adr r4, __secondary_data
|
||||
ldmia r4, {r5, r6, r13} @ address to jump to after
|
||||
ldmia r4, {r5, r7, r13} @ address to jump to after
|
||||
sub r4, r4, r5 @ mmu has been enabled
|
||||
ldr r4, [r6, r4] @ get secondary_data.pgdir
|
||||
ldr r4, [r7, r4] @ get secondary_data.pgdir
|
||||
adr lr, __enable_mmu @ return address
|
||||
add pc, r10, #12 @ initialise processor
|
||||
@ (return control reg)
|
||||
|
@ -125,7 +125,7 @@ ENTRY(secondary_startup)
|
|||
* r6 = &secondary_data
|
||||
*/
|
||||
ENTRY(__secondary_switched)
|
||||
ldr sp, [r6, #4] @ get secondary_data.stack
|
||||
ldr sp, [r7, #4] @ get secondary_data.stack
|
||||
mov fp, #0
|
||||
b secondary_start_kernel
|
||||
|
||||
|
|
|
@ -167,6 +167,16 @@ void __init init_IRQ(void)
|
|||
}
|
||||
|
||||
#ifdef CONFIG_HOTPLUG_CPU
|
||||
|
||||
static void route_irq(struct irqdesc *desc, unsigned int irq, unsigned int cpu)
|
||||
{
|
||||
pr_debug("IRQ%u: moving from cpu%u to cpu%u\n", irq, desc->cpu, cpu);
|
||||
|
||||
spin_lock_irq(&desc->lock);
|
||||
desc->chip->set_affinity(irq, cpumask_of_cpu(cpu));
|
||||
spin_unlock_irq(&desc->lock);
|
||||
}
|
||||
|
||||
/*
|
||||
* The CPU has been marked offline. Migrate IRQs off this CPU. If
|
||||
* the affinity settings do not allow other CPUs, force them onto any
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
#include <linux/console.h>
|
||||
#include <linux/bootmem.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/tty.h>
|
||||
#include <linux/screen_info.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/root_dev.h>
|
||||
#include <linux/cpu.h>
|
||||
|
|
|
@ -232,11 +232,8 @@ NORET_TYPE void die(const char *str, struct pt_regs *regs, int err)
|
|||
bust_spinlocks(0);
|
||||
spin_unlock_irq(&die_lock);
|
||||
|
||||
if (panic_on_oops) {
|
||||
printk(KERN_EMERG "Fatal exception: panic in 5 seconds\n");
|
||||
ssleep(5);
|
||||
panic("Fatal exception");
|
||||
}
|
||||
if (panic_on_oops)
|
||||
panic("Fatal exception: panic_on_oops");
|
||||
|
||||
do_exit(SIGSEGV);
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
#include <linux/ioport.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/tty.h>
|
||||
#include <linux/screen_info.h>
|
||||
|
||||
#include <asm/hardware/dec21285.h>
|
||||
#include <asm/io.h>
|
||||
|
|
|
@ -60,11 +60,12 @@ static struct map_desc anubis_iodesc[] __initdata = {
|
|||
.virtual = (u32)S3C24XX_VA_ISA_BYTE,
|
||||
.pfn = __phys_to_pfn(0x0),
|
||||
.length = SZ_4M,
|
||||
.type = MT_DEVICE
|
||||
.type = MT_DEVICE,
|
||||
}, {
|
||||
.virtual = (u32)S3C24XX_VA_ISA_WORD,
|
||||
.pfn = __phys_to_pfn(0x0),
|
||||
.length = SZ_4M, MT_DEVICE
|
||||
.length = SZ_4M,
|
||||
.type = MT_DEVICE,
|
||||
},
|
||||
|
||||
/* we could possibly compress the next set down into a set of smaller tables
|
||||
|
@ -78,36 +79,12 @@ static struct map_desc anubis_iodesc[] __initdata = {
|
|||
.virtual = (u32)ANUBIS_VA_CTRL1,
|
||||
.pfn = __phys_to_pfn(ANUBIS_PA_CTRL1),
|
||||
.length = SZ_4K,
|
||||
.type = MT_DEVICE
|
||||
.type = MT_DEVICE,
|
||||
}, {
|
||||
.virtual = (u32)ANUBIS_VA_CTRL2,
|
||||
.pfn = __phys_to_pfn(ANUBIS_PA_CTRL2),
|
||||
.length = SZ_4K,
|
||||
.type =MT_DEVICE
|
||||
},
|
||||
|
||||
/* IDE drives */
|
||||
|
||||
{
|
||||
.virtual = (u32)ANUBIS_IDEPRI,
|
||||
.pfn = __phys_to_pfn(S3C2410_CS3),
|
||||
.length = SZ_1M,
|
||||
.type = MT_DEVICE
|
||||
}, {
|
||||
.virtual = (u32)ANUBIS_IDEPRIAUX,
|
||||
.pfn = __phys_to_pfn(S3C2410_CS3+(1<<26)),
|
||||
.length = SZ_1M,
|
||||
.type = MT_DEVICE
|
||||
}, {
|
||||
.virtual = (u32)ANUBIS_IDESEC,
|
||||
.pfn = __phys_to_pfn(S3C2410_CS4),
|
||||
.length = SZ_1M,
|
||||
.type = MT_DEVICE
|
||||
}, {
|
||||
.virtual = (u32)ANUBIS_IDESECAUX,
|
||||
.pfn = __phys_to_pfn(S3C2410_CS4+(1<<26)),
|
||||
.length = SZ_1M,
|
||||
.type = MT_DEVICE
|
||||
.type = MT_DEVICE,
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -126,7 +103,7 @@ static struct s3c24xx_uart_clksrc anubis_serial_clocks[] = {
|
|||
.name = "pclk",
|
||||
.divisor = 1,
|
||||
.min_baud = 0,
|
||||
.max_baud = 0.
|
||||
.max_baud = 0,
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -139,7 +116,7 @@ static struct s3c2410_uartcfg anubis_uartcfgs[] __initdata = {
|
|||
.ulcon = ULCON,
|
||||
.ufcon = UFCON,
|
||||
.clocks = anubis_serial_clocks,
|
||||
.clocks_size = ARRAY_SIZE(anubis_serial_clocks)
|
||||
.clocks_size = ARRAY_SIZE(anubis_serial_clocks),
|
||||
},
|
||||
[1] = {
|
||||
.hwport = 2,
|
||||
|
@ -148,7 +125,7 @@ static struct s3c2410_uartcfg anubis_uartcfgs[] __initdata = {
|
|||
.ulcon = ULCON,
|
||||
.ufcon = UFCON,
|
||||
.clocks = anubis_serial_clocks,
|
||||
.clocks_size = ARRAY_SIZE(anubis_serial_clocks)
|
||||
.clocks_size = ARRAY_SIZE(anubis_serial_clocks),
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -162,7 +139,7 @@ static struct mtd_partition anubis_default_nand_part[] = {
|
|||
[0] = {
|
||||
.name = "Boot Agent",
|
||||
.size = SZ_16K,
|
||||
.offset = 0
|
||||
.offset = 0,
|
||||
},
|
||||
[1] = {
|
||||
.name = "/boot",
|
||||
|
@ -194,21 +171,21 @@ static struct s3c2410_nand_set anubis_nand_sets[] = {
|
|||
.nr_chips = 1,
|
||||
.nr_map = external_map,
|
||||
.nr_partitions = ARRAY_SIZE(anubis_default_nand_part),
|
||||
.partitions = anubis_default_nand_part
|
||||
.partitions = anubis_default_nand_part,
|
||||
},
|
||||
[0] = {
|
||||
.name = "chip0",
|
||||
.nr_chips = 1,
|
||||
.nr_map = chip0_map,
|
||||
.nr_partitions = ARRAY_SIZE(anubis_default_nand_part),
|
||||
.partitions = anubis_default_nand_part
|
||||
.partitions = anubis_default_nand_part,
|
||||
},
|
||||
[2] = {
|
||||
.name = "chip1",
|
||||
.nr_chips = 1,
|
||||
.nr_map = chip1_map,
|
||||
.nr_partitions = ARRAY_SIZE(anubis_default_nand_part),
|
||||
.partitions = anubis_default_nand_part
|
||||
.partitions = anubis_default_nand_part,
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -313,7 +290,7 @@ static struct s3c24xx_board anubis_board __initdata = {
|
|||
.devices = anubis_devices,
|
||||
.devices_count = ARRAY_SIZE(anubis_devices),
|
||||
.clocks = anubis_clocks,
|
||||
.clocks_count = ARRAY_SIZE(anubis_clocks)
|
||||
.clocks_count = ARRAY_SIZE(anubis_clocks),
|
||||
};
|
||||
|
||||
static void __init anubis_map_io(void)
|
||||
|
|
|
@ -67,12 +67,12 @@ static struct map_desc osiris_iodesc[] __initdata = {
|
|||
.virtual = (u32)OSIRIS_VA_CTRL1,
|
||||
.pfn = __phys_to_pfn(OSIRIS_PA_CTRL1),
|
||||
.length = SZ_16K,
|
||||
.type = MT_DEVICE
|
||||
.type = MT_DEVICE,
|
||||
}, {
|
||||
.virtual = (u32)OSIRIS_VA_CTRL2,
|
||||
.pfn = __phys_to_pfn(OSIRIS_PA_CTRL2),
|
||||
.length = SZ_16K,
|
||||
.type = MT_DEVICE
|
||||
.type = MT_DEVICE,
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -91,7 +91,7 @@ static struct s3c24xx_uart_clksrc osiris_serial_clocks[] = {
|
|||
.name = "pclk",
|
||||
.divisor = 1,
|
||||
.min_baud = 0,
|
||||
.max_baud = 0.
|
||||
.max_baud = 0,
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -103,7 +103,7 @@ static struct s3c2410_uartcfg osiris_uartcfgs[] __initdata = {
|
|||
.ulcon = ULCON,
|
||||
.ufcon = UFCON,
|
||||
.clocks = osiris_serial_clocks,
|
||||
.clocks_size = ARRAY_SIZE(osiris_serial_clocks)
|
||||
.clocks_size = ARRAY_SIZE(osiris_serial_clocks),
|
||||
},
|
||||
[1] = {
|
||||
.hwport = 1,
|
||||
|
@ -112,7 +112,7 @@ static struct s3c2410_uartcfg osiris_uartcfgs[] __initdata = {
|
|||
.ulcon = ULCON,
|
||||
.ufcon = UFCON,
|
||||
.clocks = osiris_serial_clocks,
|
||||
.clocks_size = ARRAY_SIZE(osiris_serial_clocks)
|
||||
.clocks_size = ARRAY_SIZE(osiris_serial_clocks),
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -126,7 +126,7 @@ static struct mtd_partition osiris_default_nand_part[] = {
|
|||
[0] = {
|
||||
.name = "Boot Agent",
|
||||
.size = SZ_16K,
|
||||
.offset = 0
|
||||
.offset = 0,
|
||||
},
|
||||
[1] = {
|
||||
.name = "/boot",
|
||||
|
@ -158,21 +158,21 @@ static struct s3c2410_nand_set osiris_nand_sets[] = {
|
|||
.nr_chips = 1,
|
||||
.nr_map = external_map,
|
||||
.nr_partitions = ARRAY_SIZE(osiris_default_nand_part),
|
||||
.partitions = osiris_default_nand_part
|
||||
.partitions = osiris_default_nand_part,
|
||||
},
|
||||
[0] = {
|
||||
.name = "chip0",
|
||||
.nr_chips = 1,
|
||||
.nr_map = chip0_map,
|
||||
.nr_partitions = ARRAY_SIZE(osiris_default_nand_part),
|
||||
.partitions = osiris_default_nand_part
|
||||
.partitions = osiris_default_nand_part,
|
||||
},
|
||||
[2] = {
|
||||
.name = "chip1",
|
||||
.nr_chips = 1,
|
||||
.nr_map = chip1_map,
|
||||
.nr_partitions = ARRAY_SIZE(osiris_default_nand_part),
|
||||
.partitions = osiris_default_nand_part
|
||||
.partitions = osiris_default_nand_part,
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -245,7 +245,7 @@ static struct s3c24xx_board osiris_board __initdata = {
|
|||
.devices = osiris_devices,
|
||||
.devices_count = ARRAY_SIZE(osiris_devices),
|
||||
.clocks = osiris_clocks,
|
||||
.clocks_count = ARRAY_SIZE(osiris_clocks)
|
||||
.clocks_count = ARRAY_SIZE(osiris_clocks),
|
||||
};
|
||||
|
||||
static void __init osiris_map_io(void)
|
||||
|
|
|
@ -83,8 +83,8 @@ static struct scoop_pcmcia_config collie_pcmcia_config = {
|
|||
|
||||
|
||||
static struct mcp_plat_data collie_mcp_data = {
|
||||
.mccr0 = MCCR0_ADM,
|
||||
.sclk_rate = 11981000,
|
||||
.mccr0 = MCCR0_ADM | MCCR0_ExtClk,
|
||||
.sclk_rate = 9216000,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_SHARP_LOCOMO
|
||||
|
|
|
@ -9,6 +9,9 @@
|
|||
* Li-ion batteries are angry beasts, and they like to explode. This driver is not finished,
|
||||
* and sometimes charges them when it should not. If it makes angry lithium to come your way...
|
||||
* ...well, you have been warned.
|
||||
*
|
||||
* Actually, this should be quite safe, it seems sharp leaves charger enabled by default,
|
||||
* and my collie did not explode (yet).
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
|
@ -40,9 +43,8 @@ static void collie_charger_init(void)
|
|||
{
|
||||
int err;
|
||||
|
||||
if (sharpsl_param.adadj != -1) {
|
||||
if (sharpsl_param.adadj != -1)
|
||||
ad_revise = sharpsl_param.adadj;
|
||||
}
|
||||
|
||||
/* Register interrupt handler. */
|
||||
if ((err = request_irq(COLLIE_IRQ_GPIO_AC_IN, sharpsl_ac_isr, IRQF_DISABLED,
|
||||
|
@ -72,27 +74,17 @@ static void collie_measure_temp(int on)
|
|||
|
||||
static void collie_charge(int on)
|
||||
{
|
||||
if (on) {
|
||||
printk("Should start charger\n");
|
||||
} else {
|
||||
printk("Should stop charger\n");
|
||||
}
|
||||
#ifdef I_AM_SURE
|
||||
extern struct platform_device colliescoop_device;
|
||||
|
||||
/* Zaurus seems to contain LTC1731 ; it should know when to
|
||||
/* Zaurus seems to contain LTC1731; it should know when to
|
||||
* stop charging itself, so setting charge on should be
|
||||
* relatively harmless (as long as it is not done too often).
|
||||
*/
|
||||
#define CF_BUF_CTRL_BASE 0xF0800000
|
||||
#define SCOOP_REG(adr) (*(volatile unsigned short*)(CF_BUF_CTRL_BASE+(adr)))
|
||||
#define SCOOP_REG_GPWR SCOOP_REG(SCOOP_GPWR)
|
||||
|
||||
if (on) {
|
||||
set_scoop_gpio(&colliescoop_device.dev, COLLIE_SCP_CHARGE_ON);
|
||||
} else {
|
||||
reset_scoop_gpio(&colliescoop_device.dev, COLLIE_SCP_CHARGE_ON);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static void collie_discharge(int on)
|
||||
|
@ -127,7 +119,6 @@ int collie_read_backup_battery(void)
|
|||
|
||||
ucb1x00_adc_enable(ucb);
|
||||
|
||||
/* Gives 75..130 */
|
||||
ucb1x00_io_write(ucb, COLLIE_TC35143_GPIO_BBAT_ON, 0);
|
||||
voltage = ucb1x00_adc_read(ucb, UCB_ADC_INP_AD1, UCB_SYNC);
|
||||
|
||||
|
@ -146,9 +137,8 @@ int collie_read_main_battery(void)
|
|||
ucb1x00_adc_enable(ucb);
|
||||
ucb1x00_io_write(ucb, 0, COLLIE_TC35143_GPIO_BBAT_ON);
|
||||
ucb1x00_io_write(ucb, COLLIE_TC35143_GPIO_MBAT_ON, 0);
|
||||
/* gives values 160..255 with battery removed... and
|
||||
145..255 with battery inserted. (on AC), goes as low as
|
||||
80 on DC. */
|
||||
|
||||
mdelay(1);
|
||||
voltage = ucb1x00_adc_read(ucb, UCB_ADC_INP_AD1, UCB_SYNC);
|
||||
|
||||
ucb1x00_io_write(ucb, 0, COLLIE_TC35143_GPIO_MBAT_ON);
|
||||
|
@ -192,7 +182,7 @@ static unsigned long read_devdata(int which)
|
|||
case SHARPSL_BATT_TEMP:
|
||||
return collie_read_temp();
|
||||
case SHARPSL_ACIN_VOLT:
|
||||
return 0x1;
|
||||
return 500;
|
||||
case SHARPSL_STATUS_ACIN: {
|
||||
int ret = GPLR & COLLIE_GPIO_AC_IN;
|
||||
printk("AC status = %d\n", ret);
|
||||
|
@ -208,10 +198,33 @@ static unsigned long read_devdata(int which)
|
|||
}
|
||||
}
|
||||
|
||||
struct battery_thresh collie_battery_levels_acin[] = {
|
||||
{ 420, 100},
|
||||
{ 417, 95},
|
||||
{ 415, 90},
|
||||
{ 413, 80},
|
||||
{ 411, 75},
|
||||
{ 408, 70},
|
||||
{ 406, 60},
|
||||
{ 403, 50},
|
||||
{ 398, 40},
|
||||
{ 391, 25},
|
||||
{ 10, 5},
|
||||
{ 0, 0},
|
||||
};
|
||||
|
||||
struct battery_thresh collie_battery_levels[] = {
|
||||
{ 368, 100},
|
||||
{ 358, 25},
|
||||
{ 356, 5},
|
||||
{ 394, 100},
|
||||
{ 390, 95},
|
||||
{ 380, 90},
|
||||
{ 370, 80},
|
||||
{ 368, 75}, /* From sharp code: battery high with frontlight */
|
||||
{ 366, 70}, /* 60..90 -- fake values invented by me for testing */
|
||||
{ 364, 60},
|
||||
{ 362, 50},
|
||||
{ 360, 40},
|
||||
{ 358, 25}, /* From sharp code: battery low with frontlight */
|
||||
{ 356, 5}, /* From sharp code: battery verylow with frontlight */
|
||||
{ 0, 0},
|
||||
};
|
||||
|
||||
|
@ -226,13 +239,21 @@ struct sharpsl_charger_machinfo collie_pm_machinfo = {
|
|||
.postsuspend = collie_postsuspend,
|
||||
.charger_wakeup = collie_charger_wakeup,
|
||||
.should_wakeup = collie_should_wakeup,
|
||||
.bat_levels = 3,
|
||||
.bat_levels = 12,
|
||||
.bat_levels_noac = collie_battery_levels,
|
||||
.bat_levels_acin = collie_battery_levels,
|
||||
.bat_levels_acin = collie_battery_levels_acin,
|
||||
.status_high_acin = 368,
|
||||
.status_low_acin = 358,
|
||||
.status_high_noac = 368,
|
||||
.status_low_noac = 358,
|
||||
.charge_on_volt = 350, /* spitz uses 2.90V, but lets play it safe. */
|
||||
.charge_on_temp = 550,
|
||||
.charge_acin_high = 550, /* collie does not seem to have sensor for this, anyway */
|
||||
.charge_acin_low = 450, /* ignored, too */
|
||||
.fatal_acin_volt = 356,
|
||||
.fatal_noacin_volt = 356,
|
||||
|
||||
.batfull_irq = 1, /* We do not want periodical charge restarts */
|
||||
};
|
||||
|
||||
static int __init collie_pm_ucb_add(struct ucb1x00_dev *pdev)
|
||||
|
|
|
@ -35,6 +35,7 @@
|
|||
#include <asm/hardware/arm_timer.h>
|
||||
#include <asm/hardware/icst307.h>
|
||||
#include <asm/hardware/vic.h>
|
||||
#include <asm/mach-types.h>
|
||||
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/flash.h>
|
||||
|
@ -352,11 +353,7 @@ static const struct icst307_params versatile_oscvco_params = {
|
|||
static void versatile_oscvco_set(struct clk *clk, struct icst307_vco vco)
|
||||
{
|
||||
void __iomem *sys_lock = __io_address(VERSATILE_SYS_BASE) + VERSATILE_SYS_LOCK_OFFSET;
|
||||
#if defined(CONFIG_ARCH_VERSATILE_PB)
|
||||
void __iomem *sys_osc = __io_address(VERSATILE_SYS_BASE) + VERSATILE_SYS_OSC4_OFFSET;
|
||||
#elif defined(CONFIG_MACH_VERSATILE_AB)
|
||||
void __iomem *sys_osc = __io_address(VERSATILE_SYS_BASE) + VERSATILE_SYS_OSC1_OFFSET;
|
||||
#endif
|
||||
void __iomem *sys_osc = __io_address(VERSATILE_SYS_BASE) + VERSATILE_SYS_OSCCLCD_OFFSET;
|
||||
u32 val;
|
||||
|
||||
val = readl(sys_osc) & ~0x7ffff;
|
||||
|
@ -529,7 +526,7 @@ static void versatile_clcd_disable(struct clcd_fb *fb)
|
|||
/*
|
||||
* If the LCD is Sanyo 2x5 in on the IB2 board, turn the back-light off
|
||||
*/
|
||||
if (fb->panel == &sanyo_2_5_in) {
|
||||
if (machine_is_versatile_ab() && fb->panel == &sanyo_2_5_in) {
|
||||
void __iomem *versatile_ib2_ctrl = __io_address(VERSATILE_IB2_CTRL);
|
||||
unsigned long ctrl;
|
||||
|
||||
|
@ -578,7 +575,7 @@ static void versatile_clcd_enable(struct clcd_fb *fb)
|
|||
/*
|
||||
* If the LCD is Sanyo 2x5 in on the IB2 board, turn the back-light on
|
||||
*/
|
||||
if (fb->panel == &sanyo_2_5_in) {
|
||||
if (machine_is_versatile_ab() && fb->panel == &sanyo_2_5_in) {
|
||||
void __iomem *versatile_ib2_ctrl = __io_address(VERSATILE_IB2_CTRL);
|
||||
unsigned long ctrl;
|
||||
|
||||
|
|
|
@ -363,7 +363,9 @@ EXPORT_SYMBOL(__ioremap);
|
|||
|
||||
void __iounmap(void __iomem *addr)
|
||||
{
|
||||
#ifndef CONFIG_SMP
|
||||
struct vm_struct **p, *tmp;
|
||||
#endif
|
||||
unsigned int section_mapping = 0;
|
||||
|
||||
addr = (void __iomem *)(PAGE_MASK & (unsigned long)addr);
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
#include <asm/cacheflush.h>
|
||||
#include <asm/proc-fns.h>
|
||||
#include <asm/tlbflush.h>
|
||||
#include <asm/page.h>
|
||||
|
||||
#ifndef MULTI_CPU
|
||||
EXPORT_SYMBOL(cpu_dcache_clean_area);
|
||||
|
@ -30,6 +31,13 @@ EXPORT_SYMBOL(__cpuc_coherent_kern_range);
|
|||
EXPORT_SYMBOL(cpu_cache);
|
||||
#endif
|
||||
|
||||
#ifndef MULTI_USER
|
||||
EXPORT_SYMBOL(__cpu_clear_user_page);
|
||||
EXPORT_SYMBOL(__cpu_copy_user_page);
|
||||
#else
|
||||
EXPORT_SYMBOL(cpu_user);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* No module should need to touch the TLB (and currently
|
||||
* no modules do. We export this for "loadkernel" support
|
||||
|
|
|
@ -536,6 +536,11 @@ cpu_80200_name:
|
|||
.asciz "XScale-80200"
|
||||
.size cpu_80200_name, . - cpu_80200_name
|
||||
|
||||
.type cpu_80219_name, #object
|
||||
cpu_80219_name:
|
||||
.asciz "XScale-80219"
|
||||
.size cpu_80219_name, . - cpu_80219_name
|
||||
|
||||
.type cpu_8032x_name, #object
|
||||
cpu_8032x_name:
|
||||
.asciz "XScale-IOP8032x Family"
|
||||
|
@ -613,10 +618,33 @@ __80200_proc_info:
|
|||
.long xscale_cache_fns
|
||||
.size __80200_proc_info, . - __80200_proc_info
|
||||
|
||||
.type __80219_proc_info,#object
|
||||
__80219_proc_info:
|
||||
.long 0x69052e20
|
||||
.long 0xffffffe0
|
||||
.long PMD_TYPE_SECT | \
|
||||
PMD_SECT_BUFFERABLE | \
|
||||
PMD_SECT_CACHEABLE | \
|
||||
PMD_SECT_AP_WRITE | \
|
||||
PMD_SECT_AP_READ
|
||||
.long PMD_TYPE_SECT | \
|
||||
PMD_SECT_AP_WRITE | \
|
||||
PMD_SECT_AP_READ
|
||||
b __xscale_setup
|
||||
.long cpu_arch_name
|
||||
.long cpu_elf_name
|
||||
.long HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP
|
||||
.long cpu_80219_name
|
||||
.long xscale_processor_functions
|
||||
.long v4wbi_tlb_fns
|
||||
.long xscale_mc_user_fns
|
||||
.long xscale_cache_fns
|
||||
.size __80219_proc_info, . - __80219_proc_info
|
||||
|
||||
.type __8032x_proc_info,#object
|
||||
__8032x_proc_info:
|
||||
.long 0x69052420
|
||||
.long 0xfffff5e0 @ mask should accomodate IOP80219 also
|
||||
.long 0xffffffe0
|
||||
.long PMD_TYPE_SECT | \
|
||||
PMD_SECT_BUFFERABLE | \
|
||||
PMD_SECT_CACHEABLE | \
|
||||
|
|
|
@ -61,7 +61,7 @@ typedef struct {
|
|||
u16 __padding;
|
||||
#endif
|
||||
u64 low;
|
||||
} floatx80;
|
||||
} __attribute__ ((packed,aligned(4))) floatx80;
|
||||
|
||||
/*
|
||||
-------------------------------------------------------------------------------
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
#include <linux/console.h>
|
||||
#include <linux/bootmem.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/tty.h>
|
||||
#include <linux/screen_info.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/root_dev.h>
|
||||
|
||||
|
|
|
@ -450,9 +450,9 @@ int __init eeprom_init(void)
|
|||
static int eeprom_open(struct inode * inode, struct file * file)
|
||||
{
|
||||
|
||||
if(MINOR(inode->i_rdev) != EEPROM_MINOR_NR)
|
||||
if(iminor(inode) != EEPROM_MINOR_NR)
|
||||
return -ENXIO;
|
||||
if(MAJOR(inode->i_rdev) != EEPROM_MAJOR_NR)
|
||||
if(imajor(inode) != EEPROM_MAJOR_NR)
|
||||
return -ENXIO;
|
||||
|
||||
if( eeprom.size > 0 )
|
||||
|
|
|
@ -435,7 +435,7 @@ static int
|
|||
gpio_open(struct inode *inode, struct file *filp)
|
||||
{
|
||||
struct gpio_private *priv;
|
||||
int p = MINOR(inode->i_rdev);
|
||||
int p = iminor(inode);
|
||||
|
||||
if (p > GPIO_MINOR_LAST)
|
||||
return -EINVAL;
|
||||
|
|
|
@ -2302,7 +2302,7 @@ static int cryptocop_job_setup(struct cryptocop_prio_job **pj, struct cryptocop_
|
|||
|
||||
static int cryptocop_open(struct inode *inode, struct file *filp)
|
||||
{
|
||||
int p = MINOR(inode->i_rdev);
|
||||
int p = iminor(inode);
|
||||
|
||||
if (p != CRYPTOCOP_MINOR) return -EINVAL;
|
||||
|
||||
|
|
|
@ -418,7 +418,7 @@ static int
|
|||
gpio_open(struct inode *inode, struct file *filp)
|
||||
{
|
||||
struct gpio_private *priv;
|
||||
int p = MINOR(inode->i_rdev);
|
||||
int p = iminor(inode);
|
||||
|
||||
if (p > GPIO_MINOR_LAST)
|
||||
return -EINVAL;
|
||||
|
|
|
@ -324,14 +324,12 @@ pcf8563_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned
|
|||
int
|
||||
pcf8563_open(struct inode *inode, struct file *filp)
|
||||
{
|
||||
MOD_INC_USE_COUNT;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
pcf8563_release(struct inode *inode, struct file *filp)
|
||||
{
|
||||
MOD_DEC_USE_COUNT;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -340,7 +340,7 @@ static inline int sync_data_avail_to_end(struct sync_port *port)
|
|||
|
||||
static int sync_serial_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
int dev = MINOR(inode->i_rdev);
|
||||
int dev = iminor(inode);
|
||||
sync_port* port;
|
||||
reg_dma_rw_cfg cfg = {.en = regk_dma_yes};
|
||||
reg_dma_rw_intr_mask intr_mask = {.data = regk_dma_yes};
|
||||
|
@ -486,7 +486,7 @@ static int sync_serial_open(struct inode *inode, struct file *file)
|
|||
|
||||
static int sync_serial_release(struct inode *inode, struct file *file)
|
||||
{
|
||||
int dev = MINOR(inode->i_rdev);
|
||||
int dev = iminor(inode);
|
||||
sync_port* port;
|
||||
|
||||
if (dev < 0 || dev >= NUMBER_OF_PORTS || !ports[dev].enabled)
|
||||
|
@ -504,7 +504,7 @@ static int sync_serial_release(struct inode *inode, struct file *file)
|
|||
|
||||
static unsigned int sync_serial_poll(struct file *file, poll_table *wait)
|
||||
{
|
||||
int dev = MINOR(file->f_dentry->d_inode->i_rdev);
|
||||
int dev = iminor(file->f_dentry->d_inode);
|
||||
unsigned int mask = 0;
|
||||
sync_port* port;
|
||||
DEBUGPOLL( static unsigned int prev_mask = 0; );
|
||||
|
@ -531,7 +531,7 @@ static int sync_serial_ioctl(struct inode *inode, struct file *file,
|
|||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
int return_val = 0;
|
||||
int dev = MINOR(file->f_dentry->d_inode->i_rdev);
|
||||
int dev = iminor(file->f_dentry->d_inode);
|
||||
sync_port* port;
|
||||
reg_sser_rw_tr_cfg tr_cfg;
|
||||
reg_sser_rw_rec_cfg rec_cfg;
|
||||
|
@ -789,7 +789,7 @@ static int sync_serial_ioctl(struct inode *inode, struct file *file,
|
|||
static ssize_t sync_serial_write(struct file * file, const char * buf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
int dev = MINOR(file->f_dentry->d_inode->i_rdev);
|
||||
int dev = iminor(file->f_dentry->d_inode);
|
||||
DECLARE_WAITQUEUE(wait, current);
|
||||
sync_port *port;
|
||||
unsigned long c, c1;
|
||||
|
@ -919,7 +919,7 @@ static ssize_t sync_serial_write(struct file * file, const char * buf,
|
|||
static ssize_t sync_serial_read(struct file * file, char * buf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
int dev = MINOR(file->f_dentry->d_inode->i_rdev);
|
||||
int dev = iminor(file->f_dentry->d_inode);
|
||||
int avail;
|
||||
sync_port *port;
|
||||
unsigned char* start;
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
#include <linux/bootmem.h>
|
||||
#include <asm/pgtable.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/tty.h>
|
||||
#include <linux/screen_info.h>
|
||||
#include <linux/utsname.h>
|
||||
#include <linux/pfn.h>
|
||||
|
||||
|
|
|
@ -1 +1,115 @@
|
|||
/* Dummy asm-offsets.c file. Required by kbuild and ready to be used - hint! */
|
||||
/*
|
||||
* Generate definitions needed by assembly language modules.
|
||||
* This code generates raw asm output which is post-processed
|
||||
* to extract and format the required data.
|
||||
*/
|
||||
|
||||
#include <linux/sched.h>
|
||||
#include <linux/signal.h>
|
||||
#include <linux/personality.h>
|
||||
#include <asm/registers.h>
|
||||
#include <asm/ucontext.h>
|
||||
#include <asm/processor.h>
|
||||
#include <asm/thread_info.h>
|
||||
#include <asm/gdb-stub.h>
|
||||
|
||||
#define DEFINE(sym, val) \
|
||||
asm volatile("\n->" #sym " %0 " #val : : "i" (val))
|
||||
|
||||
#define DEF_PTREG(sym, reg) \
|
||||
asm volatile("\n->" #sym " %0 offsetof(struct pt_regs, " #reg ")" \
|
||||
: : "i" (offsetof(struct pt_regs, reg)))
|
||||
|
||||
#define DEF_IREG(sym, reg) \
|
||||
asm volatile("\n->" #sym " %0 offsetof(struct user_context, " #reg ")" \
|
||||
: : "i" (offsetof(struct user_context, reg)))
|
||||
|
||||
#define DEF_FREG(sym, reg) \
|
||||
asm volatile("\n->" #sym " %0 offsetof(struct user_context, " #reg ")" \
|
||||
: : "i" (offsetof(struct user_context, reg)))
|
||||
|
||||
#define DEF_0REG(sym, reg) \
|
||||
asm volatile("\n->" #sym " %0 offsetof(struct frv_frame0, " #reg ")" \
|
||||
: : "i" (offsetof(struct frv_frame0, reg)))
|
||||
|
||||
#define BLANK() asm volatile("\n->" : : )
|
||||
|
||||
#define OFFSET(sym, str, mem) \
|
||||
DEFINE(sym, offsetof(struct str, mem));
|
||||
|
||||
void foo(void)
|
||||
{
|
||||
/* offsets into the thread_info structure */
|
||||
OFFSET(TI_TASK, thread_info, task);
|
||||
OFFSET(TI_EXEC_DOMAIN, thread_info, exec_domain);
|
||||
OFFSET(TI_FLAGS, thread_info, flags);
|
||||
OFFSET(TI_STATUS, thread_info, status);
|
||||
OFFSET(TI_CPU, thread_info, cpu);
|
||||
OFFSET(TI_PREEMPT_COUNT, thread_info, preempt_count);
|
||||
OFFSET(TI_ADDR_LIMIT, thread_info, addr_limit);
|
||||
OFFSET(TI_RESTART_BLOCK, thread_info, restart_block);
|
||||
BLANK();
|
||||
|
||||
/* offsets into register file storage */
|
||||
DEF_PTREG(REG_PSR, psr);
|
||||
DEF_PTREG(REG_ISR, isr);
|
||||
DEF_PTREG(REG_CCR, ccr);
|
||||
DEF_PTREG(REG_CCCR, cccr);
|
||||
DEF_PTREG(REG_LR, lr);
|
||||
DEF_PTREG(REG_LCR, lcr);
|
||||
DEF_PTREG(REG_PC, pc);
|
||||
DEF_PTREG(REG__STATUS, __status);
|
||||
DEF_PTREG(REG_SYSCALLNO, syscallno);
|
||||
DEF_PTREG(REG_ORIG_GR8, orig_gr8);
|
||||
DEF_PTREG(REG_GNER0, gner0);
|
||||
DEF_PTREG(REG_GNER1, gner1);
|
||||
DEF_PTREG(REG_IACC0, iacc0);
|
||||
DEF_PTREG(REG_TBR, tbr);
|
||||
DEF_PTREG(REG_GR0, tbr);
|
||||
DEFINE(REG__END, sizeof(struct pt_regs));
|
||||
BLANK();
|
||||
|
||||
DEF_0REG(REG_DCR, debug.dcr);
|
||||
DEF_0REG(REG_IBAR0, debug.ibar[0]);
|
||||
DEF_0REG(REG_DBAR0, debug.dbar[0]);
|
||||
DEF_0REG(REG_DBDR00, debug.dbdr[0][0]);
|
||||
DEF_0REG(REG_DBMR00, debug.dbmr[0][0]);
|
||||
BLANK();
|
||||
|
||||
DEF_IREG(__INT_GR0, i.gr[0]);
|
||||
DEF_FREG(__USER_FPMEDIA, f);
|
||||
DEF_FREG(__FPMEDIA_FR0, f.fr[0]);
|
||||
DEF_FREG(__FPMEDIA_FNER0, f.fner[0]);
|
||||
DEF_FREG(__FPMEDIA_MSR0, f.msr[0]);
|
||||
DEF_FREG(__FPMEDIA_ACC0, f.acc[0]);
|
||||
DEF_FREG(__FPMEDIA_ACCG0, f.accg[0]);
|
||||
DEF_FREG(__FPMEDIA_FSR0, f.fsr[0]);
|
||||
BLANK();
|
||||
|
||||
DEFINE(NR_PT_REGS, sizeof(struct pt_regs) / 4);
|
||||
DEFINE(NR_USER_INT_REGS, sizeof(struct user_int_regs) / 4);
|
||||
DEFINE(NR_USER_FPMEDIA_REGS, sizeof(struct user_fpmedia_regs) / 4);
|
||||
DEFINE(NR_USER_CONTEXT, sizeof(struct user_context) / 4);
|
||||
DEFINE(FRV_FRAME0_SIZE, sizeof(struct frv_frame0));
|
||||
BLANK();
|
||||
|
||||
/* offsets into thread_struct */
|
||||
OFFSET(__THREAD_FRAME, thread_struct, frame);
|
||||
OFFSET(__THREAD_CURR, thread_struct, curr);
|
||||
OFFSET(__THREAD_SP, thread_struct, sp);
|
||||
OFFSET(__THREAD_FP, thread_struct, fp);
|
||||
OFFSET(__THREAD_LR, thread_struct, lr);
|
||||
OFFSET(__THREAD_PC, thread_struct, pc);
|
||||
OFFSET(__THREAD_GR16, thread_struct, gr[0]);
|
||||
OFFSET(__THREAD_SCHED_LR, thread_struct, sched_lr);
|
||||
OFFSET(__THREAD_FRAME0, thread_struct, frame0);
|
||||
OFFSET(__THREAD_USER, thread_struct, user);
|
||||
BLANK();
|
||||
|
||||
/* offsets into frv_debug_status */
|
||||
OFFSET(DEBUG_BPSR, frv_debug_status, bpsr);
|
||||
OFFSET(DEBUG_DCR, frv_debug_status, dcr);
|
||||
OFFSET(DEBUG_BRR, frv_debug_status, brr);
|
||||
OFFSET(DEBUG_NMAR, frv_debug_status, nmar);
|
||||
BLANK();
|
||||
}
|
||||
|
|
|
@ -9,11 +9,11 @@
|
|||
* 2 of the License, or (at your option) any later version.
|
||||
*/
|
||||
|
||||
#include <linux/sys.h>
|
||||
#include <linux/linkage.h>
|
||||
#include <asm/setup.h>
|
||||
#include <asm/segment.h>
|
||||
#include <asm/ptrace.h>
|
||||
#include <asm/thread_info.h>
|
||||
#include <asm/spr-regs.h>
|
||||
|
||||
#include <asm/errno.h>
|
||||
|
@ -23,13 +23,11 @@
|
|||
#
|
||||
.section .bss.stack
|
||||
.globl __break_user_context
|
||||
.balign 8192
|
||||
.balign THREAD_SIZE
|
||||
__break_stack:
|
||||
.space (8192 - (USER_CONTEXT_SIZE + REG__DEBUG_XTRA)) & ~7
|
||||
__break_stack_tos:
|
||||
.space REG__DEBUG_XTRA
|
||||
__break_user_context:
|
||||
.space USER_CONTEXT_SIZE
|
||||
.space THREAD_SIZE - FRV_FRAME0_SIZE
|
||||
__break_frame_0:
|
||||
.space FRV_FRAME0_SIZE
|
||||
|
||||
#
|
||||
# miscellaneous variables
|
||||
|
@ -74,8 +72,8 @@ __entry_break:
|
|||
#endif
|
||||
LEDS 0x1001,gr31
|
||||
|
||||
sethi.p %hi(__break_user_context),gr31
|
||||
setlo %lo(__break_user_context),gr31
|
||||
sethi.p %hi(__break_frame_0),gr31
|
||||
setlo %lo(__break_frame_0),gr31
|
||||
|
||||
stdi gr2,@(gr31,#REG_GR(2))
|
||||
movsg ccr,gr3
|
||||
|
@ -585,8 +583,8 @@ __break_continue:
|
|||
# set up the kernel stack pointer
|
||||
sti sp,@(gr31,#REG_SP)
|
||||
|
||||
sethi.p %hi(__break_stack_tos),sp
|
||||
setlo %lo(__break_stack_tos),sp
|
||||
sethi.p %hi(__break_frame_0),sp
|
||||
setlo %lo(__break_frame_0),sp
|
||||
|
||||
# finish building the exception frame
|
||||
stdi gr4 ,@(gr31,#REG_GR(4))
|
||||
|
@ -651,9 +649,12 @@ __break_continue:
|
|||
movsg nmar,gr5
|
||||
movsg dcr,gr6
|
||||
|
||||
stdi gr4 ,@(gr31,#REG_BRR)
|
||||
sti gr19,@(gr31,#REG_BPSR)
|
||||
sti.p gr6 ,@(gr31,#REG_DCR)
|
||||
sethi.p %hi(__debug_status),gr7
|
||||
setlo %lo(__debug_status),gr7
|
||||
|
||||
stdi gr4 ,@(gr7,#DEBUG_BRR)
|
||||
sti gr19,@(gr7,#DEBUG_BPSR)
|
||||
sti.p gr6 ,@(gr7,#DEBUG_DCR)
|
||||
|
||||
# trap exceptions during break handling and disable h/w breakpoints/watchpoints
|
||||
sethi %hi(DCR_EBE),gr5
|
||||
|
@ -698,7 +699,10 @@ __break_continue:
|
|||
lddi @(gr31,#REG_PSR) ,gr22
|
||||
ldi @(gr31,#REG_PC) ,gr21
|
||||
ldi @(gr31,#REG_TBR) ,gr20
|
||||
ldi.p @(gr31,#REG_DCR) ,gr6
|
||||
|
||||
sethi.p %hi(__debug_status),gr6
|
||||
setlo %lo(__debug_status),gr6
|
||||
ldi.p @(gr6,#DEBUG_DCR) ,gr6
|
||||
|
||||
andi gr22,#PSR_S,gr19 /* rebuild BPSR */
|
||||
andi.p gr22,#PSR_ET,gr5
|
||||
|
|
|
@ -39,10 +39,9 @@ do { \
|
|||
gdbstub_do_rx(); \
|
||||
} while(!FLOWCTL_QUERY(LINE))
|
||||
|
||||
static void __init debug_stub_init(void);
|
||||
struct frv_debug_status __debug_status;
|
||||
|
||||
extern asmlinkage void __break_hijack_kernel_event(void);
|
||||
extern asmlinkage void __break_hijack_kernel_event_breaks_here(void);
|
||||
static void __init debug_stub_init(void);
|
||||
|
||||
/*****************************************************************************/
|
||||
/*
|
||||
|
@ -67,7 +66,7 @@ asmlinkage void debug_stub(void)
|
|||
__set_HSR(0, hsr0 & ~HSR0_ETMD);
|
||||
|
||||
/* disable single stepping */
|
||||
__debug_regs->dcr &= ~DCR_SE;
|
||||
__debug_status.dcr &= ~DCR_SE;
|
||||
|
||||
/* kernel mode can propose an exception be handled in debug mode by jumping to a special
|
||||
* location */
|
||||
|
@ -76,8 +75,8 @@ asmlinkage void debug_stub(void)
|
|||
* the top kernel context */
|
||||
*__debug_frame = *__frame;
|
||||
__frame = __debug_frame->next_frame;
|
||||
__debug_regs->brr = (__debug_frame->tbr & TBR_TT) << 12;
|
||||
__debug_regs->brr |= BRR_EB;
|
||||
__debug_status.brr = (__debug_frame->tbr & TBR_TT) << 12;
|
||||
__debug_status.brr |= BRR_EB;
|
||||
}
|
||||
|
||||
if (__debug_frame->pc == (unsigned long) __debug_bug_trap + 4) {
|
||||
|
@ -124,7 +123,7 @@ static void __init debug_stub_init(void)
|
|||
__debug_frame->pc = (unsigned long) start_kernel;
|
||||
|
||||
/* enable the debug events we want to trap */
|
||||
__debug_regs->dcr = DCR_EBE;
|
||||
__debug_status.dcr = DCR_EBE;
|
||||
|
||||
#ifdef CONFIG_GDBSTUB
|
||||
gdbstub_init();
|
||||
|
|
|
@ -27,7 +27,6 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include <linux/sys.h>
|
||||
#include <linux/linkage.h>
|
||||
#include <asm/thread_info.h>
|
||||
#include <asm/setup.h>
|
||||
|
|
|
@ -124,6 +124,7 @@
|
|||
#include <linux/slab.h>
|
||||
#include <linux/nmi.h>
|
||||
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/system.h>
|
||||
#include <asm/gdb-stub.h>
|
||||
|
@ -136,7 +137,6 @@ extern void debug_to_serial(const char *p, int n);
|
|||
extern void gdbstub_console_write(struct console *co, const char *p, unsigned n);
|
||||
|
||||
extern volatile uint32_t __break_error_detect[3]; /* ESFR1, ESR15, EAR15 */
|
||||
extern struct user_context __break_user_context;
|
||||
|
||||
struct __debug_amr {
|
||||
unsigned long L, P;
|
||||
|
@ -926,6 +926,7 @@ static int gdbstub_set_breakpoint(unsigned long type, unsigned long addr, unsign
|
|||
if (!(__debug_regs->dcr & DCR_IBE0)) {
|
||||
//gdbstub_printk("set h/w break 0: %08lx\n", addr);
|
||||
__debug_regs->dcr |= DCR_IBE0;
|
||||
__debug_regs->ibar[0] = addr;
|
||||
asm volatile("movgs %0,ibar0" : : "r"(addr));
|
||||
return 0;
|
||||
}
|
||||
|
@ -933,6 +934,7 @@ static int gdbstub_set_breakpoint(unsigned long type, unsigned long addr, unsign
|
|||
if (!(__debug_regs->dcr & DCR_IBE1)) {
|
||||
//gdbstub_printk("set h/w break 1: %08lx\n", addr);
|
||||
__debug_regs->dcr |= DCR_IBE1;
|
||||
__debug_regs->ibar[1] = addr;
|
||||
asm volatile("movgs %0,ibar1" : : "r"(addr));
|
||||
return 0;
|
||||
}
|
||||
|
@ -940,6 +942,7 @@ static int gdbstub_set_breakpoint(unsigned long type, unsigned long addr, unsign
|
|||
if (!(__debug_regs->dcr & DCR_IBE2)) {
|
||||
//gdbstub_printk("set h/w break 2: %08lx\n", addr);
|
||||
__debug_regs->dcr |= DCR_IBE2;
|
||||
__debug_regs->ibar[2] = addr;
|
||||
asm volatile("movgs %0,ibar2" : : "r"(addr));
|
||||
return 0;
|
||||
}
|
||||
|
@ -947,6 +950,7 @@ static int gdbstub_set_breakpoint(unsigned long type, unsigned long addr, unsign
|
|||
if (!(__debug_regs->dcr & DCR_IBE3)) {
|
||||
//gdbstub_printk("set h/w break 3: %08lx\n", addr);
|
||||
__debug_regs->dcr |= DCR_IBE3;
|
||||
__debug_regs->ibar[3] = addr;
|
||||
asm volatile("movgs %0,ibar3" : : "r"(addr));
|
||||
return 0;
|
||||
}
|
||||
|
@ -971,7 +975,14 @@ static int gdbstub_set_breakpoint(unsigned long type, unsigned long addr, unsign
|
|||
if (!(__debug_regs->dcr & (DCR_DRBE0|DCR_DWBE0))) {
|
||||
//gdbstub_printk("set h/w watchpoint 0 type %ld: %08lx\n", type, addr);
|
||||
tmp = type==2 ? DCR_DWBE0 : type==3 ? DCR_DRBE0 : DCR_DRBE0|DCR_DWBE0;
|
||||
|
||||
__debug_regs->dcr |= tmp;
|
||||
__debug_regs->dbar[0] = addr;
|
||||
__debug_regs->dbmr[0][0] = dbmr.mask0;
|
||||
__debug_regs->dbmr[0][1] = dbmr.mask1;
|
||||
__debug_regs->dbdr[0][0] = 0;
|
||||
__debug_regs->dbdr[0][1] = 0;
|
||||
|
||||
asm volatile(" movgs %0,dbar0 \n"
|
||||
" movgs %1,dbmr00 \n"
|
||||
" movgs %2,dbmr01 \n"
|
||||
|
@ -984,7 +995,14 @@ static int gdbstub_set_breakpoint(unsigned long type, unsigned long addr, unsign
|
|||
if (!(__debug_regs->dcr & (DCR_DRBE1|DCR_DWBE1))) {
|
||||
//gdbstub_printk("set h/w watchpoint 1 type %ld: %08lx\n", type, addr);
|
||||
tmp = type==2 ? DCR_DWBE1 : type==3 ? DCR_DRBE1 : DCR_DRBE1|DCR_DWBE1;
|
||||
|
||||
__debug_regs->dcr |= tmp;
|
||||
__debug_regs->dbar[1] = addr;
|
||||
__debug_regs->dbmr[1][0] = dbmr.mask0;
|
||||
__debug_regs->dbmr[1][1] = dbmr.mask1;
|
||||
__debug_regs->dbdr[1][0] = 0;
|
||||
__debug_regs->dbdr[1][1] = 0;
|
||||
|
||||
asm volatile(" movgs %0,dbar1 \n"
|
||||
" movgs %1,dbmr10 \n"
|
||||
" movgs %2,dbmr11 \n"
|
||||
|
@ -1047,6 +1065,7 @@ int gdbstub_clear_breakpoint(unsigned long type, unsigned long addr, unsigned lo
|
|||
if (__debug_regs->dcr & DCR_IBE0 && __get_ibar(0) == addr) {
|
||||
//gdbstub_printk("clear h/w break 0: %08lx\n", addr);
|
||||
__debug_regs->dcr &= ~DCR_IBE0;
|
||||
__debug_regs->ibar[0] = 0;
|
||||
asm volatile("movgs gr0,ibar0");
|
||||
return 0;
|
||||
}
|
||||
|
@ -1054,6 +1073,7 @@ int gdbstub_clear_breakpoint(unsigned long type, unsigned long addr, unsigned lo
|
|||
if (__debug_regs->dcr & DCR_IBE1 && __get_ibar(1) == addr) {
|
||||
//gdbstub_printk("clear h/w break 1: %08lx\n", addr);
|
||||
__debug_regs->dcr &= ~DCR_IBE1;
|
||||
__debug_regs->ibar[1] = 0;
|
||||
asm volatile("movgs gr0,ibar1");
|
||||
return 0;
|
||||
}
|
||||
|
@ -1061,6 +1081,7 @@ int gdbstub_clear_breakpoint(unsigned long type, unsigned long addr, unsigned lo
|
|||
if (__debug_regs->dcr & DCR_IBE2 && __get_ibar(2) == addr) {
|
||||
//gdbstub_printk("clear h/w break 2: %08lx\n", addr);
|
||||
__debug_regs->dcr &= ~DCR_IBE2;
|
||||
__debug_regs->ibar[2] = 0;
|
||||
asm volatile("movgs gr0,ibar2");
|
||||
return 0;
|
||||
}
|
||||
|
@ -1068,6 +1089,7 @@ int gdbstub_clear_breakpoint(unsigned long type, unsigned long addr, unsigned lo
|
|||
if (__debug_regs->dcr & DCR_IBE3 && __get_ibar(3) == addr) {
|
||||
//gdbstub_printk("clear h/w break 3: %08lx\n", addr);
|
||||
__debug_regs->dcr &= ~DCR_IBE3;
|
||||
__debug_regs->ibar[3] = 0;
|
||||
asm volatile("movgs gr0,ibar3");
|
||||
return 0;
|
||||
}
|
||||
|
@ -1104,6 +1126,12 @@ int gdbstub_clear_breakpoint(unsigned long type, unsigned long addr, unsigned lo
|
|||
|
||||
//gdbstub_printk("clear h/w watchpoint 0 type %ld: %08lx\n", type, addr);
|
||||
__debug_regs->dcr &= ~(DCR_DRBE0|DCR_DWBE0);
|
||||
__debug_regs->dbar[0] = 0;
|
||||
__debug_regs->dbmr[0][0] = 0;
|
||||
__debug_regs->dbmr[0][1] = 0;
|
||||
__debug_regs->dbdr[0][0] = 0;
|
||||
__debug_regs->dbdr[0][1] = 0;
|
||||
|
||||
asm volatile(" movgs gr0,dbar0 \n"
|
||||
" movgs gr0,dbmr00 \n"
|
||||
" movgs gr0,dbmr01 \n"
|
||||
|
@ -1123,6 +1151,12 @@ int gdbstub_clear_breakpoint(unsigned long type, unsigned long addr, unsigned lo
|
|||
|
||||
//gdbstub_printk("clear h/w watchpoint 1 type %ld: %08lx\n", type, addr);
|
||||
__debug_regs->dcr &= ~(DCR_DRBE1|DCR_DWBE1);
|
||||
__debug_regs->dbar[1] = 0;
|
||||
__debug_regs->dbmr[1][0] = 0;
|
||||
__debug_regs->dbmr[1][1] = 0;
|
||||
__debug_regs->dbdr[1][0] = 0;
|
||||
__debug_regs->dbdr[1][1] = 0;
|
||||
|
||||
asm volatile(" movgs gr0,dbar1 \n"
|
||||
" movgs gr0,dbmr10 \n"
|
||||
" movgs gr0,dbmr11 \n"
|
||||
|
@ -1163,7 +1197,7 @@ static void gdbstub_check_breakpoint(void)
|
|||
*/
|
||||
static void __attribute__((unused)) gdbstub_show_regs(void)
|
||||
{
|
||||
uint32_t *reg;
|
||||
unsigned long *reg;
|
||||
int loop;
|
||||
|
||||
gdbstub_printk("\n");
|
||||
|
@ -1172,11 +1206,11 @@ static void __attribute__((unused)) gdbstub_show_regs(void)
|
|||
__debug_frame,
|
||||
__debug_frame->psr & PSR_S ? "kernel" : "user");
|
||||
|
||||
reg = (uint32_t *) __debug_frame;
|
||||
for (loop = 0; loop < REG__END; loop++) {
|
||||
printk("%s %08x", regnames[loop + 0], reg[loop + 0]);
|
||||
reg = (unsigned long *) __debug_frame;
|
||||
for (loop = 0; loop < NR_PT_REGS; loop++) {
|
||||
printk("%s %08lx", regnames[loop + 0], reg[loop + 0]);
|
||||
|
||||
if (loop == REG__END - 1 || loop % 5 == 4)
|
||||
if (loop == NR_PT_REGS - 1 || loop % 5 == 4)
|
||||
printk("\n");
|
||||
else
|
||||
printk(" | ");
|
||||
|
@ -1191,13 +1225,8 @@ static void __attribute__((unused)) gdbstub_show_regs(void)
|
|||
*/
|
||||
static void __attribute__((unused)) gdbstub_dump_debugregs(void)
|
||||
{
|
||||
unsigned long x;
|
||||
|
||||
x = __debug_regs->dcr;
|
||||
gdbstub_printk("DCR %08lx ", x);
|
||||
|
||||
x = __debug_regs->brr;
|
||||
gdbstub_printk("BRR %08lx\n", x);
|
||||
gdbstub_printk("DCR %08lx ", __debug_status.dcr);
|
||||
gdbstub_printk("BRR %08lx\n", __debug_status.brr);
|
||||
|
||||
gdbstub_printk("IBAR0 %08lx ", __get_ibar(0));
|
||||
gdbstub_printk("IBAR1 %08lx ", __get_ibar(1));
|
||||
|
@ -1360,7 +1389,7 @@ void gdbstub(int sigval)
|
|||
#endif
|
||||
}
|
||||
|
||||
save_user_regs(&__break_user_context);
|
||||
save_user_regs(&__debug_frame0->uc);
|
||||
|
||||
#if 0
|
||||
gdbstub_printk("--> gdbstub() %08x %p %08x %08x\n",
|
||||
|
@ -1389,8 +1418,8 @@ void gdbstub(int sigval)
|
|||
__debug_frame->psr &= ~PSR_S;
|
||||
if (__debug_frame->psr & PSR_PS)
|
||||
__debug_frame->psr |= PSR_S;
|
||||
__debug_regs->brr = (__debug_frame->tbr & TBR_TT) << 12;
|
||||
__debug_regs->brr |= BRR_EB;
|
||||
__debug_status.brr = (__debug_frame->tbr & TBR_TT) << 12;
|
||||
__debug_status.brr |= BRR_EB;
|
||||
sigval = SIGINT;
|
||||
}
|
||||
|
||||
|
@ -1404,15 +1433,15 @@ void gdbstub(int sigval)
|
|||
__debug_frame->psr &= ~PSR_S;
|
||||
if (__debug_frame->psr & PSR_PS)
|
||||
__debug_frame->psr |= PSR_S;
|
||||
__debug_regs->brr = (__debug_frame->tbr & TBR_TT) << 12;
|
||||
__debug_regs->brr |= BRR_EB;
|
||||
__debug_status.brr = (__debug_frame->tbr & TBR_TT) << 12;
|
||||
__debug_status.brr |= BRR_EB;
|
||||
sigval = SIGXCPU;
|
||||
}
|
||||
|
||||
LEDS(0x5002);
|
||||
|
||||
/* after a BREAK insn, the PC lands on the far side of it */
|
||||
if (__debug_regs->brr & BRR_SB)
|
||||
if (__debug_status.brr & BRR_SB)
|
||||
gdbstub_check_breakpoint();
|
||||
|
||||
LEDS(0x5003);
|
||||
|
@ -1431,7 +1460,7 @@ void gdbstub(int sigval)
|
|||
}
|
||||
|
||||
if (!sigval)
|
||||
sigval = gdbstub_compute_signal(__debug_regs->brr);
|
||||
sigval = gdbstub_compute_signal(__debug_status.brr);
|
||||
|
||||
LEDS(0x5004);
|
||||
|
||||
|
@ -1441,7 +1470,7 @@ void gdbstub(int sigval)
|
|||
if (sigval != SIGINT && sigval != SIGTRAP && sigval != SIGILL) {
|
||||
static const char title[] = "Break ";
|
||||
static const char crlf[] = "\r\n";
|
||||
unsigned long brr = __debug_regs->brr;
|
||||
unsigned long brr = __debug_status.brr;
|
||||
char hx;
|
||||
|
||||
ptr = output_buffer;
|
||||
|
@ -1565,28 +1594,24 @@ void gdbstub(int sigval)
|
|||
ptr = mem2hex(&zero, ptr, 4, 0);
|
||||
|
||||
for (loop = 1; loop <= 27; loop++)
|
||||
ptr = mem2hex((unsigned long *)__debug_frame + REG_GR(loop),
|
||||
ptr, 4, 0);
|
||||
ptr = mem2hex(&__debug_user_context->i.gr[loop], ptr, 4, 0);
|
||||
temp = (unsigned long) __frame;
|
||||
ptr = mem2hex(&temp, ptr, 4, 0);
|
||||
ptr = mem2hex((unsigned long *)__debug_frame + REG_GR(29), ptr, 4, 0);
|
||||
ptr = mem2hex((unsigned long *)__debug_frame + REG_GR(30), ptr, 4, 0);
|
||||
ptr = mem2hex(&__debug_user_context->i.gr[29], ptr, 4, 0);
|
||||
ptr = mem2hex(&__debug_user_context->i.gr[30], ptr, 4, 0);
|
||||
#ifdef CONFIG_MMU
|
||||
ptr = mem2hex((unsigned long *)__debug_frame + REG_GR(31), ptr, 4, 0);
|
||||
ptr = mem2hex(&__debug_user_context->i.gr[31], ptr, 4, 0);
|
||||
#else
|
||||
temp = (unsigned long) __debug_frame;
|
||||
ptr = mem2hex(&temp, ptr, 4, 0);
|
||||
#endif
|
||||
|
||||
for (loop = 32; loop <= 63; loop++)
|
||||
ptr = mem2hex((unsigned long *)__debug_frame + REG_GR(loop),
|
||||
ptr, 4, 0);
|
||||
ptr = mem2hex(&__debug_user_context->i.gr[loop], ptr, 4, 0);
|
||||
|
||||
/* deal with FR0-FR63 */
|
||||
for (loop = 0; loop <= 63; loop++)
|
||||
ptr = mem2hex((unsigned long *)&__break_user_context +
|
||||
__FPMEDIA_FR(loop),
|
||||
ptr, 4, 0);
|
||||
ptr = mem2hex(&__debug_user_context->f.fr[loop], ptr, 4, 0);
|
||||
|
||||
/* deal with special registers */
|
||||
ptr = mem2hex(&__debug_frame->pc, ptr, 4, 0);
|
||||
|
@ -1597,7 +1622,7 @@ void gdbstub(int sigval)
|
|||
ptr = mem2hex(&zero, ptr, 4, 0);
|
||||
ptr = mem2hex(&zero, ptr, 4, 0);
|
||||
ptr = mem2hex(&__debug_frame->tbr, ptr, 4, 0);
|
||||
ptr = mem2hex(&__debug_regs->brr , ptr, 4, 0);
|
||||
ptr = mem2hex(&__debug_status.brr , ptr, 4, 0);
|
||||
|
||||
asm volatile("movsg dbar0,%0" : "=r"(dbar));
|
||||
ptr = mem2hex(&dbar, ptr, 4, 0);
|
||||
|
@ -1622,21 +1647,21 @@ void gdbstub(int sigval)
|
|||
|
||||
ptr = mem2hex(&__debug_frame->iacc0, ptr, 8, 0);
|
||||
|
||||
ptr = mem2hex(&__break_user_context.f.fsr[0], ptr, 4, 0);
|
||||
ptr = mem2hex(&__debug_user_context->f.fsr[0], ptr, 4, 0);
|
||||
|
||||
for (loop = 0; loop <= 7; loop++)
|
||||
ptr = mem2hex(&__break_user_context.f.acc[loop], ptr, 4, 0);
|
||||
ptr = mem2hex(&__debug_user_context->f.acc[loop], ptr, 4, 0);
|
||||
|
||||
ptr = mem2hex(&__break_user_context.f.accg, ptr, 8, 0);
|
||||
ptr = mem2hex(&__debug_user_context->f.accg, ptr, 8, 0);
|
||||
|
||||
for (loop = 0; loop <= 1; loop++)
|
||||
ptr = mem2hex(&__break_user_context.f.msr[loop], ptr, 4, 0);
|
||||
ptr = mem2hex(&__debug_user_context->f.msr[loop], ptr, 4, 0);
|
||||
|
||||
ptr = mem2hex(&__debug_frame->gner0, ptr, 4, 0);
|
||||
ptr = mem2hex(&__debug_frame->gner1, ptr, 4, 0);
|
||||
|
||||
ptr = mem2hex(&__break_user_context.f.fner[0], ptr, 4, 0);
|
||||
ptr = mem2hex(&__break_user_context.f.fner[1], ptr, 4, 0);
|
||||
ptr = mem2hex(&__debug_user_context->f.fner[0], ptr, 4, 0);
|
||||
ptr = mem2hex(&__debug_user_context->f.fner[1], ptr, 4, 0);
|
||||
|
||||
break;
|
||||
|
||||
|
@ -1648,8 +1673,7 @@ void gdbstub(int sigval)
|
|||
ptr = hex2mem(ptr, &temp, 4);
|
||||
|
||||
for (loop = 1; loop <= 27; loop++)
|
||||
ptr = hex2mem(ptr, (unsigned long *)__debug_frame + REG_GR(loop),
|
||||
4);
|
||||
ptr = hex2mem(ptr, &__debug_user_context->i.gr[loop], 4);
|
||||
|
||||
ptr = hex2mem(ptr, &temp, 4);
|
||||
__frame = (struct pt_regs *) temp;
|
||||
|
@ -1662,14 +1686,11 @@ void gdbstub(int sigval)
|
|||
#endif
|
||||
|
||||
for (loop = 32; loop <= 63; loop++)
|
||||
ptr = hex2mem(ptr, (unsigned long *)__debug_frame + REG_GR(loop),
|
||||
4);
|
||||
ptr = hex2mem(ptr, &__debug_user_context->i.gr[loop], 4);
|
||||
|
||||
/* deal with FR0-FR63 */
|
||||
for (loop = 0; loop <= 63; loop++)
|
||||
ptr = mem2hex((unsigned long *)&__break_user_context +
|
||||
__FPMEDIA_FR(loop),
|
||||
ptr, 4, 0);
|
||||
ptr = mem2hex(&__debug_user_context->f.fr[loop], ptr, 4, 0);
|
||||
|
||||
/* deal with special registers */
|
||||
ptr = hex2mem(ptr, &__debug_frame->pc, 4);
|
||||
|
@ -1694,21 +1715,21 @@ void gdbstub(int sigval)
|
|||
|
||||
ptr = hex2mem(ptr, &__debug_frame->iacc0, 8);
|
||||
|
||||
ptr = hex2mem(ptr, &__break_user_context.f.fsr[0], 4);
|
||||
ptr = hex2mem(ptr, &__debug_user_context->f.fsr[0], 4);
|
||||
|
||||
for (loop = 0; loop <= 7; loop++)
|
||||
ptr = hex2mem(ptr, &__break_user_context.f.acc[loop], 4);
|
||||
ptr = hex2mem(ptr, &__debug_user_context->f.acc[loop], 4);
|
||||
|
||||
ptr = hex2mem(ptr, &__break_user_context.f.accg, 8);
|
||||
ptr = hex2mem(ptr, &__debug_user_context->f.accg, 8);
|
||||
|
||||
for (loop = 0; loop <= 1; loop++)
|
||||
ptr = hex2mem(ptr, &__break_user_context.f.msr[loop], 4);
|
||||
ptr = hex2mem(ptr, &__debug_user_context->f.msr[loop], 4);
|
||||
|
||||
ptr = hex2mem(ptr, &__debug_frame->gner0, 4);
|
||||
ptr = hex2mem(ptr, &__debug_frame->gner1, 4);
|
||||
|
||||
ptr = hex2mem(ptr, &__break_user_context.f.fner[0], 4);
|
||||
ptr = hex2mem(ptr, &__break_user_context.f.fner[1], 4);
|
||||
ptr = hex2mem(ptr, &__debug_user_context->f.fner[0], 4);
|
||||
ptr = hex2mem(ptr, &__debug_user_context->f.fner[1], 4);
|
||||
|
||||
gdbstub_strcpy(output_buffer,"OK");
|
||||
break;
|
||||
|
@ -1769,52 +1790,52 @@ void gdbstub(int sigval)
|
|||
case GDB_REG_GR(0):
|
||||
break;
|
||||
case GDB_REG_GR(1) ... GDB_REG_GR(63):
|
||||
__break_user_context.i.gr[addr - GDB_REG_GR(0)] = temp;
|
||||
__debug_user_context->i.gr[addr - GDB_REG_GR(0)] = temp;
|
||||
break;
|
||||
case GDB_REG_FR(0) ... GDB_REG_FR(63):
|
||||
__break_user_context.f.fr[addr - GDB_REG_FR(0)] = temp;
|
||||
__debug_user_context->f.fr[addr - GDB_REG_FR(0)] = temp;
|
||||
break;
|
||||
case GDB_REG_PC:
|
||||
__break_user_context.i.pc = temp;
|
||||
__debug_user_context->i.pc = temp;
|
||||
break;
|
||||
case GDB_REG_PSR:
|
||||
__break_user_context.i.psr = temp;
|
||||
__debug_user_context->i.psr = temp;
|
||||
break;
|
||||
case GDB_REG_CCR:
|
||||
__break_user_context.i.ccr = temp;
|
||||
__debug_user_context->i.ccr = temp;
|
||||
break;
|
||||
case GDB_REG_CCCR:
|
||||
__break_user_context.i.cccr = temp;
|
||||
__debug_user_context->i.cccr = temp;
|
||||
break;
|
||||
case GDB_REG_BRR:
|
||||
__debug_regs->brr = temp;
|
||||
__debug_status.brr = temp;
|
||||
break;
|
||||
case GDB_REG_LR:
|
||||
__break_user_context.i.lr = temp;
|
||||
__debug_user_context->i.lr = temp;
|
||||
break;
|
||||
case GDB_REG_LCR:
|
||||
__break_user_context.i.lcr = temp;
|
||||
__debug_user_context->i.lcr = temp;
|
||||
break;
|
||||
case GDB_REG_FSR0:
|
||||
__break_user_context.f.fsr[0] = temp;
|
||||
__debug_user_context->f.fsr[0] = temp;
|
||||
break;
|
||||
case GDB_REG_ACC(0) ... GDB_REG_ACC(7):
|
||||
__break_user_context.f.acc[addr - GDB_REG_ACC(0)] = temp;
|
||||
__debug_user_context->f.acc[addr - GDB_REG_ACC(0)] = temp;
|
||||
break;
|
||||
case GDB_REG_ACCG(0):
|
||||
*(uint32_t *) &__break_user_context.f.accg[0] = temp;
|
||||
*(uint32_t *) &__debug_user_context->f.accg[0] = temp;
|
||||
break;
|
||||
case GDB_REG_ACCG(4):
|
||||
*(uint32_t *) &__break_user_context.f.accg[4] = temp;
|
||||
*(uint32_t *) &__debug_user_context->f.accg[4] = temp;
|
||||
break;
|
||||
case GDB_REG_MSR(0) ... GDB_REG_MSR(1):
|
||||
__break_user_context.f.msr[addr - GDB_REG_MSR(0)] = temp;
|
||||
__debug_user_context->f.msr[addr - GDB_REG_MSR(0)] = temp;
|
||||
break;
|
||||
case GDB_REG_GNER(0) ... GDB_REG_GNER(1):
|
||||
__break_user_context.i.gner[addr - GDB_REG_GNER(0)] = temp;
|
||||
__debug_user_context->i.gner[addr - GDB_REG_GNER(0)] = temp;
|
||||
break;
|
||||
case GDB_REG_FNER(0) ... GDB_REG_FNER(1):
|
||||
__break_user_context.f.fner[addr - GDB_REG_FNER(0)] = temp;
|
||||
__debug_user_context->f.fner[addr - GDB_REG_FNER(0)] = temp;
|
||||
break;
|
||||
default:
|
||||
temp2 = 0;
|
||||
|
@ -1850,6 +1871,7 @@ void gdbstub(int sigval)
|
|||
/* step to next instruction */
|
||||
case 's':
|
||||
__debug_regs->dcr |= DCR_SE;
|
||||
__debug_status.dcr |= DCR_SE;
|
||||
goto done;
|
||||
|
||||
/* set baud rate (bBB) */
|
||||
|
@ -1934,7 +1956,7 @@ void gdbstub(int sigval)
|
|||
}
|
||||
|
||||
done:
|
||||
restore_user_regs(&__break_user_context);
|
||||
restore_user_regs(&__debug_frame0->uc);
|
||||
|
||||
//gdbstub_dump_debugregs();
|
||||
//gdbstub_printk("<-- gdbstub() %08x\n", __debug_frame->pc);
|
||||
|
@ -1966,7 +1988,6 @@ void __init gdbstub_init(void)
|
|||
#endif
|
||||
|
||||
gdbstub_printk("%s", gdbstub_banner);
|
||||
gdbstub_printk("DCR: %x\n", __debug_regs->dcr);
|
||||
|
||||
gdbstub_io_init();
|
||||
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
|
||||
#include <linux/threads.h>
|
||||
#include <linux/linkage.h>
|
||||
#include <asm/thread_info.h>
|
||||
#include <asm/ptrace.h>
|
||||
#include <asm/page.h>
|
||||
#include <asm/spr-regs.h>
|
||||
|
|
|
@ -51,6 +51,9 @@ extern void (*__power_switch_wake_cleanup)(void);
|
|||
/* time.c */
|
||||
extern void time_divisor_init(void);
|
||||
|
||||
/* cmode.S */
|
||||
extern asmlinkage void frv_change_cmode(int);
|
||||
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* _FRV_LOCAL_H */
|
||||
|
|
|
@ -26,11 +26,6 @@
|
|||
|
||||
#include "local.h"
|
||||
|
||||
void (*pm_power_off)(void);
|
||||
EXPORT_SYMBOL(pm_power_off);
|
||||
|
||||
extern void frv_change_cmode(int);
|
||||
|
||||
/*
|
||||
* Debug macros
|
||||
*/
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
* 2 of the License, or (at your option) any later version.
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/kernel.h>
|
||||
|
@ -25,6 +26,7 @@
|
|||
#include <linux/reboot.h>
|
||||
#include <linux/interrupt.h>
|
||||
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <asm/uaccess.h>
|
||||
#include <asm/system.h>
|
||||
#include <asm/setup.h>
|
||||
|
@ -38,6 +40,9 @@ asmlinkage void ret_from_fork(void);
|
|||
|
||||
#include <asm/pgalloc.h>
|
||||
|
||||
void (*pm_power_off)(void);
|
||||
EXPORT_SYMBOL(pm_power_off);
|
||||
|
||||
struct task_struct *alloc_task_struct(void)
|
||||
{
|
||||
struct task_struct *p = kmalloc(THREAD_SIZE, GFP_KERNEL);
|
||||
|
@ -203,7 +208,7 @@ int copy_thread(int nr, unsigned long clone_flags,
|
|||
|
||||
regs0 = __kernel_frame0_ptr;
|
||||
childregs0 = (struct pt_regs *)
|
||||
(task_stack_page(p) + THREAD_SIZE - USER_CONTEXT_SIZE);
|
||||
(task_stack_page(p) + THREAD_SIZE - FRV_FRAME0_SIZE);
|
||||
childregs = childregs0;
|
||||
|
||||
/* set up the userspace frame (the only place that the USP is stored) */
|
||||
|
@ -367,3 +372,11 @@ int elf_check_arch(const struct elf32_hdr *hdr)
|
|||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int dump_fpu(struct pt_regs *regs, elf_fpregset_t *fpregs)
|
||||
{
|
||||
memcpy(fpregs,
|
||||
¤t->thread.user->f,
|
||||
sizeof(current->thread.user->f));
|
||||
return 1;
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
# 2 of the License, or (at your option) any later version.
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
#include <linux/linkage.h>
|
||||
#include <asm/thread_info.h>
|
||||
#include <asm/processor.h>
|
||||
|
@ -30,7 +31,7 @@
|
|||
# address of frame 0 (userspace) on current kernel stack
|
||||
.globl __kernel_frame0_ptr
|
||||
__kernel_frame0_ptr:
|
||||
.long init_thread_union + THREAD_SIZE - USER_CONTEXT_SIZE
|
||||
.long init_thread_union + THREAD_SIZE - FRV_FRAME0_SIZE
|
||||
|
||||
# address of current task
|
||||
.globl __kernel_current_task
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
#include <linux/init.h>
|
||||
#include <linux/module.h>
|
||||
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <asm/setup.h>
|
||||
#include <asm/fpu.h>
|
||||
#include <asm/system.h>
|
||||
|
@ -279,20 +280,20 @@ static const char *regnames[] = {
|
|||
|
||||
void show_regs(struct pt_regs *regs)
|
||||
{
|
||||
uint32_t *reg;
|
||||
unsigned long *reg;
|
||||
int loop;
|
||||
|
||||
printk("\n");
|
||||
|
||||
printk("Frame: @%08x [%s]\n",
|
||||
(uint32_t) regs,
|
||||
printk("Frame: @%08lx [%s]\n",
|
||||
(unsigned long) regs,
|
||||
regs->psr & PSR_S ? "kernel" : "user");
|
||||
|
||||
reg = (uint32_t *) regs;
|
||||
for (loop = 0; loop < REG__END; loop++) {
|
||||
printk("%s %08x", regnames[loop + 0], reg[loop + 0]);
|
||||
reg = (unsigned long *) regs;
|
||||
for (loop = 0; loop < NR_PT_REGS; loop++) {
|
||||
printk("%s %08lx", regnames[loop + 0], reg[loop + 0]);
|
||||
|
||||
if (loop == REG__END - 1 || loop % 5 == 4)
|
||||
if (loop == NR_PT_REGS - 1 || loop % 5 == 4)
|
||||
printk("\n");
|
||||
else
|
||||
printk(" | ");
|
||||
|
@ -328,7 +329,7 @@ void die_if_kernel(const char *str, ...)
|
|||
*/
|
||||
static void show_backtrace_regs(struct pt_regs *frame)
|
||||
{
|
||||
uint32_t *reg;
|
||||
unsigned long *reg;
|
||||
int loop;
|
||||
|
||||
/* print the registers for this frame */
|
||||
|
@ -336,11 +337,11 @@ static void show_backtrace_regs(struct pt_regs *frame)
|
|||
frame->psr & PSR_S ? "Kernel Mode" : "User Mode",
|
||||
frame);
|
||||
|
||||
reg = (uint32_t *) frame;
|
||||
for (loop = 0; loop < REG__END; loop++) {
|
||||
printk("%s %08x", regnames[loop + 0], reg[loop + 0]);
|
||||
reg = (unsigned long *) frame;
|
||||
for (loop = 0; loop < NR_PT_REGS; loop++) {
|
||||
printk("%s %08lx", regnames[loop + 0], reg[loop + 0]);
|
||||
|
||||
if (loop == REG__END - 1 || loop % 5 == 4)
|
||||
if (loop == NR_PT_REGS - 1 || loop % 5 == 4)
|
||||
printk("\n");
|
||||
else
|
||||
printk(" | ");
|
||||
|
|
|
@ -406,7 +406,9 @@ int __init pcibios_init(void)
|
|||
ioport_resource.end = (__reg_MB86943_sl_pci_io_range << 9) | 0x3ff;
|
||||
ioport_resource.end += ioport_resource.start;
|
||||
|
||||
printk("PCI IO window: %08lx-%08lx\n", ioport_resource.start, ioport_resource.end);
|
||||
printk("PCI IO window: %08llx-%08llx\n",
|
||||
(unsigned long long) ioport_resource.start,
|
||||
(unsigned long long) ioport_resource.end);
|
||||
|
||||
iomem_resource.start = (__reg_MB86943_sl_pci_mem_base << 9) & 0xfffffc00;
|
||||
|
||||
|
@ -416,8 +418,11 @@ int __init pcibios_init(void)
|
|||
iomem_resource.end = (__reg_MB86943_sl_pci_mem_range << 9) | 0x3ff;
|
||||
iomem_resource.end += iomem_resource.start;
|
||||
|
||||
printk("PCI MEM window: %08lx-%08lx\n", iomem_resource.start, iomem_resource.end);
|
||||
printk("PCI DMA memory: %08lx-%08lx\n", dma_coherent_mem_start, dma_coherent_mem_end);
|
||||
printk("PCI MEM window: %08llx-%08llx\n",
|
||||
(unsigned long long) iomem_resource.start,
|
||||
(unsigned long long) iomem_resource.end);
|
||||
printk("PCI DMA memory: %08lx-%08lx\n",
|
||||
dma_coherent_mem_start, dma_coherent_mem_end);
|
||||
|
||||
if (!pci_probe)
|
||||
return -ENXIO;
|
||||
|
|
|
@ -672,7 +672,7 @@ config MTRR
|
|||
See <file:Documentation/mtrr.txt> for more information.
|
||||
|
||||
config EFI
|
||||
bool "Boot from EFI support (EXPERIMENTAL)"
|
||||
bool "Boot from EFI support"
|
||||
depends on ACPI
|
||||
default n
|
||||
---help---
|
||||
|
|
|
@ -197,7 +197,7 @@ CONFIG_PM=y
|
|||
# CONFIG_PM_LEGACY is not set
|
||||
# CONFIG_PM_DEBUG is not set
|
||||
CONFIG_SOFTWARE_SUSPEND=y
|
||||
CONFIG_PM_STD_PARTITION="/dev/hda2"
|
||||
CONFIG_PM_STD_PARTITION=""
|
||||
|
||||
#
|
||||
# ACPI (Advanced Configuration and Power Interface) Support
|
||||
|
|
|
@ -59,7 +59,8 @@ quiet_cmd_syscall = SYSCALL $@
|
|||
|
||||
export CPPFLAGS_vsyscall.lds += -P -C -U$(ARCH)
|
||||
|
||||
vsyscall-flags = -shared -s -Wl,-soname=linux-gate.so.1
|
||||
vsyscall-flags = -shared -s -Wl,-soname=linux-gate.so.1 \
|
||||
$(call ld-option, -Wl$(comma)--hash-style=sysv)
|
||||
SYSCFLAGS_vsyscall-sysenter.so = $(vsyscall-flags)
|
||||
SYSCFLAGS_vsyscall-int80.so = $(vsyscall-flags)
|
||||
|
||||
|
|
|
@ -759,7 +759,7 @@ static int __cpuinit cache_sysfs_init(void)
|
|||
if (num_cache_leaves == 0)
|
||||
return 0;
|
||||
|
||||
register_cpu_notifier(&cacheinfo_cpu_notifier);
|
||||
register_hotcpu_notifier(&cacheinfo_cpu_notifier);
|
||||
|
||||
for_each_online_cpu(i) {
|
||||
cacheinfo_cpu_callback(&cacheinfo_cpu_notifier, CPU_ONLINE,
|
||||
|
|
|
@ -9,6 +9,6 @@ void winchip_mcheck_init(struct cpuinfo_x86 *c);
|
|||
/* Call the installed machine check handler for this CPU setup. */
|
||||
extern fastcall void (*machine_check_vector)(struct pt_regs *, long error_code);
|
||||
|
||||
extern int mce_disabled __initdata;
|
||||
extern int mce_disabled;
|
||||
extern int nr_mce_banks;
|
||||
|
||||
|
|
|
@ -90,7 +90,7 @@ static void crash_save_self(struct pt_regs *regs)
|
|||
crash_save_this_cpu(regs, cpu);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
#if defined(CONFIG_SMP) && defined(CONFIG_X86_LOCAL_APIC)
|
||||
static atomic_t waiting_for_crash_ipi;
|
||||
|
||||
static int crash_nmi_callback(struct pt_regs *regs, int cpu)
|
||||
|
|
|
@ -204,7 +204,7 @@ VM_MASK = 0x00020000
|
|||
ENTRY(ret_from_fork)
|
||||
CFI_STARTPROC
|
||||
pushl %eax
|
||||
CFI_ADJUST_CFA_OFFSET -4
|
||||
CFI_ADJUST_CFA_OFFSET 4
|
||||
call schedule_tail
|
||||
GET_THREAD_INFO(%ebp)
|
||||
popl %eax
|
||||
|
|
|
@ -79,6 +79,7 @@ asmlinkage long sys_ioperm(unsigned long from, unsigned long num, int turn_on)
|
|||
|
||||
memset(bitmap, 0xff, IO_BITMAP_BYTES);
|
||||
t->io_bitmap_ptr = bitmap;
|
||||
set_thread_flag(TIF_IO_BITMAP);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -256,11 +256,6 @@ static int __kprobes kprobe_handler(struct pt_regs *regs)
|
|||
int ret = 0;
|
||||
kprobe_opcode_t *addr;
|
||||
struct kprobe_ctlblk *kcb;
|
||||
#ifdef CONFIG_PREEMPT
|
||||
unsigned pre_preempt_count = preempt_count();
|
||||
#else
|
||||
unsigned pre_preempt_count = 1;
|
||||
#endif
|
||||
|
||||
addr = (kprobe_opcode_t *)(regs->eip - sizeof(kprobe_opcode_t));
|
||||
|
||||
|
@ -338,13 +333,15 @@ static int __kprobes kprobe_handler(struct pt_regs *regs)
|
|||
return 1;
|
||||
|
||||
ss_probe:
|
||||
if (pre_preempt_count && p->ainsn.boostable == 1 && !p->post_handler){
|
||||
#ifndef CONFIG_PREEMPT
|
||||
if (p->ainsn.boostable == 1 && !p->post_handler){
|
||||
/* Boost up -- we can execute copied instructions directly */
|
||||
reset_current_kprobe();
|
||||
regs->eip = (unsigned long)p->ainsn.insn;
|
||||
preempt_enable_no_resched();
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
prepare_singlestep(p, regs);
|
||||
kcb->kprobe_status = KPROBE_HIT_SS;
|
||||
return 1;
|
||||
|
|
|
@ -189,14 +189,11 @@ NORET_TYPE void machine_kexec(struct kimage *image)
|
|||
memcpy((void *)reboot_code_buffer, relocate_new_kernel,
|
||||
relocate_new_kernel_size);
|
||||
|
||||
/* The segment registers are funny things, they are
|
||||
* automatically loaded from a table, in memory wherever you
|
||||
* set them to a specific selector, but this table is never
|
||||
* accessed again you set the segment to a different selector.
|
||||
*
|
||||
* The more common model is are caches where the behide
|
||||
* the scenes work is done, but is also dropped at arbitrary
|
||||
* times.
|
||||
/* The segment registers are funny things, they have both a
|
||||
* visible and an invisible part. Whenever the visible part is
|
||||
* set to a specific selector, the invisible part is loaded
|
||||
* with from a table in memory. At no other time is the
|
||||
* descriptor table in memory accessed.
|
||||
*
|
||||
* I take advantage of this here by force loading the
|
||||
* segments, before I zap the gdt with an invalid value.
|
||||
|
|
|
@ -575,6 +575,7 @@ void touch_nmi_watchdog (void)
|
|||
*/
|
||||
touch_softlockup_watchdog();
|
||||
}
|
||||
EXPORT_SYMBOL(touch_nmi_watchdog);
|
||||
|
||||
extern void die_nmi(struct pt_regs *, const char *msg);
|
||||
|
||||
|
|
|
@ -359,16 +359,16 @@ EXPORT_SYMBOL(kernel_thread);
|
|||
*/
|
||||
void exit_thread(void)
|
||||
{
|
||||
struct task_struct *tsk = current;
|
||||
struct thread_struct *t = &tsk->thread;
|
||||
|
||||
/* The process may have allocated an io port bitmap... nuke it. */
|
||||
if (unlikely(NULL != t->io_bitmap_ptr)) {
|
||||
if (unlikely(test_thread_flag(TIF_IO_BITMAP))) {
|
||||
struct task_struct *tsk = current;
|
||||
struct thread_struct *t = &tsk->thread;
|
||||
int cpu = get_cpu();
|
||||
struct tss_struct *tss = &per_cpu(init_tss, cpu);
|
||||
|
||||
kfree(t->io_bitmap_ptr);
|
||||
t->io_bitmap_ptr = NULL;
|
||||
clear_thread_flag(TIF_IO_BITMAP);
|
||||
/*
|
||||
* Careful, clear this in the TSS too:
|
||||
*/
|
||||
|
@ -387,6 +387,7 @@ void flush_thread(void)
|
|||
|
||||
memset(tsk->thread.debugreg, 0, sizeof(unsigned long)*8);
|
||||
memset(tsk->thread.tls_array, 0, sizeof(tsk->thread.tls_array));
|
||||
clear_tsk_thread_flag(tsk, TIF_DEBUG);
|
||||
/*
|
||||
* Forget coprocessor state..
|
||||
*/
|
||||
|
@ -431,7 +432,7 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long esp,
|
|||
savesegment(gs,p->thread.gs);
|
||||
|
||||
tsk = current;
|
||||
if (unlikely(NULL != tsk->thread.io_bitmap_ptr)) {
|
||||
if (unlikely(test_tsk_thread_flag(tsk, TIF_IO_BITMAP))) {
|
||||
p->thread.io_bitmap_ptr = kmalloc(IO_BITMAP_BYTES, GFP_KERNEL);
|
||||
if (!p->thread.io_bitmap_ptr) {
|
||||
p->thread.io_bitmap_max = 0;
|
||||
|
@ -439,6 +440,7 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long esp,
|
|||
}
|
||||
memcpy(p->thread.io_bitmap_ptr, tsk->thread.io_bitmap_ptr,
|
||||
IO_BITMAP_BYTES);
|
||||
set_tsk_thread_flag(p, TIF_IO_BITMAP);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -533,10 +535,24 @@ int dump_task_regs(struct task_struct *tsk, elf_gregset_t *regs)
|
|||
return 1;
|
||||
}
|
||||
|
||||
static inline void
|
||||
handle_io_bitmap(struct thread_struct *next, struct tss_struct *tss)
|
||||
static noinline void __switch_to_xtra(struct task_struct *next_p,
|
||||
struct tss_struct *tss)
|
||||
{
|
||||
if (!next->io_bitmap_ptr) {
|
||||
struct thread_struct *next;
|
||||
|
||||
next = &next_p->thread;
|
||||
|
||||
if (test_tsk_thread_flag(next_p, TIF_DEBUG)) {
|
||||
set_debugreg(next->debugreg[0], 0);
|
||||
set_debugreg(next->debugreg[1], 1);
|
||||
set_debugreg(next->debugreg[2], 2);
|
||||
set_debugreg(next->debugreg[3], 3);
|
||||
/* no 4 and 5 */
|
||||
set_debugreg(next->debugreg[6], 6);
|
||||
set_debugreg(next->debugreg[7], 7);
|
||||
}
|
||||
|
||||
if (!test_tsk_thread_flag(next_p, TIF_IO_BITMAP)) {
|
||||
/*
|
||||
* Disable the bitmap via an invalid offset. We still cache
|
||||
* the previous bitmap owner and the IO bitmap contents:
|
||||
|
@ -544,6 +560,7 @@ handle_io_bitmap(struct thread_struct *next, struct tss_struct *tss)
|
|||
tss->io_bitmap_base = INVALID_IO_BITMAP_OFFSET;
|
||||
return;
|
||||
}
|
||||
|
||||
if (likely(next == tss->io_bitmap_owner)) {
|
||||
/*
|
||||
* Previous owner of the bitmap (hence the bitmap content)
|
||||
|
@ -671,20 +688,11 @@ struct task_struct fastcall * __switch_to(struct task_struct *prev_p, struct tas
|
|||
set_iopl_mask(next->iopl);
|
||||
|
||||
/*
|
||||
* Now maybe reload the debug registers
|
||||
* Now maybe handle debug registers and/or IO bitmaps
|
||||
*/
|
||||
if (unlikely(next->debugreg[7])) {
|
||||
set_debugreg(next->debugreg[0], 0);
|
||||
set_debugreg(next->debugreg[1], 1);
|
||||
set_debugreg(next->debugreg[2], 2);
|
||||
set_debugreg(next->debugreg[3], 3);
|
||||
/* no 4 and 5 */
|
||||
set_debugreg(next->debugreg[6], 6);
|
||||
set_debugreg(next->debugreg[7], 7);
|
||||
}
|
||||
|
||||
if (unlikely(prev->io_bitmap_ptr || next->io_bitmap_ptr))
|
||||
handle_io_bitmap(next, tss);
|
||||
if (unlikely((task_thread_info(next_p)->flags & _TIF_WORK_CTXSW)
|
||||
|| test_tsk_thread_flag(prev_p, TIF_IO_BITMAP)))
|
||||
__switch_to_xtra(next_p, tss);
|
||||
|
||||
disable_tsc(prev_p, next_p);
|
||||
|
||||
|
|
|
@ -468,8 +468,11 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
|
|||
for(i=0; i<4; i++)
|
||||
if ((0x5f54 >> ((data >> (16 + 4*i)) & 0xf)) & 1)
|
||||
goto out_tsk;
|
||||
if (data)
|
||||
set_tsk_thread_flag(child, TIF_DEBUG);
|
||||
else
|
||||
clear_tsk_thread_flag(child, TIF_DEBUG);
|
||||
}
|
||||
|
||||
addr -= (long) &dummy->u_debugreg;
|
||||
addr = addr >> 2;
|
||||
child->thread.debugreg[addr] = data;
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
#include <linux/sched.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/mmzone.h>
|
||||
#include <linux/tty.h>
|
||||
#include <linux/screen_info.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/acpi.h>
|
||||
#include <linux/apm_bios.h>
|
||||
|
@ -1327,7 +1327,10 @@ legacy_init_iomem_resources(struct resource *code_resource, struct resource *dat
|
|||
res->start = e820.map[i].addr;
|
||||
res->end = res->start + e820.map[i].size - 1;
|
||||
res->flags = IORESOURCE_MEM | IORESOURCE_BUSY;
|
||||
request_resource(&iomem_resource, res);
|
||||
if (request_resource(&iomem_resource, res)) {
|
||||
kfree(res);
|
||||
continue;
|
||||
}
|
||||
if (e820.map[i].type == E820_RAM) {
|
||||
/*
|
||||
* We don't know which RAM region contains kernel data,
|
||||
|
|
|
@ -212,14 +212,20 @@ valid_k7:
|
|||
* then we print a warning if not, and always resync.
|
||||
*/
|
||||
|
||||
static atomic_t tsc_start_flag = ATOMIC_INIT(0);
|
||||
static atomic_t tsc_count_start = ATOMIC_INIT(0);
|
||||
static atomic_t tsc_count_stop = ATOMIC_INIT(0);
|
||||
static unsigned long long tsc_values[NR_CPUS];
|
||||
static struct {
|
||||
atomic_t start_flag;
|
||||
atomic_t count_start;
|
||||
atomic_t count_stop;
|
||||
unsigned long long values[NR_CPUS];
|
||||
} tsc __initdata = {
|
||||
.start_flag = ATOMIC_INIT(0),
|
||||
.count_start = ATOMIC_INIT(0),
|
||||
.count_stop = ATOMIC_INIT(0),
|
||||
};
|
||||
|
||||
#define NR_LOOPS 5
|
||||
|
||||
static void __init synchronize_tsc_bp (void)
|
||||
static void __init synchronize_tsc_bp(void)
|
||||
{
|
||||
int i;
|
||||
unsigned long long t0;
|
||||
|
@ -233,7 +239,7 @@ static void __init synchronize_tsc_bp (void)
|
|||
/* convert from kcyc/sec to cyc/usec */
|
||||
one_usec = cpu_khz / 1000;
|
||||
|
||||
atomic_set(&tsc_start_flag, 1);
|
||||
atomic_set(&tsc.start_flag, 1);
|
||||
wmb();
|
||||
|
||||
/*
|
||||
|
@ -250,16 +256,16 @@ static void __init synchronize_tsc_bp (void)
|
|||
/*
|
||||
* all APs synchronize but they loop on '== num_cpus'
|
||||
*/
|
||||
while (atomic_read(&tsc_count_start) != num_booting_cpus()-1)
|
||||
while (atomic_read(&tsc.count_start) != num_booting_cpus()-1)
|
||||
cpu_relax();
|
||||
atomic_set(&tsc_count_stop, 0);
|
||||
atomic_set(&tsc.count_stop, 0);
|
||||
wmb();
|
||||
/*
|
||||
* this lets the APs save their current TSC:
|
||||
*/
|
||||
atomic_inc(&tsc_count_start);
|
||||
atomic_inc(&tsc.count_start);
|
||||
|
||||
rdtscll(tsc_values[smp_processor_id()]);
|
||||
rdtscll(tsc.values[smp_processor_id()]);
|
||||
/*
|
||||
* We clear the TSC in the last loop:
|
||||
*/
|
||||
|
@ -269,56 +275,54 @@ static void __init synchronize_tsc_bp (void)
|
|||
/*
|
||||
* Wait for all APs to leave the synchronization point:
|
||||
*/
|
||||
while (atomic_read(&tsc_count_stop) != num_booting_cpus()-1)
|
||||
while (atomic_read(&tsc.count_stop) != num_booting_cpus()-1)
|
||||
cpu_relax();
|
||||
atomic_set(&tsc_count_start, 0);
|
||||
atomic_set(&tsc.count_start, 0);
|
||||
wmb();
|
||||
atomic_inc(&tsc_count_stop);
|
||||
atomic_inc(&tsc.count_stop);
|
||||
}
|
||||
|
||||
sum = 0;
|
||||
for (i = 0; i < NR_CPUS; i++) {
|
||||
if (cpu_isset(i, cpu_callout_map)) {
|
||||
t0 = tsc_values[i];
|
||||
t0 = tsc.values[i];
|
||||
sum += t0;
|
||||
}
|
||||
}
|
||||
avg = sum;
|
||||
do_div(avg, num_booting_cpus());
|
||||
|
||||
sum = 0;
|
||||
for (i = 0; i < NR_CPUS; i++) {
|
||||
if (!cpu_isset(i, cpu_callout_map))
|
||||
continue;
|
||||
delta = tsc_values[i] - avg;
|
||||
delta = tsc.values[i] - avg;
|
||||
if (delta < 0)
|
||||
delta = -delta;
|
||||
/*
|
||||
* We report bigger than 2 microseconds clock differences.
|
||||
*/
|
||||
if (delta > 2*one_usec) {
|
||||
long realdelta;
|
||||
long long realdelta;
|
||||
|
||||
if (!buggy) {
|
||||
buggy = 1;
|
||||
printk("\n");
|
||||
}
|
||||
realdelta = delta;
|
||||
do_div(realdelta, one_usec);
|
||||
if (tsc_values[i] < avg)
|
||||
if (tsc.values[i] < avg)
|
||||
realdelta = -realdelta;
|
||||
|
||||
if (realdelta > 0)
|
||||
printk(KERN_INFO "CPU#%d had %ld usecs TSC "
|
||||
if (realdelta)
|
||||
printk(KERN_INFO "CPU#%d had %Ld usecs TSC "
|
||||
"skew, fixed it up.\n", i, realdelta);
|
||||
}
|
||||
|
||||
sum += delta;
|
||||
}
|
||||
if (!buggy)
|
||||
printk("passed.\n");
|
||||
}
|
||||
|
||||
static void __init synchronize_tsc_ap (void)
|
||||
static void __init synchronize_tsc_ap(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
|
@ -327,20 +331,20 @@ static void __init synchronize_tsc_ap (void)
|
|||
* this gets called, so we first wait for the BP to
|
||||
* finish SMP initialization:
|
||||
*/
|
||||
while (!atomic_read(&tsc_start_flag))
|
||||
while (!atomic_read(&tsc.start_flag))
|
||||
cpu_relax();
|
||||
|
||||
for (i = 0; i < NR_LOOPS; i++) {
|
||||
atomic_inc(&tsc_count_start);
|
||||
while (atomic_read(&tsc_count_start) != num_booting_cpus())
|
||||
atomic_inc(&tsc.count_start);
|
||||
while (atomic_read(&tsc.count_start) != num_booting_cpus())
|
||||
cpu_relax();
|
||||
|
||||
rdtscll(tsc_values[smp_processor_id()]);
|
||||
rdtscll(tsc.values[smp_processor_id()]);
|
||||
if (i == NR_LOOPS-1)
|
||||
write_tsc(0, 0);
|
||||
|
||||
atomic_inc(&tsc_count_stop);
|
||||
while (atomic_read(&tsc_count_stop) != num_booting_cpus())
|
||||
atomic_inc(&tsc.count_stop);
|
||||
while (atomic_read(&tsc.count_stop) != num_booting_cpus())
|
||||
cpu_relax();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -135,7 +135,7 @@ unsigned long profile_pc(struct pt_regs *regs)
|
|||
{
|
||||
unsigned long pc = instruction_pointer(regs);
|
||||
|
||||
if (in_lock_functions(pc))
|
||||
if (!user_mode_vm(regs) && in_lock_functions(pc))
|
||||
return *(unsigned long *)(regs->ebp + 4);
|
||||
|
||||
return pc;
|
||||
|
@ -206,15 +206,16 @@ irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
|
|||
unsigned long get_cmos_time(void)
|
||||
{
|
||||
unsigned long retval;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock(&rtc_lock);
|
||||
spin_lock_irqsave(&rtc_lock, flags);
|
||||
|
||||
if (efi_enabled)
|
||||
retval = efi_get_time();
|
||||
else
|
||||
retval = mach_get_cmos_time();
|
||||
|
||||
spin_unlock(&rtc_lock);
|
||||
spin_unlock_irqrestore(&rtc_lock, flags);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
|
|
@ -100,13 +100,13 @@ int register_die_notifier(struct notifier_block *nb)
|
|||
vmalloc_sync_all();
|
||||
return atomic_notifier_chain_register(&i386die_chain, nb);
|
||||
}
|
||||
EXPORT_SYMBOL(register_die_notifier);
|
||||
EXPORT_SYMBOL(register_die_notifier); /* used modular by kdb */
|
||||
|
||||
int unregister_die_notifier(struct notifier_block *nb)
|
||||
{
|
||||
return atomic_notifier_chain_unregister(&i386die_chain, nb);
|
||||
}
|
||||
EXPORT_SYMBOL(unregister_die_notifier);
|
||||
EXPORT_SYMBOL(unregister_die_notifier); /* used modular by kdb */
|
||||
|
||||
static inline int valid_stack_ptr(struct thread_info *tinfo, void *p)
|
||||
{
|
||||
|
@ -187,10 +187,21 @@ static void show_trace_log_lvl(struct task_struct *task, struct pt_regs *regs,
|
|||
if (unwind_init_blocked(&info, task) == 0)
|
||||
unw_ret = show_trace_unwind(&info, log_lvl);
|
||||
}
|
||||
if (unw_ret > 0) {
|
||||
if (call_trace > 0)
|
||||
if (unw_ret > 0 && !arch_unw_user_mode(&info)) {
|
||||
#ifdef CONFIG_STACK_UNWIND
|
||||
print_symbol("DWARF2 unwinder stuck at %s\n",
|
||||
UNW_PC(&info));
|
||||
if (call_trace == 1) {
|
||||
printk("Leftover inexact backtrace:\n");
|
||||
if (UNW_SP(&info))
|
||||
stack = (void *)UNW_SP(&info);
|
||||
} else if (call_trace > 1)
|
||||
return;
|
||||
printk("%sLegacy call trace:\n", log_lvl);
|
||||
else
|
||||
printk("Full inexact backtrace again:\n");
|
||||
#else
|
||||
printk("Inexact backtrace:\n");
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -324,35 +335,35 @@ void show_registers(struct pt_regs *regs)
|
|||
|
||||
static void handle_BUG(struct pt_regs *regs)
|
||||
{
|
||||
unsigned long eip = regs->eip;
|
||||
unsigned short ud2;
|
||||
unsigned short line;
|
||||
char *file;
|
||||
char c;
|
||||
unsigned long eip;
|
||||
|
||||
eip = regs->eip;
|
||||
|
||||
if (eip < PAGE_OFFSET)
|
||||
goto no_bug;
|
||||
return;
|
||||
if (__get_user(ud2, (unsigned short __user *)eip))
|
||||
goto no_bug;
|
||||
return;
|
||||
if (ud2 != 0x0b0f)
|
||||
goto no_bug;
|
||||
if (__get_user(line, (unsigned short __user *)(eip + 2)))
|
||||
goto bug;
|
||||
if (__get_user(file, (char * __user *)(eip + 4)) ||
|
||||
(unsigned long)file < PAGE_OFFSET || __get_user(c, file))
|
||||
file = "<bad filename>";
|
||||
return;
|
||||
|
||||
printk(KERN_EMERG "------------[ cut here ]------------\n");
|
||||
printk(KERN_EMERG "kernel BUG at %s:%d!\n", file, line);
|
||||
|
||||
no_bug:
|
||||
return;
|
||||
#ifdef CONFIG_DEBUG_BUGVERBOSE
|
||||
do {
|
||||
unsigned short line;
|
||||
char *file;
|
||||
char c;
|
||||
|
||||
/* Here we know it was a BUG but file-n-line is unavailable */
|
||||
bug:
|
||||
printk(KERN_EMERG "Kernel BUG\n");
|
||||
if (__get_user(line, (unsigned short __user *)(eip + 2)))
|
||||
break;
|
||||
if (__get_user(file, (char * __user *)(eip + 4)) ||
|
||||
(unsigned long)file < PAGE_OFFSET || __get_user(c, file))
|
||||
file = "<bad filename>";
|
||||
|
||||
printk(KERN_EMERG "kernel BUG at %s:%d!\n", file, line);
|
||||
return;
|
||||
} while (0);
|
||||
#endif
|
||||
printk(KERN_EMERG "Kernel BUG at [verbose debug info unavailable]\n");
|
||||
}
|
||||
|
||||
/* This is gone through when something in the kernel
|
||||
|
@ -442,11 +453,9 @@ void die(const char * str, struct pt_regs * regs, long err)
|
|||
if (in_interrupt())
|
||||
panic("Fatal exception in interrupt");
|
||||
|
||||
if (panic_on_oops) {
|
||||
printk(KERN_EMERG "Fatal exception: panic in 5 seconds\n");
|
||||
ssleep(5);
|
||||
panic("Fatal exception");
|
||||
}
|
||||
if (panic_on_oops)
|
||||
panic("Fatal exception: panic_on_oops");
|
||||
|
||||
oops_exit();
|
||||
do_exit(SIGSEGV);
|
||||
}
|
||||
|
@ -1238,8 +1247,10 @@ static int __init call_trace_setup(char *s)
|
|||
call_trace = -1;
|
||||
else if (strcmp(s, "both") == 0)
|
||||
call_trace = 0;
|
||||
else if (strcmp(s, "new") == 0)
|
||||
else if (strcmp(s, "newfallback") == 0)
|
||||
call_trace = 1;
|
||||
else if (strcmp(s, "new") == 2)
|
||||
call_trace = 2;
|
||||
return 1;
|
||||
}
|
||||
__setup("call_trace=", call_trace_setup);
|
||||
|
|
|
@ -10,6 +10,7 @@ SECTIONS
|
|||
. = VDSO_PRELINK + SIZEOF_HEADERS;
|
||||
|
||||
.hash : { *(.hash) } :text
|
||||
.gnu.hash : { *(.gnu.hash) }
|
||||
.dynsym : { *(.dynsym) }
|
||||
.dynstr : { *(.dynstr) }
|
||||
.gnu.version : { *(.gnu.version) }
|
||||
|
|
|
@ -843,7 +843,6 @@ unsigned long __copy_from_user_ll_nocache_nozero(void *to, const void __user *fr
|
|||
unsigned long
|
||||
copy_to_user(void __user *to, const void *from, unsigned long n)
|
||||
{
|
||||
might_sleep();
|
||||
BUG_ON((long) n < 0);
|
||||
if (access_ok(VERIFY_WRITE, to, n))
|
||||
n = __copy_to_user(to, from, n);
|
||||
|
@ -870,7 +869,6 @@ EXPORT_SYMBOL(copy_to_user);
|
|||
unsigned long
|
||||
copy_from_user(void *to, const void __user *from, unsigned long n)
|
||||
{
|
||||
might_sleep();
|
||||
BUG_ON((long) n < 0);
|
||||
if (access_ok(VERIFY_READ, from, n))
|
||||
n = __copy_from_user(to, from, n);
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
#include <linux/oprofile.h>
|
||||
#include <linux/sysdev.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/moduleparam.h>
|
||||
#include <asm/nmi.h>
|
||||
#include <asm/msr.h>
|
||||
#include <asm/apic.h>
|
||||
|
@ -296,12 +297,14 @@ static int nmi_create_files(struct super_block * sb, struct dentry * root)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int p4force;
|
||||
module_param(p4force, int, 0);
|
||||
|
||||
static int __init p4_init(char ** cpu_type)
|
||||
{
|
||||
__u8 cpu_model = boot_cpu_data.x86_model;
|
||||
|
||||
if (cpu_model > 4)
|
||||
if (!p4force && (cpu_model > 6 || cpu_model == 5))
|
||||
return 0;
|
||||
|
||||
#ifndef CONFIG_SMP
|
||||
|
|
|
@ -17,10 +17,6 @@
|
|||
|
||||
#include "pci.h"
|
||||
|
||||
#ifdef CONFIG_PCI_BIOS
|
||||
extern void pcibios_sort(void);
|
||||
#endif
|
||||
|
||||
unsigned int pci_probe = PCI_PROBE_BIOS | PCI_PROBE_CONF1 | PCI_PROBE_CONF2 |
|
||||
PCI_PROBE_MMCONF;
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue