Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6
This commit is contained in:
commit
1e42198609
346 changed files with 8503 additions and 5962 deletions
|
@ -271,8 +271,6 @@ netlabel/
|
|||
- directory with information on the NetLabel subsystem.
|
||||
networking/
|
||||
- directory with info on various aspects of networking with Linux.
|
||||
nfsroot.txt
|
||||
- short guide on setting up a diskless box with NFS root filesystem.
|
||||
nmi_watchdog.txt
|
||||
- info on NMI watchdog for SMP systems.
|
||||
nommu-mmap.txt
|
||||
|
@ -321,8 +319,6 @@ robust-futexes.txt
|
|||
- a description of what robust futexes are.
|
||||
rocket.txt
|
||||
- info on the Comtrol RocketPort multiport serial driver.
|
||||
rpc-cache.txt
|
||||
- introduction to the caching mechanisms in the sunrpc layer.
|
||||
rt-mutex-design.txt
|
||||
- description of the RealTime mutex implementation design.
|
||||
rt-mutex.txt
|
||||
|
|
|
@ -328,7 +328,7 @@ now, but you can do this to mark internal company procedures or just
|
|||
point out some special detail about the sign-off.
|
||||
|
||||
|
||||
13) When to use Acked-by:
|
||||
13) When to use Acked-by: and Cc:
|
||||
|
||||
The Signed-off-by: tag indicates that the signer was involved in the
|
||||
development of the patch, or that he/she was in the patch's delivery path.
|
||||
|
@ -349,11 +349,59 @@ Acked-by: does not necessarily indicate acknowledgement of the entire patch.
|
|||
For example, if a patch affects multiple subsystems and has an Acked-by: from
|
||||
one subsystem maintainer then this usually indicates acknowledgement of just
|
||||
the part which affects that maintainer's code. Judgement should be used here.
|
||||
When in doubt people should refer to the original discussion in the mailing
|
||||
When in doubt people should refer to the original discussion in the mailing
|
||||
list archives.
|
||||
|
||||
If a person has had the opportunity to comment on a patch, but has not
|
||||
provided such comments, you may optionally add a "Cc:" tag to the patch.
|
||||
This is the only tag which might be added without an explicit action by the
|
||||
person it names. This tag documents that potentially interested parties
|
||||
have been included in the discussion
|
||||
|
||||
14) The canonical patch format
|
||||
|
||||
14) Using Test-by: and Reviewed-by:
|
||||
|
||||
A Tested-by: tag indicates that the patch has been successfully tested (in
|
||||
some environment) by the person named. This tag informs maintainers that
|
||||
some testing has been performed, provides a means to locate testers for
|
||||
future patches, and ensures credit for the testers.
|
||||
|
||||
Reviewed-by:, instead, indicates that the patch has been reviewed and found
|
||||
acceptable according to the Reviewer's Statement:
|
||||
|
||||
Reviewer's statement of oversight
|
||||
|
||||
By offering my Reviewed-by: tag, I state that:
|
||||
|
||||
(a) I have carried out a technical review of this patch to
|
||||
evaluate its appropriateness and readiness for inclusion into
|
||||
the mainline kernel.
|
||||
|
||||
(b) Any problems, concerns, or questions relating to the patch
|
||||
have been communicated back to the submitter. I am satisfied
|
||||
with the submitter's response to my comments.
|
||||
|
||||
(c) While there may be things that could be improved with this
|
||||
submission, I believe that it is, at this time, (1) a
|
||||
worthwhile modification to the kernel, and (2) free of known
|
||||
issues which would argue against its inclusion.
|
||||
|
||||
(d) While I have reviewed the patch and believe it to be sound, I
|
||||
do not (unless explicitly stated elsewhere) make any
|
||||
warranties or guarantees that it will achieve its stated
|
||||
purpose or function properly in any given situation.
|
||||
|
||||
A Reviewed-by tag is a statement of opinion that the patch is an
|
||||
appropriate modification of the kernel without any remaining serious
|
||||
technical issues. Any interested reviewer (who has done the work) can
|
||||
offer a Reviewed-by tag for a patch. This tag serves to give credit to
|
||||
reviewers and to inform maintainers of the degree of review which has been
|
||||
done on the patch. Reviewed-by: tags, when supplied by reviewers known to
|
||||
understand the subject area and to perform thorough reviews, will normally
|
||||
increase the liklihood of your patch getting into the kernel.
|
||||
|
||||
|
||||
15) The canonical patch format
|
||||
|
||||
The canonical patch subject line is:
|
||||
|
||||
|
|
|
@ -66,6 +66,8 @@ mandatory-locking.txt
|
|||
- info on the Linux implementation of Sys V mandatory file locking.
|
||||
ncpfs.txt
|
||||
- info on Novell Netware(tm) filesystem using NCP protocol.
|
||||
nfsroot.txt
|
||||
- short guide on setting up a diskless box with NFS root filesystem.
|
||||
ntfs.txt
|
||||
- info and mount options for the NTFS filesystem (Windows NT).
|
||||
ocfs2.txt
|
||||
|
@ -82,6 +84,10 @@ relay.txt
|
|||
- info on relay, for efficient streaming from kernel to user space.
|
||||
romfs.txt
|
||||
- description of the ROMFS filesystem.
|
||||
rpc-cache.txt
|
||||
- introduction to the caching mechanisms in the sunrpc layer.
|
||||
seq_file.txt
|
||||
- how to use the seq_file API
|
||||
sharedsubtree.txt
|
||||
- a description of shared subtrees for namespaces.
|
||||
smbfs.txt
|
||||
|
|
283
Documentation/filesystems/seq_file.txt
Normal file
283
Documentation/filesystems/seq_file.txt
Normal file
|
@ -0,0 +1,283 @@
|
|||
The seq_file interface
|
||||
|
||||
Copyright 2003 Jonathan Corbet <corbet@lwn.net>
|
||||
This file is originally from the LWN.net Driver Porting series at
|
||||
http://lwn.net/Articles/driver-porting/
|
||||
|
||||
|
||||
There are numerous ways for a device driver (or other kernel component) to
|
||||
provide information to the user or system administrator. One useful
|
||||
technique is the creation of virtual files, in debugfs, /proc or elsewhere.
|
||||
Virtual files can provide human-readable output that is easy to get at
|
||||
without any special utility programs; they can also make life easier for
|
||||
script writers. It is not surprising that the use of virtual files has
|
||||
grown over the years.
|
||||
|
||||
Creating those files correctly has always been a bit of a challenge,
|
||||
however. It is not that hard to make a virtual file which returns a
|
||||
string. But life gets trickier if the output is long - anything greater
|
||||
than an application is likely to read in a single operation. Handling
|
||||
multiple reads (and seeks) requires careful attention to the reader's
|
||||
position within the virtual file - that position is, likely as not, in the
|
||||
middle of a line of output. The kernel has traditionally had a number of
|
||||
implementations that got this wrong.
|
||||
|
||||
The 2.6 kernel contains a set of functions (implemented by Alexander Viro)
|
||||
which are designed to make it easy for virtual file creators to get it
|
||||
right.
|
||||
|
||||
The seq_file interface is available via <linux/seq_file.h>. There are
|
||||
three aspects to seq_file:
|
||||
|
||||
* An iterator interface which lets a virtual file implementation
|
||||
step through the objects it is presenting.
|
||||
|
||||
* Some utility functions for formatting objects for output without
|
||||
needing to worry about things like output buffers.
|
||||
|
||||
* A set of canned file_operations which implement most operations on
|
||||
the virtual file.
|
||||
|
||||
We'll look at the seq_file interface via an extremely simple example: a
|
||||
loadable module which creates a file called /proc/sequence. The file, when
|
||||
read, simply produces a set of increasing integer values, one per line. The
|
||||
sequence will continue until the user loses patience and finds something
|
||||
better to do. The file is seekable, in that one can do something like the
|
||||
following:
|
||||
|
||||
dd if=/proc/sequence of=out1 count=1
|
||||
dd if=/proc/sequence skip=1 out=out2 count=1
|
||||
|
||||
Then concatenate the output files out1 and out2 and get the right
|
||||
result. Yes, it is a thoroughly useless module, but the point is to show
|
||||
how the mechanism works without getting lost in other details. (Those
|
||||
wanting to see the full source for this module can find it at
|
||||
http://lwn.net/Articles/22359/).
|
||||
|
||||
|
||||
The iterator interface
|
||||
|
||||
Modules implementing a virtual file with seq_file must implement a simple
|
||||
iterator object that allows stepping through the data of interest.
|
||||
Iterators must be able to move to a specific position - like the file they
|
||||
implement - but the interpretation of that position is up to the iterator
|
||||
itself. A seq_file implementation that is formatting firewall rules, for
|
||||
example, could interpret position N as the Nth rule in the chain.
|
||||
Positioning can thus be done in whatever way makes the most sense for the
|
||||
generator of the data, which need not be aware of how a position translates
|
||||
to an offset in the virtual file. The one obvious exception is that a
|
||||
position of zero should indicate the beginning of the file.
|
||||
|
||||
The /proc/sequence iterator just uses the count of the next number it
|
||||
will output as its position.
|
||||
|
||||
Four functions must be implemented to make the iterator work. The first,
|
||||
called start() takes a position as an argument and returns an iterator
|
||||
which will start reading at that position. For our simple sequence example,
|
||||
the start() function looks like:
|
||||
|
||||
static void *ct_seq_start(struct seq_file *s, loff_t *pos)
|
||||
{
|
||||
loff_t *spos = kmalloc(sizeof(loff_t), GFP_KERNEL);
|
||||
if (! spos)
|
||||
return NULL;
|
||||
*spos = *pos;
|
||||
return spos;
|
||||
}
|
||||
|
||||
The entire data structure for this iterator is a single loff_t value
|
||||
holding the current position. There is no upper bound for the sequence
|
||||
iterator, but that will not be the case for most other seq_file
|
||||
implementations; in most cases the start() function should check for a
|
||||
"past end of file" condition and return NULL if need be.
|
||||
|
||||
For more complicated applications, the private field of the seq_file
|
||||
structure can be used. There is also a special value which can be returned
|
||||
by the start() function called SEQ_START_TOKEN; it can be used if you wish
|
||||
to instruct your show() function (described below) to print a header at the
|
||||
top of the output. SEQ_START_TOKEN should only be used if the offset is
|
||||
zero, however.
|
||||
|
||||
The next function to implement is called, amazingly, next(); its job is to
|
||||
move the iterator forward to the next position in the sequence. The
|
||||
example module can simply increment the position by one; more useful
|
||||
modules will do what is needed to step through some data structure. The
|
||||
next() function returns a new iterator, or NULL if the sequence is
|
||||
complete. Here's the example version:
|
||||
|
||||
static void *ct_seq_next(struct seq_file *s, void *v, loff_t *pos)
|
||||
{
|
||||
loff_t *spos = v;
|
||||
*pos = ++*spos;
|
||||
return spos;
|
||||
}
|
||||
|
||||
The stop() function is called when iteration is complete; its job, of
|
||||
course, is to clean up. If dynamic memory is allocated for the iterator,
|
||||
stop() is the place to free it.
|
||||
|
||||
static void ct_seq_stop(struct seq_file *s, void *v)
|
||||
{
|
||||
kfree(v);
|
||||
}
|
||||
|
||||
Finally, the show() function should format the object currently pointed to
|
||||
by the iterator for output. It should return zero, or an error code if
|
||||
something goes wrong. The example module's show() function is:
|
||||
|
||||
static int ct_seq_show(struct seq_file *s, void *v)
|
||||
{
|
||||
loff_t *spos = v;
|
||||
seq_printf(s, "%lld\n", (long long)*spos);
|
||||
return 0;
|
||||
}
|
||||
|
||||
We will look at seq_printf() in a moment. But first, the definition of the
|
||||
seq_file iterator is finished by creating a seq_operations structure with
|
||||
the four functions we have just defined:
|
||||
|
||||
static const struct seq_operations ct_seq_ops = {
|
||||
.start = ct_seq_start,
|
||||
.next = ct_seq_next,
|
||||
.stop = ct_seq_stop,
|
||||
.show = ct_seq_show
|
||||
};
|
||||
|
||||
This structure will be needed to tie our iterator to the /proc file in
|
||||
a little bit.
|
||||
|
||||
It's worth noting that the iterator value returned by start() and
|
||||
manipulated by the other functions is considered to be completely opaque by
|
||||
the seq_file code. It can thus be anything that is useful in stepping
|
||||
through the data to be output. Counters can be useful, but it could also be
|
||||
a direct pointer into an array or linked list. Anything goes, as long as
|
||||
the programmer is aware that things can happen between calls to the
|
||||
iterator function. However, the seq_file code (by design) will not sleep
|
||||
between the calls to start() and stop(), so holding a lock during that time
|
||||
is a reasonable thing to do. The seq_file code will also avoid taking any
|
||||
other locks while the iterator is active.
|
||||
|
||||
|
||||
Formatted output
|
||||
|
||||
The seq_file code manages positioning within the output created by the
|
||||
iterator and getting it into the user's buffer. But, for that to work, that
|
||||
output must be passed to the seq_file code. Some utility functions have
|
||||
been defined which make this task easy.
|
||||
|
||||
Most code will simply use seq_printf(), which works pretty much like
|
||||
printk(), but which requires the seq_file pointer as an argument. It is
|
||||
common to ignore the return value from seq_printf(), but a function
|
||||
producing complicated output may want to check that value and quit if
|
||||
something non-zero is returned; an error return means that the seq_file
|
||||
buffer has been filled and further output will be discarded.
|
||||
|
||||
For straight character output, the following functions may be used:
|
||||
|
||||
int seq_putc(struct seq_file *m, char c);
|
||||
int seq_puts(struct seq_file *m, const char *s);
|
||||
int seq_escape(struct seq_file *m, const char *s, const char *esc);
|
||||
|
||||
The first two output a single character and a string, just like one would
|
||||
expect. seq_escape() is like seq_puts(), except that any character in s
|
||||
which is in the string esc will be represented in octal form in the output.
|
||||
|
||||
There is also a function for printing filenames:
|
||||
|
||||
int seq_path(struct seq_file *m, struct path *path, char *esc);
|
||||
|
||||
Here, path indicates the file of interest, and esc is a set of characters
|
||||
which should be escaped in the output.
|
||||
|
||||
|
||||
Making it all work
|
||||
|
||||
So far, we have a nice set of functions which can produce output within the
|
||||
seq_file system, but we have not yet turned them into a file that a user
|
||||
can see. Creating a file within the kernel requires, of course, the
|
||||
creation of a set of file_operations which implement the operations on that
|
||||
file. The seq_file interface provides a set of canned operations which do
|
||||
most of the work. The virtual file author still must implement the open()
|
||||
method, however, to hook everything up. The open function is often a single
|
||||
line, as in the example module:
|
||||
|
||||
static int ct_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
return seq_open(file, &ct_seq_ops);
|
||||
}
|
||||
|
||||
Here, the call to seq_open() takes the seq_operations structure we created
|
||||
before, and gets set up to iterate through the virtual file.
|
||||
|
||||
On a successful open, seq_open() stores the struct seq_file pointer in
|
||||
file->private_data. If you have an application where the same iterator can
|
||||
be used for more than one file, you can store an arbitrary pointer in the
|
||||
private field of the seq_file structure; that value can then be retrieved
|
||||
by the iterator functions.
|
||||
|
||||
The other operations of interest - read(), llseek(), and release() - are
|
||||
all implemented by the seq_file code itself. So a virtual file's
|
||||
file_operations structure will look like:
|
||||
|
||||
static const struct file_operations ct_file_ops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = ct_open,
|
||||
.read = seq_read,
|
||||
.llseek = seq_lseek,
|
||||
.release = seq_release
|
||||
};
|
||||
|
||||
There is also a seq_release_private() which passes the contents of the
|
||||
seq_file private field to kfree() before releasing the structure.
|
||||
|
||||
The final step is the creation of the /proc file itself. In the example
|
||||
code, that is done in the initialization code in the usual way:
|
||||
|
||||
static int ct_init(void)
|
||||
{
|
||||
struct proc_dir_entry *entry;
|
||||
|
||||
entry = create_proc_entry("sequence", 0, NULL);
|
||||
if (entry)
|
||||
entry->proc_fops = &ct_file_ops;
|
||||
return 0;
|
||||
}
|
||||
|
||||
module_init(ct_init);
|
||||
|
||||
And that is pretty much it.
|
||||
|
||||
|
||||
seq_list
|
||||
|
||||
If your file will be iterating through a linked list, you may find these
|
||||
routines useful:
|
||||
|
||||
struct list_head *seq_list_start(struct list_head *head,
|
||||
loff_t pos);
|
||||
struct list_head *seq_list_start_head(struct list_head *head,
|
||||
loff_t pos);
|
||||
struct list_head *seq_list_next(void *v, struct list_head *head,
|
||||
loff_t *ppos);
|
||||
|
||||
These helpers will interpret pos as a position within the list and iterate
|
||||
accordingly. Your start() and next() functions need only invoke the
|
||||
seq_list_* helpers with a pointer to the appropriate list_head structure.
|
||||
|
||||
|
||||
The extra-simple version
|
||||
|
||||
For extremely simple virtual files, there is an even easier interface. A
|
||||
module can define only the show() function, which should create all the
|
||||
output that the virtual file will contain. The file's open() method then
|
||||
calls:
|
||||
|
||||
int single_open(struct file *file,
|
||||
int (*show)(struct seq_file *m, void *p),
|
||||
void *data);
|
||||
|
||||
When output time comes, the show() function will be called once. The data
|
||||
value given to single_open() can be found in the private field of the
|
||||
seq_file structure. When using single_open(), the programmer should use
|
||||
single_release() instead of seq_release() in the file_operations structure
|
||||
to avoid a memory leak.
|
|
@ -98,7 +98,7 @@ System-level global event devices are used for the Linux periodic tick. Per-CPU
|
|||
event devices are used to provide local CPU functionality such as process
|
||||
accounting, profiling, and high resolution timers.
|
||||
|
||||
The management layer assignes one or more of the folliwing functions to a clock
|
||||
The management layer assigns one or more of the following functions to a clock
|
||||
event device:
|
||||
- system global periodic tick (jiffies update)
|
||||
- cpu local update_process_times
|
||||
|
|
|
@ -375,6 +375,10 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||
ccw_timeout_log [S390]
|
||||
See Documentation/s390/CommonIO for details.
|
||||
|
||||
cgroup_disable= [KNL] Disable a particular controller
|
||||
Format: {name of the controller(s) to disable}
|
||||
{Currently supported controllers - "memory"}
|
||||
|
||||
checkreqprot [SELINUX] Set initial checkreqprot flag value.
|
||||
Format: { "0" | "1" }
|
||||
See security/selinux/Kconfig help text.
|
||||
|
@ -840,7 +844,7 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||
arch/alpha/kernel/core_marvel.c.
|
||||
|
||||
ip= [IP_PNP]
|
||||
See Documentation/nfsroot.txt.
|
||||
See Documentation/filesystems/nfsroot.txt.
|
||||
|
||||
ip2= [HW] Set IO/IRQ pairs for up to 4 IntelliPort boards
|
||||
See comment before ip2_setup() in
|
||||
|
@ -1194,10 +1198,10 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||
file if at all.
|
||||
|
||||
nfsaddrs= [NFS]
|
||||
See Documentation/nfsroot.txt.
|
||||
See Documentation/filesystems/nfsroot.txt.
|
||||
|
||||
nfsroot= [NFS] nfs root filesystem for disk-less boxes.
|
||||
See Documentation/nfsroot.txt.
|
||||
See Documentation/filesystems/nfsroot.txt.
|
||||
|
||||
nfs.callback_tcpport=
|
||||
[NFS] set the TCP port on which the NFSv4 callback
|
||||
|
|
|
@ -281,10 +281,10 @@ solution for a couple of reasons:
|
|||
sa_family_t can_family;
|
||||
int can_ifindex;
|
||||
union {
|
||||
struct { canid_t rx_id, tx_id; } tp16;
|
||||
struct { canid_t rx_id, tx_id; } tp20;
|
||||
struct { canid_t rx_id, tx_id; } mcnet;
|
||||
struct { canid_t rx_id, tx_id; } isotp;
|
||||
/* transport protocol class address info (e.g. ISOTP) */
|
||||
struct { canid_t rx_id, tx_id; } tp;
|
||||
|
||||
/* reserved for future CAN protocols address information */
|
||||
} can_addr;
|
||||
};
|
||||
|
||||
|
|
|
@ -12,5 +12,7 @@ sched-domains.txt
|
|||
- information on scheduling domains.
|
||||
sched-nice-design.txt
|
||||
- How and why the scheduler's nice levels are implemented.
|
||||
sched-rt-group.txt
|
||||
- real-time group scheduling.
|
||||
sched-stats.txt
|
||||
- information on schedstats (Linux Scheduler Statistics).
|
||||
|
|
|
@ -116,6 +116,13 @@ low order bit. So when a chip's timing diagram shows the clock
|
|||
starting low (CPOL=0) and data stabilized for sampling during the
|
||||
trailing clock edge (CPHA=1), that's SPI mode 1.
|
||||
|
||||
Note that the clock mode is relevant as soon as the chipselect goes
|
||||
active. So the master must set the clock to inactive before selecting
|
||||
a slave, and the slave can tell the chosen polarity by sampling the
|
||||
clock level when its select line goes active. That's why many devices
|
||||
support for example both modes 0 and 3: they don't care about polarity,
|
||||
and alway clock data in/out on rising clock edges.
|
||||
|
||||
|
||||
How do these driver programming interfaces work?
|
||||
------------------------------------------------
|
||||
|
@ -379,8 +386,14 @@ any more such messages.
|
|||
+ when bidirectional reads and writes start ... by how its
|
||||
sequence of spi_transfer requests is arranged;
|
||||
|
||||
+ which I/O buffers are used ... each spi_transfer wraps a
|
||||
buffer for each transfer direction, supporting full duplex
|
||||
(two pointers, maybe the same one in both cases) and half
|
||||
duplex (one pointer is NULL) transfers;
|
||||
|
||||
+ optionally defining short delays after transfers ... using
|
||||
the spi_transfer.delay_usecs setting;
|
||||
the spi_transfer.delay_usecs setting (this delay can be the
|
||||
only protocol effect, if the buffer length is zero);
|
||||
|
||||
+ whether the chipselect becomes inactive after a transfer and
|
||||
any delay ... by using the spi_transfer.cs_change flag;
|
||||
|
|
|
@ -5,6 +5,28 @@ Please use DEFINE_SPINLOCK()/DEFINE_RWLOCK() or
|
|||
__SPIN_LOCK_UNLOCKED()/__RW_LOCK_UNLOCKED() as appropriate for static
|
||||
initialization.
|
||||
|
||||
Most of the time, you can simply turn:
|
||||
|
||||
static spinlock_t xxx_lock = SPIN_LOCK_UNLOCKED;
|
||||
|
||||
into:
|
||||
|
||||
static DEFINE_SPINLOCK(xxx_lock);
|
||||
|
||||
Static structure member variables go from:
|
||||
|
||||
struct foo bar {
|
||||
.lock = SPIN_LOCK_UNLOCKED;
|
||||
};
|
||||
|
||||
to:
|
||||
|
||||
struct foo bar {
|
||||
.lock = __SPIN_LOCK_UNLOCKED(bar.lock);
|
||||
};
|
||||
|
||||
Declaration of static rw_locks undergo a similar transformation.
|
||||
|
||||
Dynamic initialization, when necessary, may be performed as
|
||||
demonstrated below.
|
||||
|
||||
|
|
|
@ -88,10 +88,9 @@ hugepages from the buddy allocator, if the normal pool is exhausted. As
|
|||
these surplus hugepages go out of use, they are freed back to the buddy
|
||||
allocator.
|
||||
|
||||
Caveat: Shrinking the pool via nr_hugepages while a surplus is in effect
|
||||
will allow the number of surplus huge pages to exceed the overcommit
|
||||
value, as the pool hugepages (which must have been in use for a surplus
|
||||
hugepages to be allocated) will become surplus hugepages. As long as
|
||||
Caveat: Shrinking the pool via nr_hugepages such that it becomes less
|
||||
than the number of hugepages in use will convert the balance to surplus
|
||||
huge pages even if it would exceed the overcommit value. As long as
|
||||
this condition holds, however, no more surplus huge pages will be
|
||||
allowed on the system until one of the two sysctls are increased
|
||||
sufficiently, or the surplus huge pages go out of use and are freed.
|
||||
|
|
14
MAINTAINERS
14
MAINTAINERS
|
@ -2107,7 +2107,7 @@ M: reinette.chatre@intel.com
|
|||
L: linux-wireless@vger.kernel.org
|
||||
L: ipw3945-devel@lists.sourceforge.net
|
||||
W: http://intellinuxwireless.org
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/rchatre/iwlwifi-2.6.git
|
||||
T: git kernel.org:/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-2.6.git
|
||||
S: Supported
|
||||
|
||||
IOC3 ETHERNET DRIVER
|
||||
|
@ -2188,7 +2188,7 @@ S: Maintained
|
|||
ISDN SUBSYSTEM
|
||||
P: Karsten Keil
|
||||
M: kkeil@suse.de
|
||||
L: isdn4linux@listserv.isdn4linux.de
|
||||
L: isdn4linux@listserv.isdn4linux.de (subscribers-only)
|
||||
W: http://www.isdn4linux.de
|
||||
T: git kernel.org:/pub/scm/linux/kernel/kkeil/isdn-2.6.git
|
||||
S: Maintained
|
||||
|
@ -2196,7 +2196,7 @@ S: Maintained
|
|||
ISDN SUBSYSTEM (Eicon active card driver)
|
||||
P: Armin Schindler
|
||||
M: mac@melware.de
|
||||
L: isdn4linux@listserv.isdn4linux.de
|
||||
L: isdn4linux@listserv.isdn4linux.de (subscribers-only)
|
||||
W: http://www.melware.de
|
||||
S: Maintained
|
||||
|
||||
|
@ -3271,6 +3271,7 @@ L: linux-wireless@vger.kernel.org
|
|||
L: rt2400-devel@lists.sourceforge.net
|
||||
W: http://rt2x00.serialmonkey.com/
|
||||
S: Maintained
|
||||
T: git kernel.org:/pub/scm/linux/kernel/git/ivd/rt2x00.git
|
||||
F: drivers/net/wireless/rt2x00/
|
||||
|
||||
RAMDISK RAM BLOCK DEVICE DRIVER
|
||||
|
@ -3333,6 +3334,13 @@ L: reiserfs-devel@vger.kernel.org
|
|||
W: http://www.namesys.com
|
||||
S: Supported
|
||||
|
||||
RFKILL
|
||||
P: Ivo van Doorn
|
||||
M: IvDoorn@gmail.com
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: net/rfkill
|
||||
|
||||
ROCKETPORT DRIVER
|
||||
P: Comtrol Corp.
|
||||
W: http://www.comtrol.com
|
||||
|
|
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
|||
VERSION = 2
|
||||
PATCHLEVEL = 6
|
||||
SUBLEVEL = 25
|
||||
EXTRAVERSION = -rc8
|
||||
EXTRAVERSION =
|
||||
NAME = Funky Weasel is Jiggy wit it
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
|
|
@ -10,7 +10,6 @@ config AVR32
|
|||
# With EMBEDDED=n, we get lots of stuff automatically selected
|
||||
# that we usually don't need on AVR32.
|
||||
select EMBEDDED
|
||||
select HAVE_IDE
|
||||
select HAVE_OPROFILE
|
||||
select HAVE_KPROBES
|
||||
help
|
||||
|
|
|
@ -316,8 +316,14 @@ __trap_fixup_kernel_data_tlb_miss:
|
|||
.section .trap.vector
|
||||
.org TBR_TT_TRAP0 >> 2
|
||||
.long system_call
|
||||
.rept 126
|
||||
.rept 119
|
||||
.long __entry_unsupported_trap
|
||||
.endr
|
||||
|
||||
# userspace atomic op emulation, traps 120-126
|
||||
.rept 7
|
||||
.long __entry_atomic_op
|
||||
.endr
|
||||
|
||||
.org TBR_TT_BREAK >> 2
|
||||
.long __entry_debug_exception
|
||||
|
|
|
@ -654,6 +654,26 @@ __entry_debug_exception:
|
|||
movgs gr4,psr
|
||||
jmpl @(gr5,gr0) ; call ill_insn(esfr1,epcr0,esr0)
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
# handle atomic operation emulation for userspace
|
||||
#
|
||||
###############################################################################
|
||||
.globl __entry_atomic_op
|
||||
__entry_atomic_op:
|
||||
LEDS 0x6012
|
||||
sethi.p %hi(atomic_operation),gr5
|
||||
setlo %lo(atomic_operation),gr5
|
||||
movsg esfr1,gr8
|
||||
movsg epcr0,gr9
|
||||
movsg esr0,gr10
|
||||
|
||||
# now that we've accessed the exception regs, we can enable exceptions
|
||||
movsg psr,gr4
|
||||
ori gr4,#PSR_ET,gr4
|
||||
movgs gr4,psr
|
||||
jmpl @(gr5,gr0) ; call atomic_operation(esfr1,epcr0,esr0)
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
# handle media exception
|
||||
|
|
|
@ -46,5 +46,5 @@
|
|||
#ifdef CONFIG_MMU
|
||||
__sdram_base = 0x00000000 /* base address to which SDRAM relocated */
|
||||
#else
|
||||
__sdram_base = 0xc0000000 /* base address to which SDRAM relocated */
|
||||
__sdram_base = __page_offset /* base address to which SDRAM relocated */
|
||||
#endif
|
||||
|
|
|
@ -102,13 +102,6 @@ __switch_to:
|
|||
movgs gr14,lr
|
||||
bar
|
||||
|
||||
srli gr15,#28,gr5
|
||||
subicc gr5,#0xc,gr0,icc0
|
||||
beq icc0,#0,111f
|
||||
break
|
||||
nop
|
||||
111:
|
||||
|
||||
# jump to __switch_back or ret_from_fork as appropriate
|
||||
# - move prev to GR8
|
||||
movgs gr4,psr
|
||||
|
|
|
@ -73,7 +73,7 @@ asmlinkage void illegal_instruction(unsigned long esfr1, unsigned long epcr0, un
|
|||
epcr0, esr0, esfr1);
|
||||
|
||||
info.si_errno = 0;
|
||||
info.si_addr = (void *) ((epcr0 & EPCR0_PC) ? (epcr0 & EPCR0_PC) : __frame->pc);
|
||||
info.si_addr = (void *) ((epcr0 & EPCR0_V) ? (epcr0 & EPCR0_PC) : __frame->pc);
|
||||
|
||||
switch (__frame->tbr & TBR_TT) {
|
||||
case TBR_TT_ILLEGAL_INSTR:
|
||||
|
@ -100,6 +100,233 @@ asmlinkage void illegal_instruction(unsigned long esfr1, unsigned long epcr0, un
|
|||
force_sig_info(info.si_signo, &info, current);
|
||||
} /* end illegal_instruction() */
|
||||
|
||||
/*****************************************************************************/
|
||||
/*
|
||||
* handle atomic operations with errors
|
||||
* - arguments in gr8, gr9, gr10
|
||||
* - original memory value placed in gr5
|
||||
* - replacement memory value placed in gr9
|
||||
*/
|
||||
asmlinkage void atomic_operation(unsigned long esfr1, unsigned long epcr0,
|
||||
unsigned long esr0)
|
||||
{
|
||||
static DEFINE_SPINLOCK(atomic_op_lock);
|
||||
unsigned long x, y, z, *p;
|
||||
mm_segment_t oldfs;
|
||||
siginfo_t info;
|
||||
int ret;
|
||||
|
||||
y = 0;
|
||||
z = 0;
|
||||
|
||||
oldfs = get_fs();
|
||||
if (!user_mode(__frame))
|
||||
set_fs(KERNEL_DS);
|
||||
|
||||
switch (__frame->tbr & TBR_TT) {
|
||||
/* TIRA gr0,#120
|
||||
* u32 __atomic_user_cmpxchg32(u32 *ptr, u32 test, u32 new)
|
||||
*/
|
||||
case TBR_TT_ATOMIC_CMPXCHG32:
|
||||
p = (unsigned long *) __frame->gr8;
|
||||
x = __frame->gr9;
|
||||
y = __frame->gr10;
|
||||
|
||||
for (;;) {
|
||||
ret = get_user(z, p);
|
||||
if (ret < 0)
|
||||
goto error;
|
||||
|
||||
if (z != x)
|
||||
goto done;
|
||||
|
||||
spin_lock_irq(&atomic_op_lock);
|
||||
|
||||
if (__get_user(z, p) == 0) {
|
||||
if (z != x)
|
||||
goto done2;
|
||||
|
||||
if (__put_user(y, p) == 0)
|
||||
goto done2;
|
||||
goto error2;
|
||||
}
|
||||
|
||||
spin_unlock_irq(&atomic_op_lock);
|
||||
}
|
||||
|
||||
/* TIRA gr0,#121
|
||||
* u32 __atomic_kernel_xchg32(void *v, u32 new)
|
||||
*/
|
||||
case TBR_TT_ATOMIC_XCHG32:
|
||||
p = (unsigned long *) __frame->gr8;
|
||||
y = __frame->gr9;
|
||||
|
||||
for (;;) {
|
||||
ret = get_user(z, p);
|
||||
if (ret < 0)
|
||||
goto error;
|
||||
|
||||
spin_lock_irq(&atomic_op_lock);
|
||||
|
||||
if (__get_user(z, p) == 0) {
|
||||
if (__put_user(y, p) == 0)
|
||||
goto done2;
|
||||
goto error2;
|
||||
}
|
||||
|
||||
spin_unlock_irq(&atomic_op_lock);
|
||||
}
|
||||
|
||||
/* TIRA gr0,#122
|
||||
* ulong __atomic_kernel_XOR_return(ulong i, ulong *v)
|
||||
*/
|
||||
case TBR_TT_ATOMIC_XOR:
|
||||
p = (unsigned long *) __frame->gr8;
|
||||
x = __frame->gr9;
|
||||
|
||||
for (;;) {
|
||||
ret = get_user(z, p);
|
||||
if (ret < 0)
|
||||
goto error;
|
||||
|
||||
spin_lock_irq(&atomic_op_lock);
|
||||
|
||||
if (__get_user(z, p) == 0) {
|
||||
y = x ^ z;
|
||||
if (__put_user(y, p) == 0)
|
||||
goto done2;
|
||||
goto error2;
|
||||
}
|
||||
|
||||
spin_unlock_irq(&atomic_op_lock);
|
||||
}
|
||||
|
||||
/* TIRA gr0,#123
|
||||
* ulong __atomic_kernel_OR_return(ulong i, ulong *v)
|
||||
*/
|
||||
case TBR_TT_ATOMIC_OR:
|
||||
p = (unsigned long *) __frame->gr8;
|
||||
x = __frame->gr9;
|
||||
|
||||
for (;;) {
|
||||
ret = get_user(z, p);
|
||||
if (ret < 0)
|
||||
goto error;
|
||||
|
||||
spin_lock_irq(&atomic_op_lock);
|
||||
|
||||
if (__get_user(z, p) == 0) {
|
||||
y = x ^ z;
|
||||
if (__put_user(y, p) == 0)
|
||||
goto done2;
|
||||
goto error2;
|
||||
}
|
||||
|
||||
spin_unlock_irq(&atomic_op_lock);
|
||||
}
|
||||
|
||||
/* TIRA gr0,#124
|
||||
* ulong __atomic_kernel_AND_return(ulong i, ulong *v)
|
||||
*/
|
||||
case TBR_TT_ATOMIC_AND:
|
||||
p = (unsigned long *) __frame->gr8;
|
||||
x = __frame->gr9;
|
||||
|
||||
for (;;) {
|
||||
ret = get_user(z, p);
|
||||
if (ret < 0)
|
||||
goto error;
|
||||
|
||||
spin_lock_irq(&atomic_op_lock);
|
||||
|
||||
if (__get_user(z, p) == 0) {
|
||||
y = x & z;
|
||||
if (__put_user(y, p) == 0)
|
||||
goto done2;
|
||||
goto error2;
|
||||
}
|
||||
|
||||
spin_unlock_irq(&atomic_op_lock);
|
||||
}
|
||||
|
||||
/* TIRA gr0,#125
|
||||
* int __atomic_user_sub_return(atomic_t *v, int i)
|
||||
*/
|
||||
case TBR_TT_ATOMIC_SUB:
|
||||
p = (unsigned long *) __frame->gr8;
|
||||
x = __frame->gr9;
|
||||
|
||||
for (;;) {
|
||||
ret = get_user(z, p);
|
||||
if (ret < 0)
|
||||
goto error;
|
||||
|
||||
spin_lock_irq(&atomic_op_lock);
|
||||
|
||||
if (__get_user(z, p) == 0) {
|
||||
y = z - x;
|
||||
if (__put_user(y, p) == 0)
|
||||
goto done2;
|
||||
goto error2;
|
||||
}
|
||||
|
||||
spin_unlock_irq(&atomic_op_lock);
|
||||
}
|
||||
|
||||
/* TIRA gr0,#126
|
||||
* int __atomic_user_add_return(atomic_t *v, int i)
|
||||
*/
|
||||
case TBR_TT_ATOMIC_ADD:
|
||||
p = (unsigned long *) __frame->gr8;
|
||||
x = __frame->gr9;
|
||||
|
||||
for (;;) {
|
||||
ret = get_user(z, p);
|
||||
if (ret < 0)
|
||||
goto error;
|
||||
|
||||
spin_lock_irq(&atomic_op_lock);
|
||||
|
||||
if (__get_user(z, p) == 0) {
|
||||
y = z + x;
|
||||
if (__put_user(y, p) == 0)
|
||||
goto done2;
|
||||
goto error2;
|
||||
}
|
||||
|
||||
spin_unlock_irq(&atomic_op_lock);
|
||||
}
|
||||
|
||||
default:
|
||||
BUG();
|
||||
}
|
||||
|
||||
done2:
|
||||
spin_unlock_irq(&atomic_op_lock);
|
||||
done:
|
||||
if (!user_mode(__frame))
|
||||
set_fs(oldfs);
|
||||
__frame->gr5 = z;
|
||||
__frame->gr9 = y;
|
||||
return;
|
||||
|
||||
error2:
|
||||
spin_unlock_irq(&atomic_op_lock);
|
||||
error:
|
||||
if (!user_mode(__frame))
|
||||
set_fs(oldfs);
|
||||
__frame->pc -= 4;
|
||||
|
||||
die_if_kernel("-- Atomic Op Error --\n");
|
||||
|
||||
info.si_signo = SIGSEGV;
|
||||
info.si_code = SEGV_ACCERR;
|
||||
info.si_errno = 0;
|
||||
info.si_addr = (void *) __frame->pc;
|
||||
|
||||
force_sig_info(info.si_signo, &info, current);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/*
|
||||
*
|
||||
|
|
|
@ -362,7 +362,12 @@ pci_acpi_scan_root(struct acpi_device *device, int domain, int bus)
|
|||
info.name = name;
|
||||
acpi_walk_resources(device->handle, METHOD_NAME__CRS, add_window,
|
||||
&info);
|
||||
|
||||
/*
|
||||
* See arch/x86/pci/acpi.c.
|
||||
* The desired pci bus might already be scanned in a quirk. We
|
||||
* should handle the case here, but it appears that IA64 hasn't
|
||||
* such quirk. So we just ignore the case now.
|
||||
*/
|
||||
pbus = pci_scan_bus_parented(NULL, bus, &pci_root_ops, controller);
|
||||
if (pbus)
|
||||
pcibios_setup_root_windows(pbus, controller);
|
||||
|
|
|
@ -13,6 +13,8 @@
|
|||
# Copyright (C) 1994 by Hamish Macdonald
|
||||
#
|
||||
|
||||
KBUILD_DEFCONFIG := amiga_defconfig
|
||||
|
||||
# override top level makefile
|
||||
AS += -m68020
|
||||
LDFLAGS := -m m68kelf
|
||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -1,657 +0,0 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.12-rc6-m68k
|
||||
# Tue Jun 7 20:34:17 2005
|
||||
#
|
||||
CONFIG_M68K=y
|
||||
CONFIG_MMU=y
|
||||
CONFIG_UID16=y
|
||||
CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
|
||||
#
|
||||
# Code maturity level options
|
||||
#
|
||||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_CLEAN_COMPILE=y
|
||||
CONFIG_BROKEN_ON_SMP=y
|
||||
CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||
|
||||
#
|
||||
# General setup
|
||||
#
|
||||
CONFIG_LOCALVERSION=""
|
||||
CONFIG_SWAP=y
|
||||
CONFIG_SYSVIPC=y
|
||||
# CONFIG_POSIX_MQUEUE is not set
|
||||
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||
CONFIG_SYSCTL=y
|
||||
# CONFIG_AUDIT is not set
|
||||
# CONFIG_HOTPLUG is not set
|
||||
CONFIG_KOBJECT_UEVENT=y
|
||||
# CONFIG_IKCONFIG is not set
|
||||
# CONFIG_EMBEDDED is not set
|
||||
CONFIG_KALLSYMS=y
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_CC_ALIGN_FUNCTIONS=0
|
||||
CONFIG_CC_ALIGN_LABELS=0
|
||||
CONFIG_CC_ALIGN_LOOPS=0
|
||||
CONFIG_CC_ALIGN_JUMPS=0
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
|
||||
#
|
||||
# Loadable module support
|
||||
#
|
||||
# CONFIG_MODULES is not set
|
||||
|
||||
#
|
||||
# Platform dependent setup
|
||||
#
|
||||
# CONFIG_SUN3 is not set
|
||||
CONFIG_AMIGA=y
|
||||
# CONFIG_ATARI is not set
|
||||
# CONFIG_MAC is not set
|
||||
# CONFIG_APOLLO is not set
|
||||
# CONFIG_VME is not set
|
||||
# CONFIG_HP300 is not set
|
||||
# CONFIG_SUN3X is not set
|
||||
# CONFIG_Q40 is not set
|
||||
|
||||
#
|
||||
# Processor type
|
||||
#
|
||||
CONFIG_M68020=y
|
||||
CONFIG_M68030=y
|
||||
CONFIG_M68040=y
|
||||
# CONFIG_M68060 is not set
|
||||
CONFIG_MMU_MOTOROLA=y
|
||||
# CONFIG_M68KFPU_EMU is not set
|
||||
# CONFIG_ADVANCED is not set
|
||||
|
||||
#
|
||||
# General setup
|
||||
#
|
||||
CONFIG_BINFMT_ELF=y
|
||||
CONFIG_BINFMT_AOUT=y
|
||||
# CONFIG_BINFMT_MISC is not set
|
||||
CONFIG_ZORRO=y
|
||||
# CONFIG_AMIGA_PCMCIA is not set
|
||||
# CONFIG_HEARTBEAT is not set
|
||||
CONFIG_PROC_HARDWARE=y
|
||||
# CONFIG_ZORRO_NAMES is not set
|
||||
|
||||
#
|
||||
# Device Drivers
|
||||
#
|
||||
|
||||
#
|
||||
# Generic Driver Options
|
||||
#
|
||||
CONFIG_STANDALONE=y
|
||||
CONFIG_PREVENT_FIRMWARE_BUILD=y
|
||||
# CONFIG_FW_LOADER is not set
|
||||
|
||||
#
|
||||
# Memory Technology Devices (MTD)
|
||||
#
|
||||
# CONFIG_MTD is not set
|
||||
|
||||
#
|
||||
# Parallel port support
|
||||
#
|
||||
# CONFIG_PARPORT is not set
|
||||
|
||||
#
|
||||
# Plug and Play support
|
||||
#
|
||||
|
||||
#
|
||||
# Block devices
|
||||
#
|
||||
CONFIG_AMIGA_FLOPPY=y
|
||||
# CONFIG_AMIGA_Z2RAM is not set
|
||||
# CONFIG_BLK_DEV_COW_COMMON is not set
|
||||
# CONFIG_BLK_DEV_LOOP is not set
|
||||
# CONFIG_BLK_DEV_NBD is not set
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_COUNT=16
|
||||
CONFIG_BLK_DEV_RAM_SIZE=4096
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_CDROM_PKTCDVD=y
|
||||
CONFIG_CDROM_PKTCDVD_BUFFERS=8
|
||||
# CONFIG_CDROM_PKTCDVD_WCACHE is not set
|
||||
|
||||
#
|
||||
# IO Schedulers
|
||||
#
|
||||
CONFIG_IOSCHED_NOOP=y
|
||||
CONFIG_IOSCHED_AS=y
|
||||
CONFIG_IOSCHED_DEADLINE=y
|
||||
CONFIG_IOSCHED_CFQ=y
|
||||
# CONFIG_ATA_OVER_ETH is not set
|
||||
|
||||
#
|
||||
# ATA/ATAPI/MFM/RLL support
|
||||
#
|
||||
# CONFIG_IDE is not set
|
||||
|
||||
#
|
||||
# SCSI device support
|
||||
#
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_SCSI_PROC_FS=y
|
||||
|
||||
#
|
||||
# SCSI support type (disk, tape, CD-ROM)
|
||||
#
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_CHR_DEV_ST=y
|
||||
# CONFIG_CHR_DEV_OSST is not set
|
||||
CONFIG_BLK_DEV_SR=y
|
||||
# CONFIG_BLK_DEV_SR_VENDOR is not set
|
||||
# CONFIG_CHR_DEV_SG is not set
|
||||
|
||||
#
|
||||
# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
|
||||
#
|
||||
# CONFIG_SCSI_MULTI_LUN is not set
|
||||
CONFIG_SCSI_CONSTANTS=y
|
||||
# CONFIG_SCSI_LOGGING is not set
|
||||
|
||||
#
|
||||
# SCSI Transport Attributes
|
||||
#
|
||||
# CONFIG_SCSI_SPI_ATTRS is not set
|
||||
# CONFIG_SCSI_FC_ATTRS is not set
|
||||
# CONFIG_SCSI_ISCSI_ATTRS is not set
|
||||
|
||||
#
|
||||
# SCSI low-level drivers
|
||||
#
|
||||
# CONFIG_SCSI_SATA is not set
|
||||
# CONFIG_SCSI_DEBUG is not set
|
||||
CONFIG_A3000_SCSI=y
|
||||
CONFIG_A2091_SCSI=y
|
||||
CONFIG_GVP11_SCSI=y
|
||||
# CONFIG_CYBERSTORM_SCSI is not set
|
||||
# CONFIG_CYBERSTORMII_SCSI is not set
|
||||
# CONFIG_BLZ2060_SCSI is not set
|
||||
# CONFIG_BLZ1230_SCSI is not set
|
||||
# CONFIG_FASTLANE_SCSI is not set
|
||||
# CONFIG_OKTAGON_SCSI is not set
|
||||
|
||||
#
|
||||
# Multi-device support (RAID and LVM)
|
||||
#
|
||||
# CONFIG_MD is not set
|
||||
|
||||
#
|
||||
# Fusion MPT device support
|
||||
#
|
||||
|
||||
#
|
||||
# IEEE 1394 (FireWire) support
|
||||
#
|
||||
|
||||
#
|
||||
# I2O device support
|
||||
#
|
||||
|
||||
#
|
||||
# Networking support
|
||||
#
|
||||
CONFIG_NET=y
|
||||
|
||||
#
|
||||
# Networking options
|
||||
#
|
||||
CONFIG_PACKET=y
|
||||
# CONFIG_PACKET_MMAP is not set
|
||||
CONFIG_UNIX=y
|
||||
# CONFIG_NET_KEY is not set
|
||||
CONFIG_INET=y
|
||||
# CONFIG_IP_MULTICAST is not set
|
||||
# CONFIG_IP_ADVANCED_ROUTER is not set
|
||||
# CONFIG_IP_PNP is not set
|
||||
# CONFIG_NET_IPIP is not set
|
||||
# CONFIG_NET_IPGRE is not set
|
||||
# CONFIG_ARPD is not set
|
||||
# CONFIG_SYN_COOKIES is not set
|
||||
# CONFIG_INET_AH is not set
|
||||
# CONFIG_INET_ESP is not set
|
||||
# CONFIG_INET_IPCOMP is not set
|
||||
# CONFIG_INET_TUNNEL is not set
|
||||
CONFIG_IP_TCPDIAG=y
|
||||
# CONFIG_IP_TCPDIAG_IPV6 is not set
|
||||
# CONFIG_IPV6 is not set
|
||||
# CONFIG_NETFILTER is not set
|
||||
|
||||
#
|
||||
# SCTP Configuration (EXPERIMENTAL)
|
||||
#
|
||||
# CONFIG_IP_SCTP is not set
|
||||
# CONFIG_ATM is not set
|
||||
# CONFIG_BRIDGE is not set
|
||||
# CONFIG_VLAN_8021Q is not set
|
||||
# CONFIG_DECNET is not set
|
||||
# CONFIG_LLC2 is not set
|
||||
# CONFIG_IPX is not set
|
||||
# CONFIG_ATALK is not set
|
||||
# CONFIG_X25 is not set
|
||||
# CONFIG_LAPB is not set
|
||||
# CONFIG_NET_DIVERT is not set
|
||||
# CONFIG_ECONET is not set
|
||||
# CONFIG_WAN_ROUTER is not set
|
||||
|
||||
#
|
||||
# QoS and/or fair queueing
|
||||
#
|
||||
# CONFIG_NET_SCHED is not set
|
||||
# CONFIG_NET_CLS_ROUTE is not set
|
||||
|
||||
#
|
||||
# Network testing
|
||||
#
|
||||
# CONFIG_NET_PKTGEN is not set
|
||||
# CONFIG_NETPOLL is not set
|
||||
# CONFIG_NET_POLL_CONTROLLER is not set
|
||||
# CONFIG_HAMRADIO is not set
|
||||
# CONFIG_IRDA is not set
|
||||
# CONFIG_BT is not set
|
||||
CONFIG_NETDEVICES=y
|
||||
# CONFIG_DUMMY is not set
|
||||
# CONFIG_BONDING is not set
|
||||
# CONFIG_EQUALIZER is not set
|
||||
# CONFIG_TUN is not set
|
||||
|
||||
#
|
||||
# Ethernet (10 or 100Mbit)
|
||||
#
|
||||
# CONFIG_NET_ETHERNET is not set
|
||||
|
||||
#
|
||||
# Ethernet (1000 Mbit)
|
||||
#
|
||||
|
||||
#
|
||||
# Ethernet (10000 Mbit)
|
||||
#
|
||||
|
||||
#
|
||||
# Token Ring devices
|
||||
#
|
||||
|
||||
#
|
||||
# Wireless LAN (non-hamradio)
|
||||
#
|
||||
# CONFIG_NET_RADIO is not set
|
||||
|
||||
#
|
||||
# Wan interfaces
|
||||
#
|
||||
# CONFIG_WAN is not set
|
||||
# CONFIG_PPP is not set
|
||||
# CONFIG_SLIP is not set
|
||||
# CONFIG_SHAPER is not set
|
||||
# CONFIG_NETCONSOLE is not set
|
||||
|
||||
#
|
||||
# ISDN subsystem
|
||||
#
|
||||
# CONFIG_ISDN is not set
|
||||
|
||||
#
|
||||
# Telephony Support
|
||||
#
|
||||
# CONFIG_PHONE is not set
|
||||
|
||||
#
|
||||
# Input device support
|
||||
#
|
||||
CONFIG_INPUT=y
|
||||
|
||||
#
|
||||
# Userland interfaces
|
||||
#
|
||||
CONFIG_INPUT_MOUSEDEV=y
|
||||
CONFIG_INPUT_MOUSEDEV_PSAUX=y
|
||||
CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
|
||||
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
|
||||
# CONFIG_INPUT_JOYDEV is not set
|
||||
# CONFIG_INPUT_TSDEV is not set
|
||||
# CONFIG_INPUT_EVDEV is not set
|
||||
# CONFIG_INPUT_EVBUG is not set
|
||||
|
||||
#
|
||||
# Input Device Drivers
|
||||
#
|
||||
CONFIG_INPUT_KEYBOARD=y
|
||||
CONFIG_KEYBOARD_ATKBD=y
|
||||
# CONFIG_KEYBOARD_SUNKBD is not set
|
||||
# CONFIG_KEYBOARD_LKKBD is not set
|
||||
# CONFIG_KEYBOARD_XTKBD is not set
|
||||
# CONFIG_KEYBOARD_NEWTON is not set
|
||||
# CONFIG_KEYBOARD_AMIGA is not set
|
||||
CONFIG_INPUT_MOUSE=y
|
||||
CONFIG_MOUSE_PS2=y
|
||||
# CONFIG_MOUSE_SERIAL is not set
|
||||
# CONFIG_MOUSE_AMIGA is not set
|
||||
# CONFIG_MOUSE_VSXXXAA is not set
|
||||
# CONFIG_INPUT_JOYSTICK is not set
|
||||
# CONFIG_INPUT_TOUCHSCREEN is not set
|
||||
# CONFIG_INPUT_MISC is not set
|
||||
|
||||
#
|
||||
# Hardware I/O ports
|
||||
#
|
||||
CONFIG_SERIO=y
|
||||
CONFIG_SERIO_SERPORT=y
|
||||
CONFIG_SERIO_LIBPS2=y
|
||||
# CONFIG_SERIO_RAW is not set
|
||||
# CONFIG_GAMEPORT is not set
|
||||
|
||||
#
|
||||
# Character devices
|
||||
#
|
||||
CONFIG_VT=y
|
||||
CONFIG_VT_CONSOLE=y
|
||||
CONFIG_HW_CONSOLE=y
|
||||
# CONFIG_SERIAL_NONSTANDARD is not set
|
||||
# CONFIG_A2232 is not set
|
||||
|
||||
#
|
||||
# Serial drivers
|
||||
#
|
||||
# CONFIG_SERIAL_8250 is not set
|
||||
|
||||
#
|
||||
# Non-8250 serial port support
|
||||
#
|
||||
CONFIG_UNIX98_PTYS=y
|
||||
CONFIG_LEGACY_PTYS=y
|
||||
CONFIG_LEGACY_PTY_COUNT=256
|
||||
|
||||
#
|
||||
# IPMI
|
||||
#
|
||||
# CONFIG_IPMI_HANDLER is not set
|
||||
|
||||
#
|
||||
# Watchdog Cards
|
||||
#
|
||||
# CONFIG_WATCHDOG is not set
|
||||
# CONFIG_GEN_RTC is not set
|
||||
# CONFIG_DTLK is not set
|
||||
# CONFIG_R3964 is not set
|
||||
|
||||
#
|
||||
# Ftape, the floppy tape device driver
|
||||
#
|
||||
# CONFIG_DRM is not set
|
||||
# CONFIG_RAW_DRIVER is not set
|
||||
|
||||
#
|
||||
# TPM devices
|
||||
#
|
||||
|
||||
#
|
||||
# I2C support
|
||||
#
|
||||
# CONFIG_I2C is not set
|
||||
|
||||
#
|
||||
# Dallas's 1-wire bus
|
||||
#
|
||||
# CONFIG_W1 is not set
|
||||
|
||||
#
|
||||
# Misc devices
|
||||
#
|
||||
|
||||
#
|
||||
# Multimedia devices
|
||||
#
|
||||
# CONFIG_VIDEO_DEV is not set
|
||||
|
||||
#
|
||||
# Digital Video Broadcasting Devices
|
||||
#
|
||||
# CONFIG_DVB is not set
|
||||
|
||||
#
|
||||
# Graphics support
|
||||
#
|
||||
CONFIG_FB=y
|
||||
# CONFIG_FB_CFB_FILLRECT is not set
|
||||
# CONFIG_FB_CFB_COPYAREA is not set
|
||||
# CONFIG_FB_CFB_IMAGEBLIT is not set
|
||||
CONFIG_FB_SOFT_CURSOR=y
|
||||
# CONFIG_FB_MACMODES is not set
|
||||
CONFIG_FB_MODE_HELPERS=y
|
||||
# CONFIG_FB_TILEBLITTING is not set
|
||||
# CONFIG_FB_CIRRUS is not set
|
||||
CONFIG_FB_AMIGA=y
|
||||
CONFIG_FB_AMIGA_OCS=y
|
||||
CONFIG_FB_AMIGA_ECS=y
|
||||
CONFIG_FB_AMIGA_AGA=y
|
||||
# CONFIG_FB_FM2 is not set
|
||||
# CONFIG_FB_S1D13XXX is not set
|
||||
# CONFIG_FB_VIRTUAL is not set
|
||||
|
||||
#
|
||||
# Console display driver support
|
||||
#
|
||||
CONFIG_DUMMY_CONSOLE=y
|
||||
# CONFIG_FRAMEBUFFER_CONSOLE is not set
|
||||
|
||||
#
|
||||
# Logo configuration
|
||||
#
|
||||
# CONFIG_LOGO is not set
|
||||
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
|
||||
|
||||
#
|
||||
# Sound
|
||||
#
|
||||
# CONFIG_SOUND is not set
|
||||
|
||||
#
|
||||
# USB support
|
||||
#
|
||||
# CONFIG_USB_ARCH_HAS_HCD is not set
|
||||
# CONFIG_USB_ARCH_HAS_OHCI is not set
|
||||
|
||||
#
|
||||
# USB Gadget Support
|
||||
#
|
||||
# CONFIG_USB_GADGET is not set
|
||||
|
||||
#
|
||||
# MMC/SD Card support
|
||||
#
|
||||
# CONFIG_MMC is not set
|
||||
|
||||
#
|
||||
# InfiniBand support
|
||||
#
|
||||
# CONFIG_INFINIBAND is not set
|
||||
|
||||
#
|
||||
# Character devices
|
||||
#
|
||||
CONFIG_AMIGA_BUILTIN_SERIAL=y
|
||||
# CONFIG_MULTIFACE_III_TTY is not set
|
||||
# CONFIG_GVPIOEXT is not set
|
||||
# CONFIG_SERIAL_CONSOLE is not set
|
||||
|
||||
#
|
||||
# File systems
|
||||
#
|
||||
CONFIG_EXT2_FS=y
|
||||
# CONFIG_EXT2_FS_XATTR is not set
|
||||
# CONFIG_EXT3_FS is not set
|
||||
# CONFIG_JBD is not set
|
||||
# CONFIG_REISERFS_FS is not set
|
||||
# CONFIG_JFS_FS is not set
|
||||
|
||||
#
|
||||
# XFS support
|
||||
#
|
||||
# CONFIG_XFS_FS is not set
|
||||
CONFIG_MINIX_FS=y
|
||||
# CONFIG_ROMFS_FS is not set
|
||||
# CONFIG_QUOTA is not set
|
||||
CONFIG_DNOTIFY=y
|
||||
# CONFIG_AUTOFS_FS is not set
|
||||
# CONFIG_AUTOFS4_FS is not set
|
||||
|
||||
#
|
||||
# CD-ROM/DVD Filesystems
|
||||
#
|
||||
# CONFIG_ISO9660_FS is not set
|
||||
# CONFIG_UDF_FS is not set
|
||||
|
||||
#
|
||||
# DOS/FAT/NT Filesystems
|
||||
#
|
||||
CONFIG_FAT_FS=y
|
||||
CONFIG_MSDOS_FS=y
|
||||
# CONFIG_VFAT_FS is not set
|
||||
CONFIG_FAT_DEFAULT_CODEPAGE=437
|
||||
# CONFIG_NTFS_FS is not set
|
||||
|
||||
#
|
||||
# Pseudo filesystems
|
||||
#
|
||||
CONFIG_PROC_FS=y
|
||||
CONFIG_PROC_KCORE=y
|
||||
CONFIG_SYSFS=y
|
||||
# CONFIG_DEVFS_FS is not set
|
||||
# CONFIG_DEVPTS_FS_XATTR is not set
|
||||
# CONFIG_TMPFS is not set
|
||||
# CONFIG_HUGETLB_PAGE is not set
|
||||
CONFIG_RAMFS=y
|
||||
|
||||
#
|
||||
# Miscellaneous filesystems
|
||||
#
|
||||
# CONFIG_ADFS_FS is not set
|
||||
# CONFIG_AFFS_FS is not set
|
||||
# CONFIG_HFS_FS is not set
|
||||
# CONFIG_HFSPLUS_FS is not set
|
||||
# CONFIG_BEFS_FS is not set
|
||||
# CONFIG_BFS_FS is not set
|
||||
# CONFIG_EFS_FS is not set
|
||||
# CONFIG_CRAMFS is not set
|
||||
# CONFIG_VXFS_FS is not set
|
||||
# CONFIG_HPFS_FS is not set
|
||||
# CONFIG_QNX4FS_FS is not set
|
||||
# CONFIG_SYSV_FS is not set
|
||||
# CONFIG_UFS_FS is not set
|
||||
|
||||
#
|
||||
# Network File Systems
|
||||
#
|
||||
CONFIG_NFS_FS=y
|
||||
# CONFIG_NFS_V3 is not set
|
||||
# CONFIG_NFS_V4 is not set
|
||||
# CONFIG_NFS_DIRECTIO is not set
|
||||
# CONFIG_NFSD is not set
|
||||
CONFIG_LOCKD=y
|
||||
CONFIG_SUNRPC=y
|
||||
# CONFIG_RPCSEC_GSS_KRB5 is not set
|
||||
# CONFIG_RPCSEC_GSS_SPKM3 is not set
|
||||
# CONFIG_SMB_FS is not set
|
||||
# CONFIG_CIFS is not set
|
||||
# CONFIG_NCP_FS is not set
|
||||
# CONFIG_CODA_FS is not set
|
||||
# CONFIG_AFS_FS is not set
|
||||
|
||||
#
|
||||
# Partition Types
|
||||
#
|
||||
# CONFIG_PARTITION_ADVANCED is not set
|
||||
CONFIG_AMIGA_PARTITION=y
|
||||
CONFIG_MSDOS_PARTITION=y
|
||||
|
||||
#
|
||||
# Native Language Support
|
||||
#
|
||||
CONFIG_NLS=y
|
||||
CONFIG_NLS_DEFAULT="iso8859-1"
|
||||
CONFIG_NLS_CODEPAGE_437=y
|
||||
# CONFIG_NLS_CODEPAGE_737 is not set
|
||||
# CONFIG_NLS_CODEPAGE_775 is not set
|
||||
# CONFIG_NLS_CODEPAGE_850 is not set
|
||||
# CONFIG_NLS_CODEPAGE_852 is not set
|
||||
# CONFIG_NLS_CODEPAGE_855 is not set
|
||||
# CONFIG_NLS_CODEPAGE_857 is not set
|
||||
# CONFIG_NLS_CODEPAGE_860 is not set
|
||||
# CONFIG_NLS_CODEPAGE_861 is not set
|
||||
# CONFIG_NLS_CODEPAGE_862 is not set
|
||||
# CONFIG_NLS_CODEPAGE_863 is not set
|
||||
# CONFIG_NLS_CODEPAGE_864 is not set
|
||||
# CONFIG_NLS_CODEPAGE_865 is not set
|
||||
# CONFIG_NLS_CODEPAGE_866 is not set
|
||||
# CONFIG_NLS_CODEPAGE_869 is not set
|
||||
# CONFIG_NLS_CODEPAGE_936 is not set
|
||||
# CONFIG_NLS_CODEPAGE_950 is not set
|
||||
# CONFIG_NLS_CODEPAGE_932 is not set
|
||||
# CONFIG_NLS_CODEPAGE_949 is not set
|
||||
# CONFIG_NLS_CODEPAGE_874 is not set
|
||||
# CONFIG_NLS_ISO8859_8 is not set
|
||||
# CONFIG_NLS_CODEPAGE_1250 is not set
|
||||
# CONFIG_NLS_CODEPAGE_1251 is not set
|
||||
# CONFIG_NLS_ASCII is not set
|
||||
# CONFIG_NLS_ISO8859_1 is not set
|
||||
# CONFIG_NLS_ISO8859_2 is not set
|
||||
# CONFIG_NLS_ISO8859_3 is not set
|
||||
# CONFIG_NLS_ISO8859_4 is not set
|
||||
# CONFIG_NLS_ISO8859_5 is not set
|
||||
# CONFIG_NLS_ISO8859_6 is not set
|
||||
# CONFIG_NLS_ISO8859_7 is not set
|
||||
# CONFIG_NLS_ISO8859_9 is not set
|
||||
# CONFIG_NLS_ISO8859_13 is not set
|
||||
# CONFIG_NLS_ISO8859_14 is not set
|
||||
# CONFIG_NLS_ISO8859_15 is not set
|
||||
# CONFIG_NLS_KOI8_R is not set
|
||||
# CONFIG_NLS_KOI8_U is not set
|
||||
# CONFIG_NLS_UTF8 is not set
|
||||
|
||||
#
|
||||
# Kernel hacking
|
||||
#
|
||||
# CONFIG_PRINTK_TIME is not set
|
||||
# CONFIG_DEBUG_KERNEL is not set
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_DEBUG_BUGVERBOSE=y
|
||||
|
||||
#
|
||||
# Security options
|
||||
#
|
||||
# CONFIG_KEYS is not set
|
||||
# CONFIG_SECURITY is not set
|
||||
|
||||
#
|
||||
# Cryptographic options
|
||||
#
|
||||
# CONFIG_CRYPTO is not set
|
||||
|
||||
#
|
||||
# Hardware crypto devices
|
||||
#
|
||||
|
||||
#
|
||||
# Library routines
|
||||
#
|
||||
# CONFIG_CRC_CCITT is not set
|
||||
CONFIG_CRC32=y
|
||||
# CONFIG_LIBCRC32C is not set
|
|
@ -189,7 +189,7 @@ static struct resource au1200_lcd_resources[] = {
|
|||
static struct resource au1200_ide0_resources[] = {
|
||||
[0] = {
|
||||
.start = AU1XXX_ATA_PHYS_ADDR,
|
||||
.end = AU1XXX_ATA_PHYS_ADDR + AU1XXX_ATA_PHYS_LEN,
|
||||
.end = AU1XXX_ATA_PHYS_ADDR + AU1XXX_ATA_PHYS_LEN - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
|
|
|
@ -139,7 +139,6 @@
|
|||
#include <asm/system.h>
|
||||
#include <asm/gdb-stub.h>
|
||||
#include <asm/inst.h>
|
||||
#include <asm/smp.h>
|
||||
|
||||
/*
|
||||
* external low-level support routines
|
||||
|
@ -656,6 +655,7 @@ void set_async_breakpoint(unsigned long *epc)
|
|||
*epc = (unsigned long)async_breakpoint;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
static void kgdb_wait(void *arg)
|
||||
{
|
||||
unsigned flags;
|
||||
|
@ -668,6 +668,7 @@ static void kgdb_wait(void *arg)
|
|||
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* GDB stub needs to call kgdb_wait on all processor with interrupts
|
||||
|
|
|
@ -361,6 +361,16 @@ static inline int has_valid_asid(const struct mm_struct *mm)
|
|||
#endif
|
||||
}
|
||||
|
||||
static void r4k__flush_cache_vmap(void)
|
||||
{
|
||||
r4k_blast_dcache();
|
||||
}
|
||||
|
||||
static void r4k__flush_cache_vunmap(void)
|
||||
{
|
||||
r4k_blast_dcache();
|
||||
}
|
||||
|
||||
static inline void local_r4k_flush_cache_range(void * args)
|
||||
{
|
||||
struct vm_area_struct *vma = args;
|
||||
|
@ -1281,6 +1291,10 @@ void __cpuinit r4k_cache_init(void)
|
|||
PAGE_SIZE - 1);
|
||||
else
|
||||
shm_align_mask = PAGE_SIZE-1;
|
||||
|
||||
__flush_cache_vmap = r4k__flush_cache_vmap;
|
||||
__flush_cache_vunmap = r4k__flush_cache_vunmap;
|
||||
|
||||
flush_cache_all = cache_noop;
|
||||
__flush_cache_all = r4k___flush_cache_all;
|
||||
flush_cache_mm = r4k_flush_cache_mm;
|
||||
|
|
|
@ -122,6 +122,16 @@ static inline void tx39_blast_icache(void)
|
|||
local_irq_restore(flags);
|
||||
}
|
||||
|
||||
static void tx39__flush_cache_vmap(void)
|
||||
{
|
||||
tx39_blast_dcache();
|
||||
}
|
||||
|
||||
static void tx39__flush_cache_vunmap(void)
|
||||
{
|
||||
tx39_blast_dcache();
|
||||
}
|
||||
|
||||
static inline void tx39_flush_cache_all(void)
|
||||
{
|
||||
if (!cpu_has_dc_aliases)
|
||||
|
@ -344,6 +354,8 @@ void __cpuinit tx39_cache_init(void)
|
|||
switch (current_cpu_type()) {
|
||||
case CPU_TX3912:
|
||||
/* TX39/H core (writethru direct-map cache) */
|
||||
__flush_cache_vmap = tx39__flush_cache_vmap;
|
||||
__flush_cache_vunmap = tx39__flush_cache_vunmap;
|
||||
flush_cache_all = tx39h_flush_icache_all;
|
||||
__flush_cache_all = tx39h_flush_icache_all;
|
||||
flush_cache_mm = (void *) tx39h_flush_icache_all;
|
||||
|
@ -369,6 +381,9 @@ void __cpuinit tx39_cache_init(void)
|
|||
write_c0_wired(0); /* set 8 on reset... */
|
||||
/* board-dependent init code may set WBON */
|
||||
|
||||
__flush_cache_vmap = tx39__flush_cache_vmap;
|
||||
__flush_cache_vunmap = tx39__flush_cache_vunmap;
|
||||
|
||||
flush_cache_all = tx39_flush_cache_all;
|
||||
__flush_cache_all = tx39___flush_cache_all;
|
||||
flush_cache_mm = tx39_flush_cache_mm;
|
||||
|
|
|
@ -30,6 +30,9 @@ void (*flush_cache_page)(struct vm_area_struct *vma, unsigned long page,
|
|||
unsigned long pfn);
|
||||
void (*flush_icache_range)(unsigned long start, unsigned long end);
|
||||
|
||||
void (*__flush_cache_vmap)(void);
|
||||
void (*__flush_cache_vunmap)(void);
|
||||
|
||||
/* MIPS specific cache operations */
|
||||
void (*flush_cache_sigtramp)(unsigned long addr);
|
||||
void (*local_flush_data_cache_page)(void * addr);
|
||||
|
|
|
@ -534,7 +534,8 @@ insert_restart_trampoline(struct pt_regs *regs)
|
|||
* Flushing one cacheline is cheap.
|
||||
* "sync" on bigger (> 4 way) boxes is not.
|
||||
*/
|
||||
flush_icache_range(regs->gr[30], regs->gr[30] + 4);
|
||||
flush_user_dcache_range(regs->gr[30], regs->gr[30] + 4);
|
||||
flush_user_icache_range(regs->gr[30], regs->gr[30] + 4);
|
||||
|
||||
regs->gr[31] = regs->gr[30] + 8;
|
||||
/* Preserve original r28. */
|
||||
|
|
|
@ -212,13 +212,30 @@
|
|||
ethernet@3000 {
|
||||
device_type = "network";
|
||||
compatible = "fsl,mpc5200b-fec","fsl,mpc5200-fec";
|
||||
reg = <3000 800>;
|
||||
reg = <3000 400>;
|
||||
local-mac-address = [ 00 00 00 00 00 00 ];
|
||||
interrupts = <2 5 0>;
|
||||
interrupt-parent = <&mpc5200_pic>;
|
||||
phy-handle = <&phy0>;
|
||||
};
|
||||
|
||||
mdio@3000 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "fsl,mpc5200b-mdio","fsl,mpc5200-mdio";
|
||||
reg = <3000 400>; // fec range, since we need to setup fec interrupts
|
||||
interrupts = <2 5 0>; // these are for "mii command finished", not link changes & co.
|
||||
interrupt-parent = <&mpc5200_pic>;
|
||||
|
||||
phy0: ethernet-phy@0 {
|
||||
device_type = "ethernet-phy";
|
||||
reg = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
i2c@3d40 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "fsl,mpc5200b-i2c","fsl,mpc5200-i2c","fsl-i2c";
|
||||
reg = <3d40 40>;
|
||||
interrupts = <2 10 0>;
|
||||
|
@ -231,4 +248,22 @@
|
|||
reg = <8000 4000>;
|
||||
};
|
||||
};
|
||||
|
||||
lpb {
|
||||
model = "fsl,lpb";
|
||||
compatible = "fsl,lpb";
|
||||
#address-cells = <2>;
|
||||
#size-cells = <1>;
|
||||
ranges = <0 0 fc000000 2000000>;
|
||||
|
||||
// 16-bit flash device at LocalPlus Bus CS0
|
||||
flash@0,0 {
|
||||
compatible = "cfi-flash";
|
||||
reg = <0 0 2000000>;
|
||||
bank-width = <2>;
|
||||
device-width = <2>;
|
||||
#size-cells = <1>;
|
||||
#address-cells = <1>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
@ -258,6 +258,21 @@
|
|||
local-mac-address = [ 00 00 00 00 00 00 ];
|
||||
interrupts = <2 5 0>;
|
||||
interrupt-parent = <&mpc5200_pic>;
|
||||
phy-handle = <&phy0>;
|
||||
};
|
||||
|
||||
mdio@3000 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "fsl,mpc5200-mdio";
|
||||
reg = <3000 400>; // fec range, since we need to setup fec interrupts
|
||||
interrupts = <2 5 0>; // these are for "mii command finished", not link changes & co.
|
||||
interrupt-parent = <&mpc5200_pic>;
|
||||
|
||||
phy0:ethernet-phy@1 {
|
||||
device_type = "ethernet-phy";
|
||||
reg = <1>;
|
||||
};
|
||||
};
|
||||
|
||||
ata@3a00 {
|
||||
|
|
|
@ -148,7 +148,6 @@
|
|||
interrupt-parent = <&mpc5200_pic>;
|
||||
};
|
||||
|
||||
|
||||
spi@f00 {
|
||||
compatible = "fsl,mpc5200b-spi","fsl,mpc5200-spi";
|
||||
reg = <f00 20>;
|
||||
|
@ -209,10 +208,25 @@
|
|||
ethernet@3000 {
|
||||
device_type = "network";
|
||||
compatible = "fsl,mpc5200b-fec","fsl,mpc5200-fec";
|
||||
reg = <3000 800>;
|
||||
reg = <3000 400>;
|
||||
local-mac-address = [ 00 00 00 00 00 00 ];
|
||||
interrupts = <2 5 0>;
|
||||
interrupt-parent = <&mpc5200_pic>;
|
||||
phy-handle = <&phy0>;
|
||||
};
|
||||
|
||||
mdio@3000 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "fsl,mpc5200b-mdio","fsl,mpc5200-mdio";
|
||||
reg = <3000 400>; // fec range, since we need to setup fec interrupts
|
||||
interrupts = <2 5 0>; // these are for "mii command finished", not link changes & co.
|
||||
interrupt-parent = <&mpc5200_pic>;
|
||||
|
||||
phy0: ethernet-phy@2 {
|
||||
device_type = "ethernet-phy";
|
||||
reg = <2>;
|
||||
};
|
||||
};
|
||||
|
||||
ata@3a00 {
|
||||
|
@ -223,11 +237,19 @@
|
|||
};
|
||||
|
||||
i2c@3d40 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "fsl,mpc5200b-i2c","fsl,mpc5200-i2c","fsl-i2c";
|
||||
reg = <3d40 40>;
|
||||
interrupts = <2 10 0>;
|
||||
interrupt-parent = <&mpc5200_pic>;
|
||||
fsl5200-clocking;
|
||||
|
||||
rtc@68 {
|
||||
device_type = "rtc";
|
||||
compatible = "dallas,ds1339";
|
||||
reg = <68>;
|
||||
};
|
||||
};
|
||||
|
||||
sram@8000 {
|
||||
|
@ -240,7 +262,8 @@
|
|||
compatible = "fsl,lpb";
|
||||
#address-cells = <2>;
|
||||
#size-cells = <1>;
|
||||
ranges = <1 0 50000000 00010000
|
||||
ranges = <0 0 ff000000 01000000
|
||||
1 0 50000000 00010000
|
||||
2 0 50010000 00010000
|
||||
3 0 50020000 00010000>;
|
||||
|
||||
|
@ -271,31 +294,15 @@
|
|||
compatible = "promess,pro_module_dio";
|
||||
reg = <3 800 2>;
|
||||
};
|
||||
};
|
||||
|
||||
pci@f0000d00 {
|
||||
#interrupt-cells = <1>;
|
||||
#size-cells = <2>;
|
||||
#address-cells = <3>;
|
||||
device_type = "pci";
|
||||
compatible = "fsl,mpc5200b-pci","fsl,mpc5200-pci";
|
||||
reg = <f0000d00 100>;
|
||||
interrupt-map-mask = <f800 0 0 7>;
|
||||
interrupt-map = <c000 0 0 1 &mpc5200_pic 0 0 3 // 1st slot
|
||||
c000 0 0 2 &mpc5200_pic 1 1 3
|
||||
c000 0 0 3 &mpc5200_pic 1 2 3
|
||||
c000 0 0 4 &mpc5200_pic 1 3 3
|
||||
|
||||
c800 0 0 1 &mpc5200_pic 1 1 3 // 2nd slot
|
||||
c800 0 0 2 &mpc5200_pic 1 2 3
|
||||
c800 0 0 3 &mpc5200_pic 1 3 3
|
||||
c800 0 0 4 &mpc5200_pic 0 0 3>;
|
||||
clock-frequency = <0>; // From boot loader
|
||||
interrupts = <2 8 0 2 9 0 2 a 0>;
|
||||
interrupt-parent = <&mpc5200_pic>;
|
||||
bus-range = <0 0>;
|
||||
ranges = <42000000 0 80000000 80000000 0 20000000
|
||||
02000000 0 a0000000 a0000000 0 10000000
|
||||
01000000 0 00000000 b0000000 0 01000000>;
|
||||
// 16-bit flash device at LocalPlus Bus CS0
|
||||
flash@0,0 {
|
||||
compatible = "cfi-flash";
|
||||
reg = <0 0 01000000>;
|
||||
bank-width = <2>;
|
||||
device-width = <2>;
|
||||
#size-cells = <1>;
|
||||
#address-cells = <1>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
@ -255,14 +255,14 @@
|
|||
};
|
||||
|
||||
sata@18000 {
|
||||
compatible = "fsl,mpc8379-sata";
|
||||
compatible = "fsl,mpc8379-sata", "fsl,pq-sata";
|
||||
reg = <0x18000 0x1000>;
|
||||
interrupts = <44 0x8>;
|
||||
interrupt-parent = <&ipic>;
|
||||
};
|
||||
|
||||
sata@19000 {
|
||||
compatible = "fsl,mpc8379-sata";
|
||||
compatible = "fsl,mpc8379-sata", "fsl,pq-sata";
|
||||
reg = <0x19000 0x1000>;
|
||||
interrupts = <45 0x8>;
|
||||
interrupt-parent = <&ipic>;
|
||||
|
|
|
@ -143,7 +143,6 @@
|
|||
mode = "cpu";
|
||||
};
|
||||
|
||||
/* phy type (ULPI, UTMI, UTMI_WIDE, SERIAL) */
|
||||
usb@23000 {
|
||||
compatible = "fsl-usb2-dr";
|
||||
reg = <0x23000 0x1000>;
|
||||
|
@ -151,7 +150,7 @@
|
|||
#size-cells = <0>;
|
||||
interrupt-parent = <&ipic>;
|
||||
interrupts = <38 0x8>;
|
||||
phy_type = "utmi";
|
||||
phy_type = "ulpi";
|
||||
};
|
||||
|
||||
mdio@24520 {
|
||||
|
|
|
@ -143,7 +143,6 @@
|
|||
mode = "cpu";
|
||||
};
|
||||
|
||||
/* phy type (ULPI, UTMI, UTMI_WIDE, SERIAL) */
|
||||
usb@23000 {
|
||||
compatible = "fsl-usb2-dr";
|
||||
reg = <0x23000 0x1000>;
|
||||
|
@ -151,7 +150,7 @@
|
|||
#size-cells = <0>;
|
||||
interrupt-parent = <&ipic>;
|
||||
interrupts = <38 0x8>;
|
||||
phy_type = "utmi";
|
||||
phy_type = "ulpi";
|
||||
};
|
||||
|
||||
mdio@24520 {
|
||||
|
|
|
@ -255,28 +255,28 @@
|
|||
};
|
||||
|
||||
sata@18000 {
|
||||
compatible = "fsl,mpc8379-sata";
|
||||
compatible = "fsl,mpc8379-sata", "fsl,pq-sata";
|
||||
reg = <0x18000 0x1000>;
|
||||
interrupts = <44 0x8>;
|
||||
interrupt-parent = <&ipic>;
|
||||
};
|
||||
|
||||
sata@19000 {
|
||||
compatible = "fsl,mpc8379-sata";
|
||||
compatible = "fsl,mpc8379-sata", "fsl,pq-sata";
|
||||
reg = <0x19000 0x1000>;
|
||||
interrupts = <45 0x8>;
|
||||
interrupt-parent = <&ipic>;
|
||||
};
|
||||
|
||||
sata@1a000 {
|
||||
compatible = "fsl,mpc8379-sata";
|
||||
compatible = "fsl,mpc8379-sata", "fsl,pq-sata";
|
||||
reg = <0x1a000 0x1000>;
|
||||
interrupts = <46 0x8>;
|
||||
interrupt-parent = <&ipic>;
|
||||
};
|
||||
|
||||
sata@1b000 {
|
||||
compatible = "fsl,mpc8379-sata";
|
||||
compatible = "fsl,mpc8379-sata", "fsl,pq-sata";
|
||||
reg = <0x1b000 0x1000>;
|
||||
interrupts = <47 0x8>;
|
||||
interrupt-parent = <&ipic>;
|
||||
|
|
|
@ -143,7 +143,6 @@
|
|||
mode = "cpu";
|
||||
};
|
||||
|
||||
/* phy type (ULPI, UTMI, UTMI_WIDE, SERIAL) */
|
||||
usb@23000 {
|
||||
compatible = "fsl-usb2-dr";
|
||||
reg = <0x23000 0x1000>;
|
||||
|
@ -151,7 +150,7 @@
|
|||
#size-cells = <0>;
|
||||
interrupt-parent = <&ipic>;
|
||||
interrupts = <38 0x8>;
|
||||
phy_type = "utmi";
|
||||
phy_type = "ulpi";
|
||||
};
|
||||
|
||||
mdio@24520 {
|
||||
|
|
|
@ -127,10 +127,25 @@
|
|||
ethernet@3000 {
|
||||
device_type = "network";
|
||||
compatible = "fsl,mpc5200-fec";
|
||||
reg = <3000 800>;
|
||||
reg = <3000 400>;
|
||||
local-mac-address = [ 00 00 00 00 00 00 ];
|
||||
interrupts = <2 5 0>;
|
||||
interrupt-parent = <&mpc5200_pic>;
|
||||
phy-handle = <&phy0>;
|
||||
};
|
||||
|
||||
mdio@3000 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "fsl,mpc5200b-mdio","fsl,mpc5200-mdio";
|
||||
reg = <3000 400>; // fec range, since we need to setup fec interrupts
|
||||
interrupts = <2 5 0>; // these are for "mii command finished", not link changes & co.
|
||||
interrupt-parent = <&mpc5200_pic>;
|
||||
|
||||
phy0: ethernet-phy@0 {
|
||||
device_type = "ethernet-phy";
|
||||
reg = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
ata@3a00 {
|
||||
|
@ -141,11 +156,19 @@
|
|||
};
|
||||
|
||||
i2c@3d40 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
compatible = "fsl,mpc5200-i2c","fsl-i2c";
|
||||
reg = <3d40 40>;
|
||||
interrupts = <2 10 0>;
|
||||
interrupt-parent = <&mpc5200_pic>;
|
||||
fsl5200-clocking;
|
||||
|
||||
rtc@68 {
|
||||
device_type = "rtc";
|
||||
compatible = "dallas,ds1307";
|
||||
reg = <68>;
|
||||
};
|
||||
};
|
||||
|
||||
sram@8000 {
|
||||
|
@ -154,6 +177,23 @@
|
|||
};
|
||||
};
|
||||
|
||||
lpb {
|
||||
model = "fsl,lpb";
|
||||
compatible = "fsl,lpb";
|
||||
#address-cells = <2>;
|
||||
#size-cells = <1>;
|
||||
ranges = <0 0 fc000000 02000000>;
|
||||
|
||||
flash@0,0 {
|
||||
compatible = "cfi-flash";
|
||||
reg = <0 0 02000000>;
|
||||
bank-width = <4>;
|
||||
device-width = <2>;
|
||||
#size-cells = <1>;
|
||||
#address-cells = <1>;
|
||||
};
|
||||
};
|
||||
|
||||
pci@f0000d00 {
|
||||
#interrupt-cells = <1>;
|
||||
#size-cells = <2>;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.25-rc6
|
||||
# Mon Mar 24 08:48:16 2008
|
||||
# Linux kernel version: 2.6.25-rc7
|
||||
# Mon Mar 31 11:36:51 2008
|
||||
#
|
||||
# CONFIG_PPC64 is not set
|
||||
|
||||
|
@ -628,8 +628,7 @@ CONFIG_LEGACY_PTY_COUNT=256
|
|||
# CONFIG_IPMI_HANDLER is not set
|
||||
CONFIG_HW_RANDOM=y
|
||||
# CONFIG_NVRAM is not set
|
||||
CONFIG_GEN_RTC=y
|
||||
# CONFIG_GEN_RTC_X is not set
|
||||
# CONFIG_GEN_RTC is not set
|
||||
# CONFIG_R3964 is not set
|
||||
# CONFIG_APPLICOM is not set
|
||||
# CONFIG_RAW_DRIVER is not set
|
||||
|
@ -824,10 +823,6 @@ CONFIG_USB_ARCH_HAS_EHCI=y
|
|||
# CONFIG_EDAC is not set
|
||||
CONFIG_RTC_LIB=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
|
||||
#
|
||||
# Conflicting RTC option has been selected, check GEN_RTC and RTC
|
||||
#
|
||||
CONFIG_RTC_HCTOSYS=y
|
||||
CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
|
||||
# CONFIG_RTC_DEBUG is not set
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.25-rc6
|
||||
# Mon Mar 24 08:48:20 2008
|
||||
# Linux kernel version: 2.6.25-rc7
|
||||
# Mon Mar 31 11:36:56 2008
|
||||
#
|
||||
# CONFIG_PPC64 is not set
|
||||
|
||||
|
@ -571,8 +571,7 @@ CONFIG_LEGACY_PTY_COUNT=256
|
|||
# CONFIG_IPMI_HANDLER is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
# CONFIG_NVRAM is not set
|
||||
CONFIG_GEN_RTC=y
|
||||
# CONFIG_GEN_RTC_X is not set
|
||||
# CONFIG_GEN_RTC is not set
|
||||
# CONFIG_R3964 is not set
|
||||
# CONFIG_APPLICOM is not set
|
||||
# CONFIG_RAW_DRIVER is not set
|
||||
|
@ -767,10 +766,6 @@ CONFIG_USB_ARCH_HAS_EHCI=y
|
|||
# CONFIG_EDAC is not set
|
||||
CONFIG_RTC_LIB=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
|
||||
#
|
||||
# Conflicting RTC option has been selected, check GEN_RTC and RTC
|
||||
#
|
||||
CONFIG_RTC_HCTOSYS=y
|
||||
CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
|
||||
# CONFIG_RTC_DEBUG is not set
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.25-rc6
|
||||
# Mon Mar 24 08:48:21 2008
|
||||
# Linux kernel version: 2.6.25-rc7
|
||||
# Mon Mar 31 11:36:57 2008
|
||||
#
|
||||
# CONFIG_PPC64 is not set
|
||||
|
||||
|
@ -626,8 +626,7 @@ CONFIG_LEGACY_PTY_COUNT=256
|
|||
# CONFIG_IPMI_HANDLER is not set
|
||||
CONFIG_HW_RANDOM=y
|
||||
# CONFIG_NVRAM is not set
|
||||
CONFIG_GEN_RTC=y
|
||||
# CONFIG_GEN_RTC_X is not set
|
||||
# CONFIG_GEN_RTC is not set
|
||||
# CONFIG_R3964 is not set
|
||||
# CONFIG_APPLICOM is not set
|
||||
# CONFIG_RAW_DRIVER is not set
|
||||
|
@ -822,10 +821,6 @@ CONFIG_USB_ARCH_HAS_EHCI=y
|
|||
# CONFIG_EDAC is not set
|
||||
CONFIG_RTC_LIB=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
|
||||
#
|
||||
# Conflicting RTC option has been selected, check GEN_RTC and RTC
|
||||
#
|
||||
CONFIG_RTC_HCTOSYS=y
|
||||
CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
|
||||
# CONFIG_RTC_DEBUG is not set
|
||||
|
|
|
@ -684,7 +684,29 @@ CONFIG_USB_SUPPORT=y
|
|||
CONFIG_USB_ARCH_HAS_HCD=y
|
||||
# CONFIG_USB_ARCH_HAS_OHCI is not set
|
||||
CONFIG_USB_ARCH_HAS_EHCI=y
|
||||
# CONFIG_USB is not set
|
||||
CONFIG_USB=y
|
||||
# CONFIG_USB_DEBUG is not set
|
||||
# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
|
||||
|
||||
#
|
||||
# Miscellaneous USB options
|
||||
#
|
||||
# CONFIG_USB_DEVICEFS is not set
|
||||
CONFIG_USB_DEVICE_CLASS=y
|
||||
# CONFIG_USB_DYNAMIC_MINORS is not set
|
||||
# CONFIG_USB_OTG is not set
|
||||
|
||||
#
|
||||
# USB Host Controller Drivers
|
||||
#
|
||||
CONFIG_USB_EHCI_HCD=y
|
||||
CONFIG_USB_EHCI_ROOT_HUB_TT=y
|
||||
# CONFIG_USB_EHCI_TT_NEWSCHED is not set
|
||||
CONFIG_USB_EHCI_FSL=y
|
||||
CONFIG_USB_EHCI_HCD_PPC_OF=y
|
||||
# CONFIG_USB_ISP116X_HCD is not set
|
||||
# CONFIG_USB_SL811_HCD is not set
|
||||
# CONFIG_USB_R8A66597_HCD is not set
|
||||
|
||||
#
|
||||
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
|
||||
|
|
|
@ -690,7 +690,29 @@ CONFIG_USB_SUPPORT=y
|
|||
CONFIG_USB_ARCH_HAS_HCD=y
|
||||
# CONFIG_USB_ARCH_HAS_OHCI is not set
|
||||
CONFIG_USB_ARCH_HAS_EHCI=y
|
||||
# CONFIG_USB is not set
|
||||
CONFIG_USB=y
|
||||
# CONFIG_USB_DEBUG is not set
|
||||
# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
|
||||
|
||||
#
|
||||
# Miscellaneous USB options
|
||||
#
|
||||
# CONFIG_USB_DEVICEFS is not set
|
||||
CONFIG_USB_DEVICE_CLASS=y
|
||||
# CONFIG_USB_DYNAMIC_MINORS is not set
|
||||
# CONFIG_USB_OTG is not set
|
||||
|
||||
#
|
||||
# USB Host Controller Drivers
|
||||
#
|
||||
CONFIG_USB_EHCI_HCD=y
|
||||
CONFIG_USB_EHCI_ROOT_HUB_TT=y
|
||||
# CONFIG_USB_EHCI_TT_NEWSCHED is not set
|
||||
CONFIG_USB_EHCI_FSL=y
|
||||
CONFIG_USB_EHCI_HCD_PPC_OF=y
|
||||
# CONFIG_USB_ISP116X_HCD is not set
|
||||
# CONFIG_USB_SL811_HCD is not set
|
||||
# CONFIG_USB_R8A66597_HCD is not set
|
||||
|
||||
#
|
||||
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.25-rc6
|
||||
# Mon Mar 24 08:48:26 2008
|
||||
# Linux kernel version: 2.6.25-rc7
|
||||
# Mon Mar 31 11:37:03 2008
|
||||
#
|
||||
# CONFIG_PPC64 is not set
|
||||
|
||||
|
@ -742,8 +742,7 @@ CONFIG_LEGACY_PTY_COUNT=256
|
|||
# CONFIG_IPMI_HANDLER is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
CONFIG_NVRAM=y
|
||||
CONFIG_GEN_RTC=y
|
||||
CONFIG_GEN_RTC_X=y
|
||||
# CONFIG_GEN_RTC is not set
|
||||
# CONFIG_R3964 is not set
|
||||
# CONFIG_APPLICOM is not set
|
||||
# CONFIG_RAW_DRIVER is not set
|
||||
|
@ -1209,10 +1208,6 @@ CONFIG_USB_MON=y
|
|||
# CONFIG_EDAC is not set
|
||||
CONFIG_RTC_LIB=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
|
||||
#
|
||||
# Conflicting RTC option has been selected, check GEN_RTC and RTC
|
||||
#
|
||||
CONFIG_RTC_HCTOSYS=y
|
||||
CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
|
||||
# CONFIG_RTC_DEBUG is not set
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.25-rc6
|
||||
# Mon Mar 24 08:48:28 2008
|
||||
# Linux kernel version: 2.6.25-rc7
|
||||
# Mon Mar 31 11:37:05 2008
|
||||
#
|
||||
# CONFIG_PPC64 is not set
|
||||
|
||||
|
@ -629,8 +629,7 @@ CONFIG_LEGACY_PTY_COUNT=256
|
|||
# CONFIG_IPMI_HANDLER is not set
|
||||
CONFIG_HW_RANDOM=y
|
||||
# CONFIG_NVRAM is not set
|
||||
CONFIG_GEN_RTC=y
|
||||
# CONFIG_GEN_RTC_X is not set
|
||||
# CONFIG_GEN_RTC is not set
|
||||
# CONFIG_R3964 is not set
|
||||
# CONFIG_APPLICOM is not set
|
||||
# CONFIG_RAW_DRIVER is not set
|
||||
|
@ -825,10 +824,6 @@ CONFIG_USB_ARCH_HAS_EHCI=y
|
|||
# CONFIG_EDAC is not set
|
||||
CONFIG_RTC_LIB=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
|
||||
#
|
||||
# Conflicting RTC option has been selected, check GEN_RTC and RTC
|
||||
#
|
||||
CONFIG_RTC_HCTOSYS=y
|
||||
CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
|
||||
# CONFIG_RTC_DEBUG is not set
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.25-rc6
|
||||
# Mon Mar 24 08:48:29 2008
|
||||
# Linux kernel version: 2.6.25-rc7
|
||||
# Mon Mar 31 11:37:06 2008
|
||||
#
|
||||
# CONFIG_PPC64 is not set
|
||||
|
||||
|
@ -742,8 +742,7 @@ CONFIG_LEGACY_PTY_COUNT=256
|
|||
# CONFIG_IPMI_HANDLER is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
CONFIG_NVRAM=y
|
||||
CONFIG_GEN_RTC=y
|
||||
CONFIG_GEN_RTC_X=y
|
||||
# CONFIG_GEN_RTC is not set
|
||||
# CONFIG_R3964 is not set
|
||||
# CONFIG_APPLICOM is not set
|
||||
# CONFIG_RAW_DRIVER is not set
|
||||
|
@ -1209,10 +1208,6 @@ CONFIG_USB_MON=y
|
|||
# CONFIG_EDAC is not set
|
||||
CONFIG_RTC_LIB=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
|
||||
#
|
||||
# Conflicting RTC option has been selected, check GEN_RTC and RTC
|
||||
#
|
||||
CONFIG_RTC_HCTOSYS=y
|
||||
CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
|
||||
# CONFIG_RTC_DEBUG is not set
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.25-rc6
|
||||
# Mon Mar 24 08:48:31 2008
|
||||
# Linux kernel version: 2.6.25-rc7
|
||||
# Mon Mar 31 11:37:08 2008
|
||||
#
|
||||
# CONFIG_PPC64 is not set
|
||||
|
||||
|
@ -750,8 +750,7 @@ CONFIG_LEGACY_PTY_COUNT=256
|
|||
# CONFIG_IPMI_HANDLER is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
CONFIG_NVRAM=y
|
||||
CONFIG_GEN_RTC=y
|
||||
CONFIG_GEN_RTC_X=y
|
||||
# CONFIG_GEN_RTC is not set
|
||||
# CONFIG_R3964 is not set
|
||||
# CONFIG_APPLICOM is not set
|
||||
# CONFIG_RAW_DRIVER is not set
|
||||
|
@ -1217,10 +1216,6 @@ CONFIG_USB_MON=y
|
|||
# CONFIG_EDAC is not set
|
||||
CONFIG_RTC_LIB=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
|
||||
#
|
||||
# Conflicting RTC option has been selected, check GEN_RTC and RTC
|
||||
#
|
||||
CONFIG_RTC_HCTOSYS=y
|
||||
CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
|
||||
# CONFIG_RTC_DEBUG is not set
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.25-rc6
|
||||
# Mon Mar 24 08:48:34 2008
|
||||
# Linux kernel version: 2.6.25-rc7
|
||||
# Mon Mar 31 11:37:11 2008
|
||||
#
|
||||
# CONFIG_PPC64 is not set
|
||||
|
||||
|
@ -736,8 +736,7 @@ CONFIG_LEGACY_PTY_COUNT=256
|
|||
# CONFIG_IPMI_HANDLER is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
CONFIG_NVRAM=y
|
||||
CONFIG_GEN_RTC=y
|
||||
CONFIG_GEN_RTC_X=y
|
||||
# CONFIG_GEN_RTC is not set
|
||||
# CONFIG_R3964 is not set
|
||||
# CONFIG_APPLICOM is not set
|
||||
# CONFIG_RAW_DRIVER is not set
|
||||
|
@ -1203,10 +1202,6 @@ CONFIG_USB_MON=y
|
|||
# CONFIG_EDAC is not set
|
||||
CONFIG_RTC_LIB=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
|
||||
#
|
||||
# Conflicting RTC option has been selected, check GEN_RTC and RTC
|
||||
#
|
||||
CONFIG_RTC_HCTOSYS=y
|
||||
CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
|
||||
# CONFIG_RTC_DEBUG is not set
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.25-rc6
|
||||
# Mon Mar 24 08:48:37 2008
|
||||
# Linux kernel version: 2.6.25-rc7
|
||||
# Mon Mar 31 11:37:15 2008
|
||||
#
|
||||
# CONFIG_PPC64 is not set
|
||||
|
||||
|
@ -855,8 +855,7 @@ CONFIG_LEGACY_PTY_COUNT=256
|
|||
# CONFIG_IPMI_HANDLER is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
# CONFIG_NVRAM is not set
|
||||
CONFIG_GEN_RTC=y
|
||||
# CONFIG_GEN_RTC_X is not set
|
||||
# CONFIG_GEN_RTC is not set
|
||||
# CONFIG_R3964 is not set
|
||||
# CONFIG_APPLICOM is not set
|
||||
# CONFIG_RAW_DRIVER is not set
|
||||
|
@ -1129,10 +1128,6 @@ CONFIG_USB_MON=y
|
|||
# CONFIG_EDAC is not set
|
||||
CONFIG_RTC_LIB=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
|
||||
#
|
||||
# Conflicting RTC option has been selected, check GEN_RTC and RTC
|
||||
#
|
||||
CONFIG_RTC_HCTOSYS=y
|
||||
CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
|
||||
# CONFIG_RTC_DEBUG is not set
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.25-rc6
|
||||
# Mon Mar 24 08:48:41 2008
|
||||
# Linux kernel version: 2.6.25-rc7
|
||||
# Mon Mar 31 11:37:19 2008
|
||||
#
|
||||
# CONFIG_PPC64 is not set
|
||||
|
||||
|
@ -717,8 +717,7 @@ CONFIG_LEGACY_PTY_COUNT=256
|
|||
# CONFIG_IPMI_HANDLER is not set
|
||||
CONFIG_HW_RANDOM=m
|
||||
CONFIG_NVRAM=y
|
||||
CONFIG_GEN_RTC=y
|
||||
# CONFIG_GEN_RTC_X is not set
|
||||
# CONFIG_GEN_RTC is not set
|
||||
# CONFIG_R3964 is not set
|
||||
# CONFIG_APPLICOM is not set
|
||||
# CONFIG_RAW_DRIVER is not set
|
||||
|
@ -931,10 +930,6 @@ CONFIG_USB_STORAGE=y
|
|||
# CONFIG_EDAC is not set
|
||||
CONFIG_RTC_LIB=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
|
||||
#
|
||||
# Conflicting RTC option has been selected, check GEN_RTC and RTC
|
||||
#
|
||||
CONFIG_RTC_HCTOSYS=y
|
||||
CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
|
||||
# CONFIG_RTC_DEBUG is not set
|
||||
|
|
|
@ -1387,12 +1387,14 @@ __secondary_start:
|
|||
#ifdef CONFIG_PPC_ISERIES
|
||||
BEGIN_FW_FTR_SECTION
|
||||
ori r4,r4,MSR_EE
|
||||
li r8,1
|
||||
stb r8,PACAHARDIRQEN(r13)
|
||||
END_FW_FTR_SECTION_IFSET(FW_FEATURE_ISERIES)
|
||||
#endif
|
||||
BEGIN_FW_FTR_SECTION
|
||||
stb r7,PACASOFTIRQEN(r13)
|
||||
stb r7,PACAHARDIRQEN(r13)
|
||||
END_FW_FTR_SECTION_IFCLR(FW_FEATURE_ISERIES)
|
||||
stb r7,PACASOFTIRQEN(r13)
|
||||
|
||||
mtspr SPRN_SRR0,r3
|
||||
mtspr SPRN_SRR1,r4
|
||||
|
@ -1520,15 +1522,14 @@ _INIT_GLOBAL(start_here_common)
|
|||
#ifdef CONFIG_PPC_ISERIES
|
||||
BEGIN_FW_FTR_SECTION
|
||||
mfmsr r5
|
||||
ori r5,r5,MSR_EE /* Hard Enabled */
|
||||
ori r5,r5,MSR_EE /* Hard Enabled on iSeries*/
|
||||
mtmsrd r5
|
||||
li r5,1
|
||||
END_FW_FTR_SECTION_IFSET(FW_FEATURE_ISERIES)
|
||||
#endif
|
||||
BEGIN_FW_FTR_SECTION
|
||||
stb r5,PACAHARDIRQEN(r13)
|
||||
END_FW_FTR_SECTION_IFCLR(FW_FEATURE_ISERIES)
|
||||
stb r5,PACAHARDIRQEN(r13) /* Hard Disabled on others */
|
||||
|
||||
bl .start_kernel
|
||||
bl .start_kernel
|
||||
|
||||
/* Not reached */
|
||||
BUG_OPCODE
|
||||
|
|
|
@ -143,7 +143,6 @@ void local_irq_restore(unsigned long en)
|
|||
*/
|
||||
if (local_paca->lppaca_ptr->int_dword.any_int)
|
||||
iseries_handle_interrupts();
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -356,7 +356,7 @@ static int rtas_excl_open(struct inode *inode, struct file *file)
|
|||
|
||||
/* Enforce exclusive open with use count of PDE */
|
||||
spin_lock(&flash_file_open_lock);
|
||||
if (atomic_read(&dp->count) > 1) {
|
||||
if (atomic_read(&dp->count) > 2) {
|
||||
spin_unlock(&flash_file_open_lock);
|
||||
return -EBUSY;
|
||||
}
|
||||
|
|
|
@ -44,6 +44,9 @@ mmu_hash_lock:
|
|||
#ifdef CONFIG_SMP
|
||||
.text
|
||||
_GLOBAL(hash_page_sync)
|
||||
mfmsr r10
|
||||
rlwinm r0,r10,0,17,15 /* clear bit 16 (MSR_EE) */
|
||||
mtmsr r0
|
||||
lis r8,mmu_hash_lock@h
|
||||
ori r8,r8,mmu_hash_lock@l
|
||||
lis r0,0x0fff
|
||||
|
@ -60,8 +63,9 @@ _GLOBAL(hash_page_sync)
|
|||
eieio
|
||||
li r0,0
|
||||
stw r0,0(r8)
|
||||
blr
|
||||
#endif
|
||||
mtmsr r10
|
||||
blr
|
||||
#endif /* CONFIG_SMP */
|
||||
|
||||
/*
|
||||
* Load a PTE into the hash table, if possible.
|
||||
|
|
|
@ -240,6 +240,7 @@ int cpm2_clk_setup(enum cpm_clk_target target, int clock, int mode)
|
|||
case CPM_CLK_SCC1:
|
||||
reg = &im_cpmux->cmx_scr;
|
||||
shift = 24;
|
||||
break;
|
||||
case CPM_CLK_SCC2:
|
||||
reg = &im_cpmux->cmx_scr;
|
||||
shift = 16;
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
|
||||
.text
|
||||
|
||||
#include <linux/linkage.h>
|
||||
#include <asm/page.h>
|
||||
|
||||
.global startup
|
||||
|
|
|
@ -13,7 +13,6 @@
|
|||
* Modification for compressed loader:
|
||||
* Copyright (C) 2002 Stuart Menefy (stuart.menefy@st.com)
|
||||
*/
|
||||
#include <linux/linkage.h>
|
||||
#include <asm/cache.h>
|
||||
#include <asm/cpu/mmu_context.h>
|
||||
#include <asm/cpu/registers.h>
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
#include <asm/uaccess.h>
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/mmu_context.h>
|
||||
#include <asm/fpu.h>
|
||||
|
||||
struct task_struct *last_task_used_math = NULL;
|
||||
|
||||
|
|
|
@ -33,6 +33,7 @@
|
|||
#include <asm/system.h>
|
||||
#include <asm/processor.h>
|
||||
#include <asm/mmu_context.h>
|
||||
#include <asm/fpu.h>
|
||||
|
||||
/* This mask defines the bits of the SR which the user is not allowed to
|
||||
change, which are everything except S, Q, M, PR, SZ, FR. */
|
||||
|
|
|
@ -149,3 +149,4 @@ EXPORT_SYMBOL(clear_page);
|
|||
EXPORT_SYMBOL(copy_page);
|
||||
EXPORT_SYMBOL(__clear_user);
|
||||
EXPORT_SYMBOL(_ebss);
|
||||
EXPORT_SYMBOL(empty_zero_page);
|
||||
|
|
|
@ -44,6 +44,7 @@ EXPORT_SYMBOL(__put_user_asm_l);
|
|||
EXPORT_SYMBOL(__get_user_asm_l);
|
||||
EXPORT_SYMBOL(copy_page);
|
||||
EXPORT_SYMBOL(__copy_user);
|
||||
EXPORT_SYMBOL(empty_zero_page);
|
||||
EXPORT_SYMBOL(memcpy);
|
||||
EXPORT_SYMBOL(__udelay);
|
||||
EXPORT_SYMBOL(__ndelay);
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
#include <asm/uaccess.h>
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/cacheflush.h>
|
||||
#include <asm/fpu.h>
|
||||
|
||||
#define REG_RET 9
|
||||
#define REG_ARG1 2
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#include <linux/limits.h>
|
||||
#include <asm/system.h>
|
||||
#include <asm/uaccess.h>
|
||||
#include <asm/fpu.h>
|
||||
|
||||
#ifdef CONFIG_SH_KGDB
|
||||
#include <asm/kgdb.h>
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
#include <asm/atomic.h>
|
||||
#include <asm/processor.h>
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/fpu.h>
|
||||
|
||||
#undef DEBUG_EXCEPTION
|
||||
#ifdef DEBUG_EXCEPTION
|
||||
|
|
|
@ -325,7 +325,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
|
|||
const struct user_regset_view *view;
|
||||
int ret;
|
||||
|
||||
view = task_user_regset_view(child);
|
||||
view = task_user_regset_view(current);
|
||||
|
||||
switch(request) {
|
||||
case PTRACE_GETREGS: {
|
||||
|
|
|
@ -114,6 +114,85 @@ void flush_ptrace_access(struct vm_area_struct *vma, struct page *page,
|
|||
preempt_enable();
|
||||
}
|
||||
|
||||
static int get_from_target(struct task_struct *target, unsigned long uaddr,
|
||||
void *kbuf, int len)
|
||||
{
|
||||
if (target == current) {
|
||||
if (copy_from_user(kbuf, (void __user *) uaddr, len))
|
||||
return -EFAULT;
|
||||
} else {
|
||||
int len2 = access_process_vm(target, uaddr, kbuf, len, 0);
|
||||
if (len2 != len)
|
||||
return -EFAULT;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int set_to_target(struct task_struct *target, unsigned long uaddr,
|
||||
void *kbuf, int len)
|
||||
{
|
||||
if (target == current) {
|
||||
if (copy_to_user((void __user *) uaddr, kbuf, len))
|
||||
return -EFAULT;
|
||||
} else {
|
||||
int len2 = access_process_vm(target, uaddr, kbuf, len, 1);
|
||||
if (len2 != len)
|
||||
return -EFAULT;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int regwindow64_get(struct task_struct *target,
|
||||
const struct pt_regs *regs,
|
||||
struct reg_window *wbuf)
|
||||
{
|
||||
unsigned long rw_addr = regs->u_regs[UREG_I6];
|
||||
|
||||
if (test_tsk_thread_flag(current, TIF_32BIT)) {
|
||||
struct reg_window32 win32;
|
||||
int i;
|
||||
|
||||
if (get_from_target(target, rw_addr, &win32, sizeof(win32)))
|
||||
return -EFAULT;
|
||||
for (i = 0; i < 8; i++)
|
||||
wbuf->locals[i] = win32.locals[i];
|
||||
for (i = 0; i < 8; i++)
|
||||
wbuf->ins[i] = win32.ins[i];
|
||||
} else {
|
||||
rw_addr += STACK_BIAS;
|
||||
if (get_from_target(target, rw_addr, wbuf, sizeof(*wbuf)))
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int regwindow64_set(struct task_struct *target,
|
||||
const struct pt_regs *regs,
|
||||
struct reg_window *wbuf)
|
||||
{
|
||||
unsigned long rw_addr = regs->u_regs[UREG_I6];
|
||||
|
||||
if (test_tsk_thread_flag(current, TIF_32BIT)) {
|
||||
struct reg_window32 win32;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
win32.locals[i] = wbuf->locals[i];
|
||||
for (i = 0; i < 8; i++)
|
||||
win32.ins[i] = wbuf->ins[i];
|
||||
|
||||
if (set_to_target(target, rw_addr, &win32, sizeof(win32)))
|
||||
return -EFAULT;
|
||||
} else {
|
||||
rw_addr += STACK_BIAS;
|
||||
if (set_to_target(target, rw_addr, wbuf, sizeof(*wbuf)))
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
enum sparc_regset {
|
||||
REGSET_GENERAL,
|
||||
REGSET_FP,
|
||||
|
@ -133,16 +212,13 @@ static int genregs64_get(struct task_struct *target,
|
|||
ret = user_regset_copyout(&pos, &count, &kbuf, &ubuf,
|
||||
regs->u_regs,
|
||||
0, 16 * sizeof(u64));
|
||||
if (!ret) {
|
||||
unsigned long __user *reg_window = (unsigned long __user *)
|
||||
(regs->u_regs[UREG_I6] + STACK_BIAS);
|
||||
unsigned long window[16];
|
||||
if (!ret && count && pos < (32 * sizeof(u64))) {
|
||||
struct reg_window window;
|
||||
|
||||
if (copy_from_user(window, reg_window, sizeof(window)))
|
||||
if (regwindow64_get(target, regs, &window))
|
||||
return -EFAULT;
|
||||
|
||||
ret = user_regset_copyout(&pos, &count, &kbuf, &ubuf,
|
||||
window,
|
||||
&window,
|
||||
16 * sizeof(u64),
|
||||
32 * sizeof(u64));
|
||||
}
|
||||
|
@ -164,10 +240,11 @@ static int genregs64_get(struct task_struct *target,
|
|||
36 * sizeof(u64));
|
||||
}
|
||||
|
||||
if (!ret)
|
||||
if (!ret) {
|
||||
ret = user_regset_copyout_zero(&pos, &count, &kbuf, &ubuf,
|
||||
36 * sizeof(u64), -1);
|
||||
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -185,20 +262,19 @@ static int genregs64_set(struct task_struct *target,
|
|||
ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
|
||||
regs->u_regs,
|
||||
0, 16 * sizeof(u64));
|
||||
if (!ret && count > 0) {
|
||||
unsigned long __user *reg_window = (unsigned long __user *)
|
||||
(regs->u_regs[UREG_I6] + STACK_BIAS);
|
||||
unsigned long window[16];
|
||||
if (!ret && count && pos < (32 * sizeof(u64))) {
|
||||
struct reg_window window;
|
||||
|
||||
if (copy_from_user(window, reg_window, sizeof(window)))
|
||||
if (regwindow64_get(target, regs, &window))
|
||||
return -EFAULT;
|
||||
|
||||
ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf,
|
||||
window,
|
||||
&window,
|
||||
16 * sizeof(u64),
|
||||
32 * sizeof(u64));
|
||||
|
||||
if (!ret &&
|
||||
copy_to_user(reg_window, window, sizeof(window)))
|
||||
regwindow64_set(target, regs, &window))
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
|
@ -412,9 +488,22 @@ static int genregs32_get(struct task_struct *target,
|
|||
*k++ = regs->u_regs[pos++];
|
||||
|
||||
reg_window = (compat_ulong_t __user *) regs->u_regs[UREG_I6];
|
||||
for (; count > 0 && pos < 32; count--) {
|
||||
if (get_user(*k++, ®_window[pos++]))
|
||||
return -EFAULT;
|
||||
if (target == current) {
|
||||
for (; count > 0 && pos < 32; count--) {
|
||||
if (get_user(*k++, ®_window[pos++]))
|
||||
return -EFAULT;
|
||||
}
|
||||
} else {
|
||||
for (; count > 0 && pos < 32; count--) {
|
||||
if (access_process_vm(target,
|
||||
(unsigned long)
|
||||
®_window[pos],
|
||||
k, sizeof(*k), 0)
|
||||
!= sizeof(*k))
|
||||
return -EFAULT;
|
||||
k++;
|
||||
pos++;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (; count > 0 && pos < 16; count--) {
|
||||
|
@ -423,10 +512,28 @@ static int genregs32_get(struct task_struct *target,
|
|||
}
|
||||
|
||||
reg_window = (compat_ulong_t __user *) regs->u_regs[UREG_I6];
|
||||
for (; count > 0 && pos < 32; count--) {
|
||||
if (get_user(reg, ®_window[pos++]) ||
|
||||
put_user(reg, u++))
|
||||
return -EFAULT;
|
||||
if (target == current) {
|
||||
for (; count > 0 && pos < 32; count--) {
|
||||
if (get_user(reg, ®_window[pos++]) ||
|
||||
put_user(reg, u++))
|
||||
return -EFAULT;
|
||||
}
|
||||
} else {
|
||||
for (; count > 0 && pos < 32; count--) {
|
||||
if (access_process_vm(target,
|
||||
(unsigned long)
|
||||
®_window[pos],
|
||||
®, sizeof(reg), 0)
|
||||
!= sizeof(reg))
|
||||
return -EFAULT;
|
||||
if (access_process_vm(target,
|
||||
(unsigned long) u,
|
||||
®, sizeof(reg), 1)
|
||||
!= sizeof(reg))
|
||||
return -EFAULT;
|
||||
pos++;
|
||||
u++;
|
||||
}
|
||||
}
|
||||
}
|
||||
while (count > 0) {
|
||||
|
@ -488,9 +595,23 @@ static int genregs32_set(struct task_struct *target,
|
|||
regs->u_regs[pos++] = *k++;
|
||||
|
||||
reg_window = (compat_ulong_t __user *) regs->u_regs[UREG_I6];
|
||||
for (; count > 0 && pos < 32; count--) {
|
||||
if (put_user(*k++, ®_window[pos++]))
|
||||
return -EFAULT;
|
||||
if (target == current) {
|
||||
for (; count > 0 && pos < 32; count--) {
|
||||
if (put_user(*k++, ®_window[pos++]))
|
||||
return -EFAULT;
|
||||
}
|
||||
} else {
|
||||
for (; count > 0 && pos < 32; count--) {
|
||||
if (access_process_vm(target,
|
||||
(unsigned long)
|
||||
®_window[pos],
|
||||
(void *) k,
|
||||
sizeof(*k), 1)
|
||||
!= sizeof(*k))
|
||||
return -EFAULT;
|
||||
k++;
|
||||
pos++;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (; count > 0 && pos < 16; count--) {
|
||||
|
@ -500,10 +621,29 @@ static int genregs32_set(struct task_struct *target,
|
|||
}
|
||||
|
||||
reg_window = (compat_ulong_t __user *) regs->u_regs[UREG_I6];
|
||||
for (; count > 0 && pos < 32; count--) {
|
||||
if (get_user(reg, u++) ||
|
||||
put_user(reg, ®_window[pos++]))
|
||||
return -EFAULT;
|
||||
if (target == current) {
|
||||
for (; count > 0 && pos < 32; count--) {
|
||||
if (get_user(reg, u++) ||
|
||||
put_user(reg, ®_window[pos++]))
|
||||
return -EFAULT;
|
||||
}
|
||||
} else {
|
||||
for (; count > 0 && pos < 32; count--) {
|
||||
if (access_process_vm(target,
|
||||
(unsigned long)
|
||||
u,
|
||||
®, sizeof(reg), 0)
|
||||
!= sizeof(reg))
|
||||
return -EFAULT;
|
||||
if (access_process_vm(target,
|
||||
(unsigned long)
|
||||
®_window[pos],
|
||||
®, sizeof(reg), 1)
|
||||
!= sizeof(reg))
|
||||
return -EFAULT;
|
||||
pos++;
|
||||
u++;
|
||||
}
|
||||
}
|
||||
}
|
||||
while (count > 0) {
|
||||
|
@ -711,7 +851,7 @@ struct compat_fps {
|
|||
long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
|
||||
compat_ulong_t caddr, compat_ulong_t cdata)
|
||||
{
|
||||
const struct user_regset_view *view = task_user_regset_view(child);
|
||||
const struct user_regset_view *view = task_user_regset_view(current);
|
||||
compat_ulong_t caddr2 = task_pt_regs(current)->u_regs[UREG_I4];
|
||||
struct pt_regs32 __user *pregs;
|
||||
struct compat_fps __user *fps;
|
||||
|
@ -819,7 +959,7 @@ struct fps {
|
|||
|
||||
long arch_ptrace(struct task_struct *child, long request, long addr, long data)
|
||||
{
|
||||
const struct user_regset_view *view = task_user_regset_view(child);
|
||||
const struct user_regset_view *view = task_user_regset_view(current);
|
||||
unsigned long addr2 = task_pt_regs(current)->u_regs[UREG_I4];
|
||||
struct pt_regs __user *pregs;
|
||||
struct fps __user *fps;
|
||||
|
|
|
@ -357,7 +357,7 @@ static int invalid_frame_pointer(void __user *fp, int fplen)
|
|||
static inline int
|
||||
save_fpu_state(struct pt_regs *regs, __siginfo_fpu_t __user *fpu)
|
||||
{
|
||||
unsigned long *fpregs = (unsigned long *)(regs+1);
|
||||
unsigned long *fpregs = current_thread_info()->fpregs;
|
||||
unsigned long fprs;
|
||||
int err = 0;
|
||||
|
||||
|
|
|
@ -65,7 +65,8 @@ __setup("noreplace-paravirt", setup_noreplace_paravirt);
|
|||
get them easily into strings. */
|
||||
asm("\t.section .rodata, \"a\"\nintelnops: "
|
||||
GENERIC_NOP1 GENERIC_NOP2 GENERIC_NOP3 GENERIC_NOP4 GENERIC_NOP5 GENERIC_NOP6
|
||||
GENERIC_NOP7 GENERIC_NOP8);
|
||||
GENERIC_NOP7 GENERIC_NOP8
|
||||
"\t.previous");
|
||||
extern const unsigned char intelnops[];
|
||||
static const unsigned char *const intel_nops[ASM_NOP_MAX+1] = {
|
||||
NULL,
|
||||
|
@ -83,7 +84,8 @@ static const unsigned char *const intel_nops[ASM_NOP_MAX+1] = {
|
|||
#ifdef K8_NOP1
|
||||
asm("\t.section .rodata, \"a\"\nk8nops: "
|
||||
K8_NOP1 K8_NOP2 K8_NOP3 K8_NOP4 K8_NOP5 K8_NOP6
|
||||
K8_NOP7 K8_NOP8);
|
||||
K8_NOP7 K8_NOP8
|
||||
"\t.previous");
|
||||
extern const unsigned char k8nops[];
|
||||
static const unsigned char *const k8_nops[ASM_NOP_MAX+1] = {
|
||||
NULL,
|
||||
|
@ -101,7 +103,8 @@ static const unsigned char *const k8_nops[ASM_NOP_MAX+1] = {
|
|||
#ifdef K7_NOP1
|
||||
asm("\t.section .rodata, \"a\"\nk7nops: "
|
||||
K7_NOP1 K7_NOP2 K7_NOP3 K7_NOP4 K7_NOP5 K7_NOP6
|
||||
K7_NOP7 K7_NOP8);
|
||||
K7_NOP7 K7_NOP8
|
||||
"\t.previous");
|
||||
extern const unsigned char k7nops[];
|
||||
static const unsigned char *const k7_nops[ASM_NOP_MAX+1] = {
|
||||
NULL,
|
||||
|
@ -119,7 +122,8 @@ static const unsigned char *const k7_nops[ASM_NOP_MAX+1] = {
|
|||
#ifdef P6_NOP1
|
||||
asm("\t.section .rodata, \"a\"\np6nops: "
|
||||
P6_NOP1 P6_NOP2 P6_NOP3 P6_NOP4 P6_NOP5 P6_NOP6
|
||||
P6_NOP7 P6_NOP8);
|
||||
P6_NOP7 P6_NOP8
|
||||
"\t.previous");
|
||||
extern const unsigned char p6nops[];
|
||||
static const unsigned char *const p6_nops[ASM_NOP_MAX+1] = {
|
||||
NULL,
|
||||
|
|
|
@ -142,14 +142,6 @@ static void __init check_config(void)
|
|||
panic("Kernel requires i486+ for 'invlpg' and other features");
|
||||
#endif
|
||||
|
||||
/*
|
||||
* If we configured ourselves for a TSC, we'd better have one!
|
||||
*/
|
||||
#ifdef CONFIG_X86_TSC
|
||||
if (!cpu_has_tsc)
|
||||
panic("Kernel compiled for Pentium+, requires TSC feature!");
|
||||
#endif
|
||||
|
||||
/*
|
||||
* If we were told we had a good local APIC, check for buggy Pentia,
|
||||
* i.e. all B steppings and the C2 stepping of P54C when using their
|
||||
|
|
|
@ -652,9 +652,6 @@ static void probe_nmi_watchdog(void)
|
|||
wd_ops = &p6_wd_ops;
|
||||
break;
|
||||
case 15:
|
||||
if (boot_cpu_data.x86_model > 0x4)
|
||||
return;
|
||||
|
||||
wd_ops = &p4_wd_ops;
|
||||
break;
|
||||
default:
|
||||
|
@ -670,8 +667,10 @@ int lapic_watchdog_init(unsigned nmi_hz)
|
|||
{
|
||||
if (!wd_ops) {
|
||||
probe_nmi_watchdog();
|
||||
if (!wd_ops)
|
||||
if (!wd_ops) {
|
||||
printk(KERN_INFO "NMI watchdog: CPU not supported\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!wd_ops->reserve()) {
|
||||
printk(KERN_ERR
|
||||
|
|
|
@ -133,13 +133,16 @@ static void hpet_reserve_platform_timers(unsigned long id)
|
|||
#ifdef CONFIG_HPET_EMULATE_RTC
|
||||
hpet_reserve_timer(&hd, 1);
|
||||
#endif
|
||||
|
||||
hd.hd_irq[0] = HPET_LEGACY_8254;
|
||||
hd.hd_irq[1] = HPET_LEGACY_RTC;
|
||||
|
||||
for (i = 2; i < nrtimers; timer++, i++)
|
||||
hd.hd_irq[i] = (timer->hpet_config & Tn_INT_ROUTE_CNF_MASK) >>
|
||||
Tn_INT_ROUTE_CNF_SHIFT;
|
||||
for (i = 2; i < nrtimers; timer++, i++)
|
||||
hd.hd_irq[i] = (timer->hpet_config & Tn_INT_ROUTE_CNF_MASK) >>
|
||||
Tn_INT_ROUTE_CNF_SHIFT;
|
||||
|
||||
hpet_alloc(&hd);
|
||||
|
||||
}
|
||||
#else
|
||||
static void hpet_reserve_platform_timers(unsigned long id) { }
|
||||
|
|
|
@ -615,8 +615,8 @@ static __init int init_k8_gatt(struct agp_kern_info *info)
|
|||
|
||||
nommu:
|
||||
/* Should not happen anymore */
|
||||
printk(KERN_ERR "PCI-DMA: More than 4GB of RAM and no IOMMU\n"
|
||||
KERN_ERR "PCI-DMA: 32bit PCI IO may malfunction.\n");
|
||||
printk(KERN_WARNING "PCI-DMA: More than 4GB of RAM and no IOMMU\n"
|
||||
KERN_WARNING "falling back to iommu=soft.\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -692,9 +692,9 @@ void __init gart_iommu_init(void)
|
|||
!gart_iommu_aperture ||
|
||||
(no_agp && init_k8_gatt(&info) < 0)) {
|
||||
if (end_pfn > MAX_DMA32_PFN) {
|
||||
printk(KERN_ERR "WARNING more than 4GB of memory "
|
||||
"but GART IOMMU not available.\n"
|
||||
KERN_ERR "WARNING 32bit PCI may malfunction.\n");
|
||||
printk(KERN_WARNING "More than 4GB of memory "
|
||||
"but GART IOMMU not available.\n"
|
||||
KERN_WARNING "falling back to iommu=soft.\n");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -82,7 +82,6 @@ unsigned long thread_saved_pc(struct task_struct *tsk)
|
|||
*/
|
||||
void (*pm_idle)(void);
|
||||
EXPORT_SYMBOL(pm_idle);
|
||||
static DEFINE_PER_CPU(unsigned int, cpu_idle_state);
|
||||
|
||||
void disable_hlt(void)
|
||||
{
|
||||
|
@ -190,9 +189,6 @@ void cpu_idle(void)
|
|||
while (!need_resched()) {
|
||||
void (*idle)(void);
|
||||
|
||||
if (__get_cpu_var(cpu_idle_state))
|
||||
__get_cpu_var(cpu_idle_state) = 0;
|
||||
|
||||
check_pgt_cache();
|
||||
rmb();
|
||||
idle = pm_idle;
|
||||
|
@ -220,40 +216,19 @@ static void do_nothing(void *unused)
|
|||
{
|
||||
}
|
||||
|
||||
/*
|
||||
* cpu_idle_wait - Used to ensure that all the CPUs discard old value of
|
||||
* pm_idle and update to new pm_idle value. Required while changing pm_idle
|
||||
* handler on SMP systems.
|
||||
*
|
||||
* Caller must have changed pm_idle to the new value before the call. Old
|
||||
* pm_idle value will not be used by any CPU after the return of this function.
|
||||
*/
|
||||
void cpu_idle_wait(void)
|
||||
{
|
||||
unsigned int cpu, this_cpu = get_cpu();
|
||||
cpumask_t map, tmp = current->cpus_allowed;
|
||||
|
||||
set_cpus_allowed(current, cpumask_of_cpu(this_cpu));
|
||||
put_cpu();
|
||||
|
||||
cpus_clear(map);
|
||||
for_each_online_cpu(cpu) {
|
||||
per_cpu(cpu_idle_state, cpu) = 1;
|
||||
cpu_set(cpu, map);
|
||||
}
|
||||
|
||||
__get_cpu_var(cpu_idle_state) = 0;
|
||||
|
||||
wmb();
|
||||
do {
|
||||
ssleep(1);
|
||||
for_each_online_cpu(cpu) {
|
||||
if (cpu_isset(cpu, map) && !per_cpu(cpu_idle_state, cpu))
|
||||
cpu_clear(cpu, map);
|
||||
}
|
||||
cpus_and(map, map, cpu_online_map);
|
||||
/*
|
||||
* We waited 1 sec, if a CPU still did not call idle
|
||||
* it may be because it is in idle and not waking up
|
||||
* because it has nothing to do.
|
||||
* Give all the remaining CPUS a kick.
|
||||
*/
|
||||
smp_call_function_mask(map, do_nothing, NULL, 0);
|
||||
} while (!cpus_empty(map));
|
||||
|
||||
set_cpus_allowed(current, tmp);
|
||||
smp_mb();
|
||||
/* kick all the CPUs so that they exit out of pm_idle */
|
||||
smp_call_function(do_nothing, NULL, 0, 1);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(cpu_idle_wait);
|
||||
|
||||
|
|
|
@ -63,7 +63,6 @@ EXPORT_SYMBOL(boot_option_idle_override);
|
|||
*/
|
||||
void (*pm_idle)(void);
|
||||
EXPORT_SYMBOL(pm_idle);
|
||||
static DEFINE_PER_CPU(unsigned int, cpu_idle_state);
|
||||
|
||||
static ATOMIC_NOTIFIER_HEAD(idle_notifier);
|
||||
|
||||
|
@ -173,9 +172,6 @@ void cpu_idle(void)
|
|||
while (!need_resched()) {
|
||||
void (*idle)(void);
|
||||
|
||||
if (__get_cpu_var(cpu_idle_state))
|
||||
__get_cpu_var(cpu_idle_state) = 0;
|
||||
|
||||
rmb();
|
||||
idle = pm_idle;
|
||||
if (!idle)
|
||||
|
@ -207,40 +203,19 @@ static void do_nothing(void *unused)
|
|||
{
|
||||
}
|
||||
|
||||
/*
|
||||
* cpu_idle_wait - Used to ensure that all the CPUs discard old value of
|
||||
* pm_idle and update to new pm_idle value. Required while changing pm_idle
|
||||
* handler on SMP systems.
|
||||
*
|
||||
* Caller must have changed pm_idle to the new value before the call. Old
|
||||
* pm_idle value will not be used by any CPU after the return of this function.
|
||||
*/
|
||||
void cpu_idle_wait(void)
|
||||
{
|
||||
unsigned int cpu, this_cpu = get_cpu();
|
||||
cpumask_t map, tmp = current->cpus_allowed;
|
||||
|
||||
set_cpus_allowed(current, cpumask_of_cpu(this_cpu));
|
||||
put_cpu();
|
||||
|
||||
cpus_clear(map);
|
||||
for_each_online_cpu(cpu) {
|
||||
per_cpu(cpu_idle_state, cpu) = 1;
|
||||
cpu_set(cpu, map);
|
||||
}
|
||||
|
||||
__get_cpu_var(cpu_idle_state) = 0;
|
||||
|
||||
wmb();
|
||||
do {
|
||||
ssleep(1);
|
||||
for_each_online_cpu(cpu) {
|
||||
if (cpu_isset(cpu, map) && !per_cpu(cpu_idle_state, cpu))
|
||||
cpu_clear(cpu, map);
|
||||
}
|
||||
cpus_and(map, map, cpu_online_map);
|
||||
/*
|
||||
* We waited 1 sec, if a CPU still did not call idle
|
||||
* it may be because it is in idle and not waking up
|
||||
* because it has nothing to do.
|
||||
* Give all the remaining CPUS a kick.
|
||||
*/
|
||||
smp_call_function_mask(map, do_nothing, 0, 0);
|
||||
} while (!cpus_empty(map));
|
||||
|
||||
set_cpus_allowed(current, tmp);
|
||||
smp_mb();
|
||||
/* kick all the CPUs so that they exit out of pm_idle */
|
||||
smp_call_function(do_nothing, NULL, 0, 1);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(cpu_idle_wait);
|
||||
|
||||
|
|
|
@ -140,6 +140,9 @@ static int enable_single_step(struct task_struct *child)
|
|||
*/
|
||||
static void write_debugctlmsr(struct task_struct *child, unsigned long val)
|
||||
{
|
||||
if (child->thread.debugctlmsr == val)
|
||||
return;
|
||||
|
||||
child->thread.debugctlmsr = val;
|
||||
|
||||
if (child != current)
|
||||
|
@ -165,11 +168,11 @@ static void enable_step(struct task_struct *child, bool block)
|
|||
write_debugctlmsr(child,
|
||||
child->thread.debugctlmsr | DEBUGCTLMSR_BTF);
|
||||
} else {
|
||||
write_debugctlmsr(child,
|
||||
child->thread.debugctlmsr & ~DEBUGCTLMSR_BTF);
|
||||
write_debugctlmsr(child,
|
||||
child->thread.debugctlmsr & ~DEBUGCTLMSR_BTF);
|
||||
|
||||
if (!child->thread.debugctlmsr)
|
||||
clear_tsk_thread_flag(child, TIF_DEBUGCTLMSR);
|
||||
if (!child->thread.debugctlmsr)
|
||||
clear_tsk_thread_flag(child, TIF_DEBUGCTLMSR);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -92,7 +92,7 @@ int do_set_thread_area(struct task_struct *p, int idx,
|
|||
asmlinkage int sys_set_thread_area(struct user_desc __user *u_info)
|
||||
{
|
||||
int ret = do_set_thread_area(current, -1, u_info, 1);
|
||||
prevent_tail_call(ret);
|
||||
asmlinkage_protect(1, ret, u_info);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -142,7 +142,7 @@ int do_get_thread_area(struct task_struct *p, int idx,
|
|||
asmlinkage int sys_get_thread_area(struct user_desc __user *u_info)
|
||||
{
|
||||
int ret = do_get_thread_area(current, -1, u_info);
|
||||
prevent_tail_call(ret);
|
||||
asmlinkage_protect(1, ret, u_info);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
@ -256,9 +256,7 @@ time_cpufreq_notifier(struct notifier_block *nb, unsigned long val, void *data)
|
|||
ref_freq, freq->new);
|
||||
if (!(freq->flags & CPUFREQ_CONST_LOOPS)) {
|
||||
tsc_khz = cpu_khz;
|
||||
preempt_disable();
|
||||
set_cyc2ns_scale(cpu_khz, smp_processor_id());
|
||||
preempt_enable();
|
||||
set_cyc2ns_scale(cpu_khz, freq->cpu);
|
||||
/*
|
||||
* TSC based sched_clock turns
|
||||
* to junk w/ cpufreq
|
||||
|
|
|
@ -148,9 +148,7 @@ static int time_cpufreq_notifier(struct notifier_block *nb, unsigned long val,
|
|||
mark_tsc_unstable("cpufreq changes");
|
||||
}
|
||||
|
||||
preempt_disable();
|
||||
set_cyc2ns_scale(tsc_khz_ref, smp_processor_id());
|
||||
preempt_enable();
|
||||
set_cyc2ns_scale(tsc_khz_ref, freq->cpu);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -219,8 +219,21 @@ struct pci_bus * __devinit pci_acpi_scan_root(struct acpi_device *device, int do
|
|||
if (pxm >= 0)
|
||||
sd->node = pxm_to_node(pxm);
|
||||
#endif
|
||||
/*
|
||||
* Maybe the desired pci bus has been already scanned. In such case
|
||||
* it is unnecessary to scan the pci bus with the given domain,busnum.
|
||||
*/
|
||||
bus = pci_find_bus(domain, busnum);
|
||||
if (bus) {
|
||||
/*
|
||||
* If the desired bus exits, the content of bus->sysdata will
|
||||
* be replaced by sd.
|
||||
*/
|
||||
memcpy(bus->sysdata, sd, sizeof(*sd));
|
||||
kfree(sd);
|
||||
} else
|
||||
bus = pci_scan_bus_parented(NULL, busnum, &pci_root_ops, sd);
|
||||
|
||||
bus = pci_scan_bus_parented(NULL, busnum, &pci_root_ops, sd);
|
||||
if (!bus)
|
||||
kfree(sd);
|
||||
|
||||
|
@ -228,7 +241,7 @@ struct pci_bus * __devinit pci_acpi_scan_root(struct acpi_device *device, int do
|
|||
if (bus != NULL) {
|
||||
if (pxm >= 0) {
|
||||
printk("bus %d -> pxm %d -> node %d\n",
|
||||
busnum, pxm, sd->node);
|
||||
busnum, pxm, pxm_to_node(pxm));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -667,10 +667,10 @@ static void xen_release_pt_init(u32 pfn)
|
|||
make_lowmem_page_readwrite(__va(PFN_PHYS(pfn)));
|
||||
}
|
||||
|
||||
static void pin_pagetable_pfn(unsigned level, unsigned long pfn)
|
||||
static void pin_pagetable_pfn(unsigned cmd, unsigned long pfn)
|
||||
{
|
||||
struct mmuext_op op;
|
||||
op.cmd = level;
|
||||
op.cmd = cmd;
|
||||
op.arg1.mfn = pfn_to_mfn(pfn);
|
||||
if (HYPERVISOR_mmuext_op(&op, 1, NULL, DOMID_SELF))
|
||||
BUG();
|
||||
|
@ -687,7 +687,8 @@ static void xen_alloc_ptpage(struct mm_struct *mm, u32 pfn, unsigned level)
|
|||
|
||||
if (!PageHighMem(page)) {
|
||||
make_lowmem_page_readonly(__va(PFN_PHYS(pfn)));
|
||||
pin_pagetable_pfn(level, pfn);
|
||||
if (level == PT_PTE)
|
||||
pin_pagetable_pfn(MMUEXT_PIN_L1_TABLE, pfn);
|
||||
} else
|
||||
/* make sure there are no stray mappings of
|
||||
this page */
|
||||
|
@ -697,27 +698,39 @@ static void xen_alloc_ptpage(struct mm_struct *mm, u32 pfn, unsigned level)
|
|||
|
||||
static void xen_alloc_pt(struct mm_struct *mm, u32 pfn)
|
||||
{
|
||||
xen_alloc_ptpage(mm, pfn, MMUEXT_PIN_L1_TABLE);
|
||||
xen_alloc_ptpage(mm, pfn, PT_PTE);
|
||||
}
|
||||
|
||||
static void xen_alloc_pd(struct mm_struct *mm, u32 pfn)
|
||||
{
|
||||
xen_alloc_ptpage(mm, pfn, MMUEXT_PIN_L2_TABLE);
|
||||
xen_alloc_ptpage(mm, pfn, PT_PMD);
|
||||
}
|
||||
|
||||
/* This should never happen until we're OK to use struct page */
|
||||
static void xen_release_pt(u32 pfn)
|
||||
static void xen_release_ptpage(u32 pfn, unsigned level)
|
||||
{
|
||||
struct page *page = pfn_to_page(pfn);
|
||||
|
||||
if (PagePinned(page)) {
|
||||
if (!PageHighMem(page)) {
|
||||
pin_pagetable_pfn(MMUEXT_UNPIN_TABLE, pfn);
|
||||
if (level == PT_PTE)
|
||||
pin_pagetable_pfn(MMUEXT_UNPIN_TABLE, pfn);
|
||||
make_lowmem_page_readwrite(__va(PFN_PHYS(pfn)));
|
||||
}
|
||||
ClearPagePinned(page);
|
||||
}
|
||||
}
|
||||
|
||||
static void xen_release_pt(u32 pfn)
|
||||
{
|
||||
xen_release_ptpage(pfn, PT_PTE);
|
||||
}
|
||||
|
||||
static void xen_release_pd(u32 pfn)
|
||||
{
|
||||
xen_release_ptpage(pfn, PT_PMD);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_HIGHPTE
|
||||
static void *xen_kmap_atomic_pte(struct page *page, enum km_type type)
|
||||
{
|
||||
|
@ -838,7 +851,7 @@ static __init void xen_pagetable_setup_done(pgd_t *base)
|
|||
pv_mmu_ops.alloc_pt = xen_alloc_pt;
|
||||
pv_mmu_ops.alloc_pd = xen_alloc_pd;
|
||||
pv_mmu_ops.release_pt = xen_release_pt;
|
||||
pv_mmu_ops.release_pd = xen_release_pt;
|
||||
pv_mmu_ops.release_pd = xen_release_pd;
|
||||
pv_mmu_ops.set_pte = xen_set_pte;
|
||||
|
||||
setup_shared_info();
|
||||
|
|
|
@ -310,13 +310,6 @@ pgd_t xen_make_pgd(unsigned long pgd)
|
|||
}
|
||||
#endif /* CONFIG_X86_PAE */
|
||||
|
||||
enum pt_level {
|
||||
PT_PGD,
|
||||
PT_PUD,
|
||||
PT_PMD,
|
||||
PT_PTE
|
||||
};
|
||||
|
||||
/*
|
||||
(Yet another) pagetable walker. This one is intended for pinning a
|
||||
pagetable. This means that it walks a pagetable and calls the
|
||||
|
|
|
@ -3,6 +3,13 @@
|
|||
#include <linux/linkage.h>
|
||||
#include <asm/page.h>
|
||||
|
||||
enum pt_level {
|
||||
PT_PGD,
|
||||
PT_PUD,
|
||||
PT_PMD,
|
||||
PT_PTE
|
||||
};
|
||||
|
||||
/*
|
||||
* Page-directory addresses above 4GB do not fit into architectural %cr3.
|
||||
* When accessing %cr3, or equivalent field in vcpu_guest_context, guests
|
||||
|
|
|
@ -38,7 +38,7 @@ config BLK_DEV_IO_TRACE
|
|||
on a block device queue. For more information (and the user space
|
||||
support tools needed), fetch the blktrace app from:
|
||||
|
||||
git://brick.kernel.dk/data/git/blktrace.git
|
||||
git://git.kernel.dk/blktrace.git
|
||||
|
||||
config LSF
|
||||
bool "Support for Large Single Files"
|
||||
|
|
|
@ -1214,6 +1214,8 @@ static void cfq_exit_cfqq(struct cfq_data *cfqd, struct cfq_queue *cfqq)
|
|||
static void __cfq_exit_single_io_context(struct cfq_data *cfqd,
|
||||
struct cfq_io_context *cic)
|
||||
{
|
||||
struct io_context *ioc = cic->ioc;
|
||||
|
||||
list_del_init(&cic->queue_list);
|
||||
|
||||
/*
|
||||
|
@ -1223,6 +1225,9 @@ static void __cfq_exit_single_io_context(struct cfq_data *cfqd,
|
|||
cic->dead_key = (unsigned long) cic->key;
|
||||
cic->key = NULL;
|
||||
|
||||
if (ioc->ioc_data == cic)
|
||||
rcu_assign_pointer(ioc->ioc_data, NULL);
|
||||
|
||||
if (cic->cfqq[ASYNC]) {
|
||||
cfq_exit_cfqq(cfqd, cic->cfqq[ASYNC]);
|
||||
cic->cfqq[ASYNC] = NULL;
|
||||
|
@ -1255,7 +1260,6 @@ static void cfq_exit_single_io_context(struct io_context *ioc,
|
|||
*/
|
||||
static void cfq_exit_io_context(struct io_context *ioc)
|
||||
{
|
||||
rcu_assign_pointer(ioc->ioc_data, NULL);
|
||||
call_for_each_cic(ioc, cfq_exit_single_io_context);
|
||||
}
|
||||
|
||||
|
@ -1478,8 +1482,7 @@ cfq_drop_dead_cic(struct cfq_data *cfqd, struct io_context *ioc,
|
|||
|
||||
spin_lock_irqsave(&ioc->lock, flags);
|
||||
|
||||
if (ioc->ioc_data == cic)
|
||||
rcu_assign_pointer(ioc->ioc_data, NULL);
|
||||
BUG_ON(ioc->ioc_data == cic);
|
||||
|
||||
radix_tree_delete(&ioc->radix_root, (unsigned long) cfqd);
|
||||
hlist_del_rcu(&cic->cic_list);
|
||||
|
|
|
@ -373,10 +373,11 @@ int acpi_bus_receive_event(struct acpi_bus_event *event)
|
|||
}
|
||||
|
||||
spin_lock_irqsave(&acpi_bus_event_lock, flags);
|
||||
entry =
|
||||
list_entry(acpi_bus_event_list.next, struct acpi_bus_event, node);
|
||||
if (entry)
|
||||
if (!list_empty(&acpi_bus_event_list)) {
|
||||
entry = list_entry(acpi_bus_event_list.next,
|
||||
struct acpi_bus_event, node);
|
||||
list_del(&entry->node);
|
||||
}
|
||||
spin_unlock_irqrestore(&acpi_bus_event_lock, flags);
|
||||
|
||||
if (!entry)
|
||||
|
|
|
@ -822,7 +822,7 @@ static int acpi_processor_remove(struct acpi_device *device, int type)
|
|||
}
|
||||
|
||||
processors[pr->id] = NULL;
|
||||
|
||||
processor_device_array[pr->id] = NULL;
|
||||
kfree(pr);
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -1125,7 +1125,7 @@ static int acpi_thermal_register_thermal_zone(struct acpi_thermal *tz)
|
|||
tz->trips.active[i].flags.valid; i++, trips++);
|
||||
tz->thermal_zone = thermal_zone_device_register("ACPI thermal zone",
|
||||
trips, tz, &acpi_thermal_zone_ops);
|
||||
if (!tz->thermal_zone)
|
||||
if (IS_ERR(tz->thermal_zone))
|
||||
return -ENODEV;
|
||||
|
||||
result = sysfs_create_link(&tz->device->dev.kobj,
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue