Merge branch 'linus' into sched-devel
This commit is contained in:
Коммит
f9e8e07e07
|
@ -21,6 +21,11 @@ This driver is known to work with the following cards:
|
|||
* SA E200
|
||||
* SA E200i
|
||||
* SA E500
|
||||
* SA P212
|
||||
* SA P410
|
||||
* SA P410i
|
||||
* SA P411
|
||||
* SA P812
|
||||
|
||||
Detecting drive failures:
|
||||
-------------------------
|
||||
|
|
|
@ -199,7 +199,7 @@ using the sched_setaffinity, mbind and set_mempolicy system calls.
|
|||
The following rules apply to each cpuset:
|
||||
|
||||
- Its CPUs and Memory Nodes must be a subset of its parents.
|
||||
- It can only be marked exclusive if its parent is.
|
||||
- It can't be marked exclusive unless its parent is.
|
||||
- If its cpu or memory is exclusive, they may not overlap any sibling.
|
||||
|
||||
These rules, and the natural hierarchy of cpusets, enable efficient
|
||||
|
@ -345,7 +345,7 @@ is modified to perform an inline check for this PF_SPREAD_PAGE task
|
|||
flag, and if set, a call to a new routine cpuset_mem_spread_node()
|
||||
returns the node to prefer for the allocation.
|
||||
|
||||
Similarly, setting 'memory_spread_cache' turns on the flag
|
||||
Similarly, setting 'memory_spread_slab' turns on the flag
|
||||
PF_SPREAD_SLAB, and appropriately marked slab caches will allocate
|
||||
pages from the node returned by cpuset_mem_spread_node().
|
||||
|
||||
|
@ -709,7 +709,10 @@ Now you want to do something with this cpuset.
|
|||
|
||||
In this directory you can find several files:
|
||||
# ls
|
||||
cpus cpu_exclusive mems mem_exclusive mem_hardwall tasks
|
||||
cpu_exclusive memory_migrate mems tasks
|
||||
cpus memory_pressure notify_on_release
|
||||
mem_exclusive memory_spread_page sched_load_balance
|
||||
mem_hardwall memory_spread_slab sched_relax_domain_level
|
||||
|
||||
Reading them will give you information about the state of this cpuset:
|
||||
the CPUs and Memory Nodes it can use, the processes that are using
|
||||
|
|
|
@ -139,8 +139,16 @@ commit=nrsec (*) Ext4 can be told to sync all its data and metadata
|
|||
Setting it to very large values will improve
|
||||
performance.
|
||||
|
||||
barrier=1 This enables/disables barriers. barrier=0 disables
|
||||
it, barrier=1 enables it.
|
||||
barrier=<0|1(*)> This enables/disables the use of write barriers in
|
||||
the jbd code. barrier=0 disables, barrier=1 enables.
|
||||
This also requires an IO stack which can support
|
||||
barriers, and if jbd gets an error on a barrier
|
||||
write, it will disable again with a warning.
|
||||
Write barriers enforce proper on-disk ordering
|
||||
of journal commits, making volatile disk write caches
|
||||
safe to use, at some performance penalty. If
|
||||
your disks are battery-backed in one way or another,
|
||||
disabling barriers may safely improve performance.
|
||||
|
||||
orlov (*) This enables the new Orlov block allocator. It is
|
||||
enabled by default.
|
||||
|
|
|
@ -36,6 +36,7 @@ files, each with their own function.
|
|||
local_cpus nearby CPU mask (cpumask, ro)
|
||||
resource PCI resource host addresses (ascii, ro)
|
||||
resource0..N PCI resource N, if present (binary, mmap)
|
||||
resource0_wc..N_wc PCI WC map resource N, if prefetchable (binary, mmap)
|
||||
rom PCI ROM resource, if present (binary, ro)
|
||||
subsystem_device PCI subsystem device (ascii, ro)
|
||||
subsystem_vendor PCI subsystem vendor (ascii, ro)
|
||||
|
|
|
@ -1,6 +1,105 @@
|
|||
kernel-doc nano-HOWTO
|
||||
=====================
|
||||
|
||||
How to format kernel-doc comments
|
||||
---------------------------------
|
||||
|
||||
In order to provide embedded, 'C' friendly, easy to maintain,
|
||||
but consistent and extractable documentation of the functions and
|
||||
data structures in the Linux kernel, the Linux kernel has adopted
|
||||
a consistent style for documenting functions and their parameters,
|
||||
and structures and their members.
|
||||
|
||||
The format for this documentation is called the kernel-doc format.
|
||||
It is documented in this Documentation/kernel-doc-nano-HOWTO.txt file.
|
||||
|
||||
This style embeds the documentation within the source files, using
|
||||
a few simple conventions. The scripts/kernel-doc perl script, some
|
||||
SGML templates in Documentation/DocBook, and other tools understand
|
||||
these conventions, and are used to extract this embedded documentation
|
||||
into various documents.
|
||||
|
||||
In order to provide good documentation of kernel functions and data
|
||||
structures, please use the following conventions to format your
|
||||
kernel-doc comments in Linux kernel source.
|
||||
|
||||
We definitely need kernel-doc formatted documentation for functions
|
||||
that are exported to loadable modules using EXPORT_SYMBOL.
|
||||
|
||||
We also look to provide kernel-doc formatted documentation for
|
||||
functions externally visible to other kernel files (not marked
|
||||
"static").
|
||||
|
||||
We also recommend providing kernel-doc formatted documentation
|
||||
for private (file "static") routines, for consistency of kernel
|
||||
source code layout. But this is lower priority and at the
|
||||
discretion of the MAINTAINER of that kernel source file.
|
||||
|
||||
Data structures visible in kernel include files should also be
|
||||
documented using kernel-doc formatted comments.
|
||||
|
||||
The opening comment mark "/**" is reserved for kernel-doc comments.
|
||||
Only comments so marked will be considered by the kernel-doc scripts,
|
||||
and any comment so marked must be in kernel-doc format. Do not use
|
||||
"/**" to be begin a comment block unless the comment block contains
|
||||
kernel-doc formatted comments. The closing comment marker for
|
||||
kernel-doc comments can be either "*/" or "**/".
|
||||
|
||||
Kernel-doc comments should be placed just before the function
|
||||
or data structure being described.
|
||||
|
||||
Example kernel-doc function comment:
|
||||
|
||||
/**
|
||||
* foobar() - short function description of foobar
|
||||
* @arg1: Describe the first argument to foobar.
|
||||
* @arg2: Describe the second argument to foobar.
|
||||
* One can provide multiple line descriptions
|
||||
* for arguments.
|
||||
*
|
||||
* A longer description, with more discussion of the function foobar()
|
||||
* that might be useful to those using or modifying it. Begins with
|
||||
* empty comment line, and may include additional embedded empty
|
||||
* comment lines.
|
||||
*
|
||||
* The longer description can have multiple paragraphs.
|
||||
**/
|
||||
|
||||
The first line, with the short description, must be on a single line.
|
||||
|
||||
The @argument descriptions must begin on the very next line following
|
||||
this opening short function description line, with no intervening
|
||||
empty comment lines.
|
||||
|
||||
Example kernel-doc data structure comment.
|
||||
|
||||
/**
|
||||
* struct blah - the basic blah structure
|
||||
* @mem1: describe the first member of struct blah
|
||||
* @mem2: describe the second member of struct blah,
|
||||
* perhaps with more lines and words.
|
||||
*
|
||||
* Longer description of this structure.
|
||||
**/
|
||||
|
||||
The kernel-doc function comments describe each parameter to the
|
||||
function, in order, with the @name lines.
|
||||
|
||||
The kernel-doc data structure comments describe each structure member
|
||||
in the data structure, with the @name lines.
|
||||
|
||||
The longer description formatting is "reflowed", losing your line
|
||||
breaks. So presenting carefully formatted lists within these
|
||||
descriptions won't work so well; derived documentation will lose
|
||||
the formatting.
|
||||
|
||||
See the section below "How to add extractable documentation to your
|
||||
source files" for more details and notes on how to format kernel-doc
|
||||
comments.
|
||||
|
||||
Components of the kernel-doc system
|
||||
-----------------------------------
|
||||
|
||||
Many places in the source tree have extractable documentation in the
|
||||
form of block comments above functions. The components of this system
|
||||
are:
|
||||
|
|
|
@ -715,14 +715,14 @@
|
|||
|
||||
* Name: "Gary's Encyclopedia - The Linux Kernel"
|
||||
Author: Gary (I suppose...).
|
||||
URL: http://www.lisoleg.net/cgi-bin/lisoleg.pl?view=kernel.htm
|
||||
Keywords: links, not found here?.
|
||||
URL: http://slencyclopedia.berlios.de/index.html
|
||||
Keywords: linux, community, everything!
|
||||
Description: Gary's Encyclopedia exists to allow the rapid finding
|
||||
of documentation and other information of interest to GNU/Linux
|
||||
users. It has about 4000 links to external pages in 150 major
|
||||
categories. This link is for kernel-specific links, documents,
|
||||
sites... Look there if you could not find here what you were
|
||||
looking for.
|
||||
sites... This list is now hosted by developer.Berlios.de,
|
||||
but seems not to have been updated since sometime in 1999.
|
||||
|
||||
* Name: "The home page of Linux-MM"
|
||||
Author: The Linux-MM team.
|
||||
|
|
|
@ -305,7 +305,7 @@ should not be manipulated by any other user.
|
|||
|
||||
A kset keeps its children in a standard kernel linked list. Kobjects point
|
||||
back to their containing kset via their kset field. In almost all cases,
|
||||
the kobjects belonging to a ket have that kset (or, strictly, its embedded
|
||||
the kobjects belonging to a kset have that kset (or, strictly, its embedded
|
||||
kobject) in their parent.
|
||||
|
||||
As a kset contains a kobject within it, it should always be dynamically
|
||||
|
|
|
@ -503,7 +503,7 @@ generate input device EV_KEY events.
|
|||
In addition to the EV_KEY events, thinkpad-acpi may also issue EV_SW
|
||||
events for switches:
|
||||
|
||||
SW_RADIO T60 and later hardare rfkill rocker switch
|
||||
SW_RFKILL_ALL T60 and later hardare rfkill rocker switch
|
||||
SW_TABLET_MODE Tablet ThinkPads HKEY events 0x5009 and 0x500A
|
||||
|
||||
Non hot-key ACPI HKEY event map:
|
||||
|
|
|
@ -46,7 +46,7 @@ These are the ARCnet drivers for Linux.
|
|||
|
||||
|
||||
This new release (2.91) has been put together by David Woodhouse
|
||||
<dwmw2@cam.ac.uk>, in an attempt to tidy up the driver after adding support
|
||||
<dwmw2@infradead.org>, in an attempt to tidy up the driver after adding support
|
||||
for yet another chipset. Now the generic support has been separated from the
|
||||
individual chipset drivers, and the source files aren't quite so packed with
|
||||
#ifdefs! I've changed this file a bit, but kept it in the first person from
|
||||
|
|
|
@ -0,0 +1,77 @@
|
|||
pagemap, from the userspace perspective
|
||||
---------------------------------------
|
||||
|
||||
pagemap is a new (as of 2.6.25) set of interfaces in the kernel that allow
|
||||
userspace programs to examine the page tables and related information by
|
||||
reading files in /proc.
|
||||
|
||||
There are three components to pagemap:
|
||||
|
||||
* /proc/pid/pagemap. This file lets a userspace process find out which
|
||||
physical frame each virtual page is mapped to. It contains one 64-bit
|
||||
value for each virtual page, containing the following data (from
|
||||
fs/proc/task_mmu.c, above pagemap_read):
|
||||
|
||||
* Bits 0-55 page frame number (PFN) if present
|
||||
* Bits 0-4 swap type if swapped
|
||||
* Bits 5-55 swap offset if swapped
|
||||
* Bits 55-60 page shift (page size = 1<<page shift)
|
||||
* Bit 61 reserved for future use
|
||||
* Bit 62 page swapped
|
||||
* Bit 63 page present
|
||||
|
||||
If the page is not present but in swap, then the PFN contains an
|
||||
encoding of the swap file number and the page's offset into the
|
||||
swap. Unmapped pages return a null PFN. This allows determining
|
||||
precisely which pages are mapped (or in swap) and comparing mapped
|
||||
pages between processes.
|
||||
|
||||
Efficient users of this interface will use /proc/pid/maps to
|
||||
determine which areas of memory are actually mapped and llseek to
|
||||
skip over unmapped regions.
|
||||
|
||||
* /proc/kpagecount. This file contains a 64-bit count of the number of
|
||||
times each page is mapped, indexed by PFN.
|
||||
|
||||
* /proc/kpageflags. This file contains a 64-bit set of flags for each
|
||||
page, indexed by PFN.
|
||||
|
||||
The flags are (from fs/proc/proc_misc, above kpageflags_read):
|
||||
|
||||
0. LOCKED
|
||||
1. ERROR
|
||||
2. REFERENCED
|
||||
3. UPTODATE
|
||||
4. DIRTY
|
||||
5. LRU
|
||||
6. ACTIVE
|
||||
7. SLAB
|
||||
8. WRITEBACK
|
||||
9. RECLAIM
|
||||
10. BUDDY
|
||||
|
||||
Using pagemap to do something useful:
|
||||
|
||||
The general procedure for using pagemap to find out about a process' memory
|
||||
usage goes like this:
|
||||
|
||||
1. Read /proc/pid/maps to determine which parts of the memory space are
|
||||
mapped to what.
|
||||
2. Select the maps you are interested in -- all of them, or a particular
|
||||
library, or the stack or the heap, etc.
|
||||
3. Open /proc/pid/pagemap and seek to the pages you would like to examine.
|
||||
4. Read a u64 for each page from pagemap.
|
||||
5. Open /proc/kpagecount and/or /proc/kpageflags. For each PFN you just
|
||||
read, seek to that entry in the file, and read the data you want.
|
||||
|
||||
For example, to find the "unique set size" (USS), which is the amount of
|
||||
memory that a process is using that is not shared with any other process,
|
||||
you can go through every map in the process, find the PFNs, look those up
|
||||
in kpagecount, and tally up the number of pages that are only referenced
|
||||
once.
|
||||
|
||||
Other notes:
|
||||
|
||||
Reading from any of the files will return -EINVAL if you are not starting
|
||||
the read on an 8-byte boundary (e.g., if you seeked an odd number of bytes
|
||||
into the file), or if the size of the read is not a multiple of 8 bytes.
|
48
MAINTAINERS
48
MAINTAINERS
|
@ -228,21 +228,21 @@ ACPI BATTERY DRIVERS
|
|||
P: Alexey Starikovskiy
|
||||
M: astarikovskiy@suse.de
|
||||
L: linux-acpi@vger.kernel.org
|
||||
W: http://acpi.sourceforge.net/
|
||||
W: http://www.lesswatts.org/projects/acpi/
|
||||
S: Supported
|
||||
|
||||
ACPI EC DRIVER
|
||||
P: Alexey Starikovskiy
|
||||
M: astarikovskiy@suse.de
|
||||
L: linux-acpi@vger.kernel.org
|
||||
W: http://acpi.sourceforge.net/
|
||||
W: http://www.lesswatts.org/projects/acpi/
|
||||
S: Supported
|
||||
|
||||
ACPI FAN DRIVER
|
||||
P: Len Brown
|
||||
M: len.brown@intel.com
|
||||
L: linux-acpi@vger.kernel.org
|
||||
W: http://acpi.sourceforge.net/
|
||||
W: http://www.lesswatts.org/projects/acpi/
|
||||
S: Supported
|
||||
|
||||
ACPI PCI HOTPLUG DRIVER
|
||||
|
@ -255,14 +255,14 @@ ACPI THERMAL DRIVER
|
|||
P: Len Brown
|
||||
M: len.brown@intel.com
|
||||
L: linux-acpi@vger.kernel.org
|
||||
W: http://acpi.sourceforge.net/
|
||||
W: http://www.lesswatts.org/projects/acpi/
|
||||
S: Supported
|
||||
|
||||
ACPI VIDEO DRIVER
|
||||
P: Rui Zhang
|
||||
M: rui.zhang@intel.com
|
||||
L: linux-acpi@vger.kernel.org
|
||||
W: http://acpi.sourceforge.net/
|
||||
W: http://www.lesswatts.org/projects/acpi/
|
||||
S: Supported
|
||||
|
||||
ACPI WMI DRIVER
|
||||
|
@ -274,7 +274,7 @@ S: Maintained
|
|||
|
||||
AD1889 ALSA SOUND DRIVER
|
||||
P: Kyle McMartin
|
||||
M: kyle@parisc-linux.org
|
||||
M: kyle@mcmartin.ca
|
||||
P: Thibaut Varene
|
||||
M: T-Bone@parisc-linux.org
|
||||
W: http://wiki.parisc-linux.org/AD1889
|
||||
|
@ -995,8 +995,8 @@ L: netdev@vger.kernel.org
|
|||
S: Supported
|
||||
|
||||
BROADCOM BNX2X 10 GIGABIT ETHERNET DRIVER
|
||||
P: Eliezer Tamir
|
||||
M: eliezert@broadcom.com
|
||||
P: Eilon Greenstein
|
||||
M: eilong@broadcom.com
|
||||
L: netdev@vger.kernel.org
|
||||
S: Supported
|
||||
|
||||
|
@ -1202,6 +1202,7 @@ M: pj@sgi.com
|
|||
M: menage@google.com
|
||||
L: linux-kernel@vger.kernel.org
|
||||
W: http://www.bullopensource.org/cpuset/
|
||||
W: http://oss.sgi.com/projects/cpusets/
|
||||
S: Supported
|
||||
|
||||
CRAMFS FILESYSTEM
|
||||
|
@ -1827,7 +1828,7 @@ S: Maintained
|
|||
|
||||
HARMONY SOUND DRIVER
|
||||
P: Kyle McMartin
|
||||
M: kyle@parisc-linux.org
|
||||
M: kyle@mcmartin.ca
|
||||
L: linux-parisc@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
|
@ -2565,7 +2566,6 @@ LINUX SECURITY MODULE (LSM) FRAMEWORK
|
|||
P: Chris Wright
|
||||
M: chrisw@sous-sol.org
|
||||
L: linux-security-module@vger.kernel.org
|
||||
W: http://lsm.immunix.org
|
||||
T: git kernel.org:/pub/scm/linux/kernel/git/chrisw/lsm-2.6.git
|
||||
S: Supported
|
||||
|
||||
|
@ -2866,8 +2866,8 @@ S: Maintained
|
|||
NETEFFECT IWARP RNIC DRIVER (IW_NES)
|
||||
P: Faisal Latif
|
||||
M: flatif@neteffect.com
|
||||
P: Nishi Gupta
|
||||
M: ngupta@neteffect.com
|
||||
P: Chien Tung
|
||||
M: ctung@neteffect.com
|
||||
P: Glenn Streiff
|
||||
M: gstreiff@neteffect.com
|
||||
L: general@lists.openfabrics.org
|
||||
|
@ -3121,7 +3121,7 @@ S: Maintained
|
|||
|
||||
PARISC ARCHITECTURE
|
||||
P: Kyle McMartin
|
||||
M: kyle@parisc-linux.org
|
||||
M: kyle@mcmartin.ca
|
||||
P: Matthew Wilcox
|
||||
M: matthew@wil.cx
|
||||
P: Grant Grundler
|
||||
|
@ -3265,7 +3265,7 @@ S: Maintained
|
|||
|
||||
PPP OVER ETHERNET
|
||||
P: Michal Ostrowski
|
||||
M: mostrows@speakeasy.net
|
||||
M: mostrows@earthlink.net
|
||||
S: Maintained
|
||||
|
||||
PPP OVER L2TP
|
||||
|
@ -3330,9 +3330,11 @@ L: video4linux-list@redhat.com
|
|||
W: http://www.isely.net/pvrusb2/
|
||||
S: Maintained
|
||||
|
||||
PXA2xx SUPPORT
|
||||
P: Nicolas Pitre
|
||||
M: nico@cam.org
|
||||
PXA2xx/PXA3xx SUPPORT
|
||||
P: Eric Miao
|
||||
M: eric.miao@marvell.com
|
||||
P: Russell King
|
||||
M: linux@arm.linux.org.uk
|
||||
L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
|
||||
S: Maintained
|
||||
|
||||
|
@ -3439,10 +3441,7 @@ L: rtc-linux@googlegroups.com
|
|||
S: Maintained
|
||||
|
||||
REISERFS FILE SYSTEM
|
||||
P: Hans Reiser
|
||||
M: reiserfs-dev@namesys.com
|
||||
L: reiserfs-devel@vger.kernel.org
|
||||
W: http://www.namesys.com
|
||||
S: Supported
|
||||
|
||||
RFKILL
|
||||
|
@ -3662,13 +3661,6 @@ M: romieu@fr.zoreil.com
|
|||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
SIS 5513 IDE CONTROLLER DRIVER
|
||||
P: Lionel Bouton
|
||||
M: Lionel.Bouton@inet6.fr
|
||||
W: http://inet6.dyn.dhs.org/sponsoring/sis5513/index.html
|
||||
W: http://gyver.homeip.net/sis5513/index.html
|
||||
S: Maintained
|
||||
|
||||
SIS 900/7016 FAST ETHERNET DRIVER
|
||||
P: Daniele Venzano
|
||||
M: venza@brownhat.org
|
||||
|
@ -4034,7 +4026,7 @@ TULIP NETWORK DRIVERS
|
|||
P: Grant Grundler
|
||||
M: grundler@parisc-linux.org
|
||||
P: Kyle McMartin
|
||||
M: kyle@parisc-linux.org
|
||||
M: kyle@mcmartin.ca
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
|
|
4
Makefile
4
Makefile
|
@ -1,8 +1,8 @@
|
|||
VERSION = 2
|
||||
PATCHLEVEL = 6
|
||||
SUBLEVEL = 26
|
||||
EXTRAVERSION = -rc5
|
||||
NAME = Funky Weasel is Jiggy wit it
|
||||
EXTRAVERSION = -rc6
|
||||
NAME = Rotary Wombat
|
||||
|
||||
# *DOCUMENTATION*
|
||||
# To see a list of typical targets execute "make help"
|
||||
|
|
|
@ -330,7 +330,7 @@ struct ssp_device *ssp_request(int port, const char *label)
|
|||
|
||||
mutex_unlock(&ssp_lock);
|
||||
|
||||
if (ssp->port_id != port)
|
||||
if (&ssp->node == &ssp_list)
|
||||
return NULL;
|
||||
|
||||
return ssp;
|
||||
|
|
|
@ -67,7 +67,7 @@ void __init trap_init(void)
|
|||
CSYNC();
|
||||
}
|
||||
|
||||
void *saved_icplb_fault_addr, *saved_dcplb_fault_addr;
|
||||
unsigned long saved_icplb_fault_addr, saved_dcplb_fault_addr;
|
||||
|
||||
int kstack_depth_to_print = 48;
|
||||
|
||||
|
@ -366,7 +366,7 @@ asmlinkage void trap_c(struct pt_regs *fp)
|
|||
info.si_code = ILL_CPLB_MULHIT;
|
||||
sig = SIGSEGV;
|
||||
#ifdef CONFIG_DEBUG_HUNT_FOR_ZERO
|
||||
if (saved_dcplb_fault_addr < (void *)FIXED_CODE_START)
|
||||
if (saved_dcplb_fault_addr < FIXED_CODE_START)
|
||||
printk(KERN_NOTICE "NULL pointer access\n");
|
||||
else
|
||||
#endif
|
||||
|
@ -421,7 +421,7 @@ asmlinkage void trap_c(struct pt_regs *fp)
|
|||
info.si_code = ILL_CPLB_MULHIT;
|
||||
sig = SIGSEGV;
|
||||
#ifdef CONFIG_DEBUG_HUNT_FOR_ZERO
|
||||
if (saved_icplb_fault_addr < (void *)FIXED_CODE_START)
|
||||
if (saved_icplb_fault_addr < FIXED_CODE_START)
|
||||
printk(KERN_NOTICE "Jump to NULL address\n");
|
||||
else
|
||||
#endif
|
||||
|
@ -939,8 +939,6 @@ void panic_cplb_error(int cplb_panic, struct pt_regs *fp)
|
|||
|
||||
oops_in_progress = 1;
|
||||
|
||||
printk(KERN_EMERG "DCPLB_FAULT_ADDR=%p\n", saved_dcplb_fault_addr);
|
||||
printk(KERN_EMERG "ICPLB_FAULT_ADDR=%p\n", saved_icplb_fault_addr);
|
||||
dump_bfin_process(fp);
|
||||
dump_bfin_mem(fp);
|
||||
show_regs(fp);
|
||||
|
|
|
@ -451,9 +451,6 @@ static struct platform_device net2272_bfin_device = {
|
|||
};
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE)
|
||||
/* all SPI peripherals info goes here */
|
||||
|
||||
#if defined(CONFIG_MTD_M25P80) \
|
||||
|| defined(CONFIG_MTD_M25P80_MODULE)
|
||||
static struct mtd_partition bfin_spi_flash_partitions[] = {
|
||||
|
@ -676,6 +673,7 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = {
|
|||
#endif
|
||||
};
|
||||
|
||||
#if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE)
|
||||
/* SPI controller data */
|
||||
static struct bfin5xx_spi_master bfin_spi0_info = {
|
||||
.num_chipselect = 8,
|
||||
|
@ -1018,10 +1016,7 @@ static int __init stamp_init(void)
|
|||
#endif
|
||||
|
||||
platform_add_devices(stamp_devices, ARRAY_SIZE(stamp_devices));
|
||||
#if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE)
|
||||
spi_register_board_info(bfin_spi_board_info,
|
||||
ARRAY_SIZE(bfin_spi_board_info));
|
||||
#endif
|
||||
spi_register_board_info(bfin_spi_board_info, ARRAY_SIZE(bfin_spi_board_info));
|
||||
|
||||
#if defined(CONFIG_PATA_PLATFORM) || defined(CONFIG_PATA_PLATFORM_MODULE)
|
||||
irq_desc[PATA_INT].status |= IRQ_NOAUTOEN;
|
||||
|
|
|
@ -87,9 +87,6 @@ static struct platform_device smc91x_device = {
|
|||
};
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE)
|
||||
/* all SPI peripherals info goes here */
|
||||
|
||||
#if defined(CONFIG_MTD_M25P80) || defined(CONFIG_MTD_M25P80_MODULE)
|
||||
static struct mtd_partition bfin_spi_flash_partitions[] = {
|
||||
{
|
||||
|
@ -189,6 +186,7 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = {
|
|||
#endif
|
||||
};
|
||||
|
||||
#if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE)
|
||||
/* SPI (0) */
|
||||
static struct resource bfin_spi0_resource[] = {
|
||||
[0] = {
|
||||
|
@ -425,9 +423,7 @@ static int __init ezkit_init(void)
|
|||
{
|
||||
printk(KERN_INFO "%s(): registering device resources\n", __func__);
|
||||
platform_add_devices(ezkit_devices, ARRAY_SIZE(ezkit_devices));
|
||||
#if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE)
|
||||
spi_register_board_info(bfin_spi_board_info, ARRAY_SIZE(bfin_spi_board_info));
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_PATA_PLATFORM) || defined(CONFIG_PATA_PLATFORM_MODULE)
|
||||
irq_desc[PATA_INT].status |= IRQ_NOAUTOEN;
|
||||
|
|
|
@ -161,9 +161,6 @@ static struct platform_device stamp_flash_device = {
|
|||
};
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE)
|
||||
/* all SPI peripherals info goes here */
|
||||
|
||||
#if defined(CONFIG_MTD_M25P80) || defined(CONFIG_MTD_M25P80_MODULE)
|
||||
static struct mtd_partition bfin_spi_flash_partitions[] = {
|
||||
{
|
||||
|
@ -320,6 +317,7 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = {
|
|||
#endif
|
||||
};
|
||||
|
||||
#if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE)
|
||||
/* SPI (0) */
|
||||
static struct resource bfin_spi0_resource[] = {
|
||||
[0] = {
|
||||
|
@ -626,10 +624,8 @@ static int __init stamp_init(void)
|
|||
SSYNC();
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE)
|
||||
spi_register_board_info(bfin_spi_board_info,
|
||||
ARRAY_SIZE(bfin_spi_board_info));
|
||||
#endif
|
||||
spi_register_board_info(bfin_spi_board_info, ARRAY_SIZE(bfin_spi_board_info));
|
||||
|
||||
#if defined(CONFIG_PATA_PLATFORM) || defined(CONFIG_PATA_PLATFORM_MODULE)
|
||||
irq_desc[PATA_INT].status |= IRQ_NOAUTOEN;
|
||||
#endif
|
||||
|
|
|
@ -400,9 +400,6 @@ static struct platform_device stamp_flash_device = {
|
|||
};
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE)
|
||||
/* all SPI peripherals info goes here */
|
||||
|
||||
#if defined(CONFIG_MTD_M25P80) \
|
||||
|| defined(CONFIG_MTD_M25P80_MODULE)
|
||||
static struct mtd_partition bfin_spi_flash_partitions[] = {
|
||||
|
@ -629,6 +626,7 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = {
|
|||
#endif
|
||||
};
|
||||
|
||||
#if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE)
|
||||
/* SPI controller data */
|
||||
static struct bfin5xx_spi_master bfin_spi0_info = {
|
||||
.num_chipselect = 8,
|
||||
|
@ -939,10 +937,7 @@ static int __init stamp_init(void)
|
|||
#endif
|
||||
|
||||
platform_add_devices(stamp_devices, ARRAY_SIZE(stamp_devices));
|
||||
#if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE)
|
||||
spi_register_board_info(bfin_spi_board_info,
|
||||
ARRAY_SIZE(bfin_spi_board_info));
|
||||
#endif
|
||||
spi_register_board_info(bfin_spi_board_info, ARRAY_SIZE(bfin_spi_board_info));
|
||||
|
||||
#if defined(CONFIG_PATA_PLATFORM) || defined(CONFIG_PATA_PLATFORM_MODULE)
|
||||
irq_desc[PATA_INT].status |= IRQ_NOAUTOEN;
|
||||
|
|
|
@ -412,8 +412,6 @@ static struct platform_device ezkit_flash_device = {
|
|||
};
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE)
|
||||
/* all SPI peripherals info goes here */
|
||||
#if defined(CONFIG_MTD_M25P80) \
|
||||
|| defined(CONFIG_MTD_M25P80_MODULE)
|
||||
/* SPI flash chip (m25p16) */
|
||||
|
@ -481,7 +479,7 @@ static struct bfin5xx_spi_chip spidev_chip_info = {
|
|||
};
|
||||
#endif
|
||||
|
||||
static struct spi_board_info bf54x_spi_board_info[] __initdata = {
|
||||
static struct spi_board_info bfin_spi_board_info[] __initdata = {
|
||||
#if defined(CONFIG_MTD_M25P80) \
|
||||
|| defined(CONFIG_MTD_M25P80_MODULE)
|
||||
{
|
||||
|
@ -527,6 +525,7 @@ static struct spi_board_info bf54x_spi_board_info[] __initdata = {
|
|||
#endif
|
||||
};
|
||||
|
||||
#if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE)
|
||||
/* SPI (0) */
|
||||
static struct resource bfin_spi0_resource[] = {
|
||||
[0] = {
|
||||
|
@ -800,10 +799,7 @@ static int __init ezkit_init(void)
|
|||
|
||||
platform_add_devices(ezkit_devices, ARRAY_SIZE(ezkit_devices));
|
||||
|
||||
#if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE)
|
||||
spi_register_board_info(bf54x_spi_board_info,
|
||||
ARRAY_SIZE(bf54x_spi_board_info));
|
||||
#endif
|
||||
spi_register_board_info(bfin_spi_board_info, ARRAY_SIZE(bfin_spi_board_info));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -280,7 +280,6 @@ static struct platform_device ezkit_flash_device = {
|
|||
};
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SPI_BFIN
|
||||
#if defined(CONFIG_SND_BLACKFIN_AD1836) \
|
||||
|| defined(CONFIG_SND_BLACKFIN_AD1836_MODULE)
|
||||
static struct bfin5xx_spi_chip ad1836_spi_chip_info = {
|
||||
|
@ -295,8 +294,8 @@ static struct bfin5xx_spi_chip spidev_chip_info = {
|
|||
.bits_per_word = 8,
|
||||
};
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE)
|
||||
/* SPI (0) */
|
||||
static struct resource bfin_spi0_resource[] = {
|
||||
[0] = {
|
||||
|
@ -327,6 +326,7 @@ static struct platform_device bfin_spi0_device = {
|
|||
.platform_data = &bfin_spi0_info, /* Passed to driver */
|
||||
},
|
||||
};
|
||||
#endif
|
||||
|
||||
static struct spi_board_info bfin_spi_board_info[] __initdata = {
|
||||
#if defined(CONFIG_SND_BLACKFIN_AD1836) \
|
||||
|
@ -537,10 +537,7 @@ static int __init ezkit_init(void)
|
|||
SSYNC();
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE)
|
||||
spi_register_board_info(bfin_spi_board_info,
|
||||
ARRAY_SIZE(bfin_spi_board_info));
|
||||
#endif
|
||||
spi_register_board_info(bfin_spi_board_info, ARRAY_SIZE(bfin_spi_board_info));
|
||||
|
||||
#if defined(CONFIG_PATA_PLATFORM) || defined(CONFIG_PATA_PLATFORM_MODULE)
|
||||
irq_desc[PATA_INT].status |= IRQ_NOAUTOEN;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* cmode.S: clock mode management
|
||||
*
|
||||
* Copyright (C) 2004 Red Hat, Inc. All Rights Reserved.
|
||||
* Written by David Woodhouse (dwmw2@redhat.com)
|
||||
* Written by David Woodhouse (dwmw2@infradead.org)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* sleep.S: power saving mode entry
|
||||
*
|
||||
* Copyright (C) 2004 Red Hat, Inc. All Rights Reserved.
|
||||
* Written by David Woodhouse (dwmw2@redhat.com)
|
||||
* Written by David Woodhouse (dwmw2@infradead.org)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* pci-dma-nommu.c: Dynamic DMA mapping support for the FRV
|
||||
*
|
||||
* Copyright (C) 2004 Red Hat, Inc. All Rights Reserved.
|
||||
* Written by David Woodhouse (dwmw2@redhat.com)
|
||||
* Written by David Woodhouse (dwmw2@infradead.org)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
|
|
@ -465,7 +465,6 @@ void __init acpi_numa_slit_init(struct acpi_table_slit *slit)
|
|||
printk(KERN_ERR
|
||||
"ACPI 2.0 SLIT: size mismatch: %d expected, %d actual\n",
|
||||
len, slit->header.length);
|
||||
memset(numa_slit, 10, sizeof(numa_slit));
|
||||
return;
|
||||
}
|
||||
slit_table = slit;
|
||||
|
@ -574,8 +573,14 @@ void __init acpi_numa_arch_fixup(void)
|
|||
printk(KERN_INFO "Number of memory chunks in system = %d\n",
|
||||
num_node_memblks);
|
||||
|
||||
if (!slit_table)
|
||||
if (!slit_table) {
|
||||
for (i = 0; i < MAX_NUMNODES; i++)
|
||||
for (j = 0; j < MAX_NUMNODES; j++)
|
||||
node_distance(i, j) = i == j ? LOCAL_DISTANCE :
|
||||
REMOTE_DISTANCE;
|
||||
return;
|
||||
}
|
||||
|
||||
memset(numa_slit, -1, sizeof(numa_slit));
|
||||
for (i = 0; i < slit_table->locality_count; i++) {
|
||||
if (!pxm_bit_test(i))
|
||||
|
|
|
@ -159,7 +159,8 @@ static void mmio_access(struct kvm_vcpu *vcpu, u64 src_pa, u64 *dest,
|
|||
|
||||
if (p->u.ioreq.state == STATE_IORESP_READY) {
|
||||
if (dir == IOREQ_READ)
|
||||
*dest = p->u.ioreq.data;
|
||||
/* it's necessary to ensure zero extending */
|
||||
*dest = p->u.ioreq.data & (~0UL >> (64-(s*8)));
|
||||
} else
|
||||
panic_vm(vcpu);
|
||||
out:
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.26-rc2
|
||||
# Sun May 18 14:44:41 2008
|
||||
# Linux kernel version: 2.6.26-rc4
|
||||
# Wed May 28 22:47:35 2008
|
||||
#
|
||||
CONFIG_M68K=y
|
||||
CONFIG_MMU=y
|
||||
|
@ -59,7 +59,7 @@ CONFIG_HOTPLUG=y
|
|||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_ELF_CORE=y
|
||||
# CONFIG_COMPAT_BRK is not set
|
||||
CONFIG_COMPAT_BRK=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_ANON_INODES=y
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.26-rc2
|
||||
# Sun May 18 14:44:42 2008
|
||||
# Linux kernel version: 2.6.26-rc4
|
||||
# Wed May 28 22:47:35 2008
|
||||
#
|
||||
CONFIG_M68K=y
|
||||
CONFIG_MMU=y
|
||||
|
@ -59,7 +59,7 @@ CONFIG_HOTPLUG=y
|
|||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_ELF_CORE=y
|
||||
# CONFIG_COMPAT_BRK is not set
|
||||
CONFIG_COMPAT_BRK=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_ANON_INODES=y
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.26-rc2
|
||||
# Sun May 18 14:44:43 2008
|
||||
# Linux kernel version: 2.6.26-rc4
|
||||
# Wed May 28 22:47:35 2008
|
||||
#
|
||||
CONFIG_M68K=y
|
||||
CONFIG_MMU=y
|
||||
|
@ -59,7 +59,7 @@ CONFIG_HOTPLUG=y
|
|||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_ELF_CORE=y
|
||||
# CONFIG_COMPAT_BRK is not set
|
||||
CONFIG_COMPAT_BRK=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_ANON_INODES=y
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.26-rc2
|
||||
# Sun May 18 14:44:45 2008
|
||||
# Linux kernel version: 2.6.26-rc4
|
||||
# Wed May 28 22:47:35 2008
|
||||
#
|
||||
CONFIG_M68K=y
|
||||
CONFIG_MMU=y
|
||||
|
@ -59,7 +59,7 @@ CONFIG_HOTPLUG=y
|
|||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_ELF_CORE=y
|
||||
# CONFIG_COMPAT_BRK is not set
|
||||
CONFIG_COMPAT_BRK=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_ANON_INODES=y
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.26-rc2
|
||||
# Sun May 18 14:44:46 2008
|
||||
# Linux kernel version: 2.6.26-rc4
|
||||
# Wed May 28 22:47:35 2008
|
||||
#
|
||||
CONFIG_M68K=y
|
||||
CONFIG_MMU=y
|
||||
|
@ -59,7 +59,7 @@ CONFIG_HOTPLUG=y
|
|||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_ELF_CORE=y
|
||||
# CONFIG_COMPAT_BRK is not set
|
||||
CONFIG_COMPAT_BRK=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_ANON_INODES=y
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.26-rc2
|
||||
# Sun May 18 14:44:47 2008
|
||||
# Linux kernel version: 2.6.26-rc4
|
||||
# Wed May 28 22:47:35 2008
|
||||
#
|
||||
CONFIG_M68K=y
|
||||
CONFIG_MMU=y
|
||||
|
@ -59,7 +59,7 @@ CONFIG_HOTPLUG=y
|
|||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_ELF_CORE=y
|
||||
# CONFIG_COMPAT_BRK is not set
|
||||
CONFIG_COMPAT_BRK=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_ANON_INODES=y
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.26-rc2
|
||||
# Sun May 18 14:42:31 2008
|
||||
# Linux kernel version: 2.6.26-rc4
|
||||
# Wed May 28 22:47:35 2008
|
||||
#
|
||||
CONFIG_M68K=y
|
||||
CONFIG_MMU=y
|
||||
|
@ -59,7 +59,7 @@ CONFIG_HOTPLUG=y
|
|||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_ELF_CORE=y
|
||||
# CONFIG_COMPAT_BRK is not set
|
||||
CONFIG_COMPAT_BRK=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_ANON_INODES=y
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.26-rc2
|
||||
# Sun May 18 14:44:49 2008
|
||||
# Linux kernel version: 2.6.26-rc4
|
||||
# Wed May 28 22:47:35 2008
|
||||
#
|
||||
CONFIG_M68K=y
|
||||
CONFIG_MMU=y
|
||||
|
@ -59,7 +59,7 @@ CONFIG_HOTPLUG=y
|
|||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_ELF_CORE=y
|
||||
# CONFIG_COMPAT_BRK is not set
|
||||
CONFIG_COMPAT_BRK=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_ANON_INODES=y
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.26-rc2
|
||||
# Sun May 18 14:44:50 2008
|
||||
# Linux kernel version: 2.6.26-rc4
|
||||
# Wed May 28 22:47:35 2008
|
||||
#
|
||||
CONFIG_M68K=y
|
||||
CONFIG_MMU=y
|
||||
|
@ -59,7 +59,7 @@ CONFIG_HOTPLUG=y
|
|||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_ELF_CORE=y
|
||||
# CONFIG_COMPAT_BRK is not set
|
||||
CONFIG_COMPAT_BRK=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_ANON_INODES=y
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.26-rc2
|
||||
# Sun May 18 14:44:51 2008
|
||||
# Linux kernel version: 2.6.26-rc4
|
||||
# Wed May 28 22:47:35 2008
|
||||
#
|
||||
CONFIG_M68K=y
|
||||
CONFIG_MMU=y
|
||||
|
@ -59,7 +59,7 @@ CONFIG_HOTPLUG=y
|
|||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_ELF_CORE=y
|
||||
# CONFIG_COMPAT_BRK is not set
|
||||
CONFIG_COMPAT_BRK=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_ANON_INODES=y
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.26-rc2
|
||||
# Sun May 18 14:44:53 2008
|
||||
# Linux kernel version: 2.6.26-rc4
|
||||
# Wed May 28 22:47:35 2008
|
||||
#
|
||||
CONFIG_M68K=y
|
||||
CONFIG_MMU=y
|
||||
|
@ -59,7 +59,7 @@ CONFIG_HOTPLUG=y
|
|||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_ELF_CORE=y
|
||||
# CONFIG_COMPAT_BRK is not set
|
||||
CONFIG_COMPAT_BRK=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_ANON_INODES=y
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.26-rc2
|
||||
# Sun May 18 14:44:54 2008
|
||||
# Linux kernel version: 2.6.26-rc4
|
||||
# Wed May 28 22:47:35 2008
|
||||
#
|
||||
CONFIG_M68K=y
|
||||
CONFIG_MMU=y
|
||||
|
@ -59,7 +59,7 @@ CONFIG_HOTPLUG=y
|
|||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_ELF_CORE=y
|
||||
# CONFIG_COMPAT_BRK is not set
|
||||
CONFIG_COMPAT_BRK=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_ANON_INODES=y
|
||||
|
|
|
@ -111,7 +111,13 @@ void hw_timer_init(void)
|
|||
|
||||
__raw_writew(MCFTIMER_TMR_DISABLE, TA(MCFTIMER_TMR));
|
||||
mcftmr_cycles_per_jiffy = FREQ / HZ;
|
||||
__raw_writetrr(mcftmr_cycles_per_jiffy, TA(MCFTIMER_TRR));
|
||||
/*
|
||||
* The coldfire timer runs from 0 to TRR included, then 0
|
||||
* again and so on. It counts thus actually TRR + 1 steps
|
||||
* for 1 tick, not TRR. So if you want n cycles,
|
||||
* initialize TRR with n - 1.
|
||||
*/
|
||||
__raw_writetrr(mcftmr_cycles_per_jiffy - 1, TA(MCFTIMER_TRR));
|
||||
__raw_writew(MCFTIMER_TMR_ENORI | MCFTIMER_TMR_CLK16 |
|
||||
MCFTIMER_TMR_RESTART | MCFTIMER_TMR_ENABLE, TA(MCFTIMER_TMR));
|
||||
|
||||
|
|
|
@ -13,10 +13,9 @@
|
|||
#include <asm/unistd.h>
|
||||
#include <asm/errno.h>
|
||||
#include <linux/linkage.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
.level LEVEL
|
||||
__HEAD
|
||||
.text
|
||||
|
||||
.import hpux_call_table
|
||||
.import hpux_syscall_exit,code
|
||||
|
|
|
@ -28,10 +28,9 @@
|
|||
#include <asm/assembly.h>
|
||||
#include <asm/signal.h>
|
||||
#include <linux/linkage.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
.level LEVEL
|
||||
__HEAD
|
||||
.text
|
||||
|
||||
/* These should probably go in a header file somewhere.
|
||||
* They are duplicated in kernel/wrappers.S
|
||||
|
|
|
@ -38,7 +38,6 @@
|
|||
#include <asm/thread_info.h>
|
||||
|
||||
#include <linux/linkage.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
#ifdef CONFIG_64BIT
|
||||
.level 2.0w
|
||||
|
@ -622,7 +621,7 @@
|
|||
* the static part of the kernel address space.
|
||||
*/
|
||||
|
||||
__HEAD
|
||||
.text
|
||||
|
||||
.align PAGE_SIZE
|
||||
|
||||
|
|
|
@ -33,6 +33,7 @@ ENTRY(boot_args)
|
|||
END(boot_args)
|
||||
|
||||
__HEAD
|
||||
|
||||
.align 4
|
||||
.import init_thread_union,data
|
||||
.import fault_vector_20,code /* IVA parisc 2.0 32 bit */
|
||||
|
|
|
@ -47,7 +47,6 @@
|
|||
#include <asm/pdc.h>
|
||||
|
||||
#include <linux/linkage.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
/*
|
||||
* stack for os_hpmc, the HPMC handler.
|
||||
|
@ -77,7 +76,7 @@ ENTRY(hpmc_pim_data)
|
|||
.block HPMC_PIM_DATA_SIZE
|
||||
END(hpmc_pim_data)
|
||||
|
||||
__HEAD
|
||||
.text
|
||||
|
||||
.import intr_save, code
|
||||
ENTRY(os_hpmc)
|
||||
|
|
|
@ -37,9 +37,8 @@
|
|||
#include <asm/pgtable.h>
|
||||
#include <asm/cache.h>
|
||||
#include <linux/linkage.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
__HEAD
|
||||
.text
|
||||
.align 128
|
||||
|
||||
ENTRY(flush_tlb_all_local)
|
||||
|
|
|
@ -152,3 +152,6 @@ EXPORT_SYMBOL($$dyncall);
|
|||
EXPORT_SYMBOL(node_data);
|
||||
EXPORT_SYMBOL(pfnnid_map);
|
||||
#endif
|
||||
|
||||
/* from pacache.S -- needed for copy_page */
|
||||
EXPORT_SYMBOL(copy_user_page_asm);
|
||||
|
|
|
@ -43,7 +43,7 @@
|
|||
; The coprocessor only needs to be enabled when
|
||||
; starting/stopping the coprocessor with the pmenb/pmdis.
|
||||
;
|
||||
__HEAD
|
||||
.text
|
||||
|
||||
ENTRY(perf_intrigue_enable_perf_counters)
|
||||
.proc
|
||||
|
|
|
@ -12,7 +12,6 @@
|
|||
#include <asm/assembly.h>
|
||||
|
||||
#include <linux/linkage.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
.section .bss
|
||||
.export real_stack
|
||||
|
@ -40,7 +39,7 @@ save_cr_end:
|
|||
/************************ 32-bit real-mode calls ***********************/
|
||||
/* This can be called in both narrow and wide kernels */
|
||||
|
||||
__HEAD
|
||||
.text
|
||||
|
||||
/* unsigned long real32_call_asm(unsigned int *sp,
|
||||
* unsigned int *arg0p,
|
||||
|
@ -114,7 +113,7 @@ ENDPROC(real32_call_asm)
|
|||
# define PUSH_CR(r, where) mfctl r, %r1 ! STREG,ma %r1, REG_SZ(where)
|
||||
# define POP_CR(r, where) LDREG,mb -REG_SZ(where), %r1 ! mtctl %r1, r
|
||||
|
||||
__HEAD
|
||||
.text
|
||||
save_control_regs:
|
||||
load32 PA(save_cr_space), %r28
|
||||
PUSH_CR(%cr24, %r28)
|
||||
|
@ -146,7 +145,7 @@ restore_control_regs:
|
|||
/* rfi_virt2real() and rfi_real2virt() could perhaps be adapted for
|
||||
* more general-purpose use by the several places which need RFIs
|
||||
*/
|
||||
__HEAD
|
||||
.text
|
||||
.align 128
|
||||
rfi_virt2real:
|
||||
/* switch to real mode... */
|
||||
|
@ -181,7 +180,7 @@ rfi_v2r_1:
|
|||
bv 0(%r2)
|
||||
nop
|
||||
|
||||
__HEAD
|
||||
.text
|
||||
.align 128
|
||||
rfi_real2virt:
|
||||
rsm PSW_SM_I,%r0
|
||||
|
@ -219,7 +218,7 @@ rfi_r2v_1:
|
|||
|
||||
/************************ 64-bit real-mode calls ***********************/
|
||||
/* This is only usable in wide kernels right now and will probably stay so */
|
||||
__HEAD
|
||||
.text
|
||||
/* unsigned long real64_call_asm(unsigned long *sp,
|
||||
* unsigned long *arg0p,
|
||||
* unsigned long fn)
|
||||
|
@ -277,7 +276,7 @@ ENDPROC(real64_call_asm)
|
|||
|
||||
#endif
|
||||
|
||||
__HEAD
|
||||
.text
|
||||
/* http://lists.parisc-linux.org/hypermail/parisc-linux/10916.html
|
||||
** GCC 3.3 and later has a new function in libgcc.a for
|
||||
** comparing function pointers.
|
||||
|
|
|
@ -289,7 +289,7 @@ setup_sigcontext32(struct compat_sigcontext __user *sc, struct compat_regfile __
|
|||
&sc->sc_iaoq[0], compat_reg);
|
||||
|
||||
/* Store upper half */
|
||||
compat_reg = (compat_uint_t)(regs->gr[32] >> 32);
|
||||
compat_reg = (compat_uint_t)(regs->gr[31] >> 32);
|
||||
err |= __put_user(compat_reg, &rf->rf_iaoq[0]);
|
||||
DBG(2,"setup_sigcontext32: upper half iaoq[0] = %#x\n", compat_reg);
|
||||
|
||||
|
@ -299,7 +299,7 @@ setup_sigcontext32(struct compat_sigcontext __user *sc, struct compat_regfile __
|
|||
DBG(2,"setup_sigcontext32: sc->sc_iaoq[1] = %p <= %#x\n",
|
||||
&sc->sc_iaoq[1], compat_reg);
|
||||
/* Store upper half */
|
||||
compat_reg = (compat_uint_t)((regs->gr[32]+4) >> 32);
|
||||
compat_reg = (compat_uint_t)((regs->gr[31]+4) >> 32);
|
||||
err |= __put_user(compat_reg, &rf->rf_iaoq[1]);
|
||||
DBG(2,"setup_sigcontext32: upper half iaoq[1] = %#x\n", compat_reg);
|
||||
|
||||
|
|
|
@ -17,7 +17,6 @@
|
|||
#include <asm/processor.h>
|
||||
|
||||
#include <linux/linkage.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
/* We fill the empty parts of the gateway page with
|
||||
* something that will kill the kernel or a
|
||||
|
@ -27,7 +26,7 @@
|
|||
|
||||
.level LEVEL
|
||||
|
||||
__HEAD
|
||||
.text
|
||||
|
||||
.import syscall_exit,code
|
||||
.import syscall_exit_rfi,code
|
||||
|
@ -637,7 +636,7 @@ END(sys_call_table64)
|
|||
All light-weight-syscall atomic operations
|
||||
will use this set of locks
|
||||
*/
|
||||
.section .data, "aw"
|
||||
.section .data
|
||||
.align PAGE_SIZE
|
||||
ENTRY(lws_lock_start)
|
||||
/* lws locks */
|
||||
|
|
|
@ -50,6 +50,7 @@ SECTIONS
|
|||
|
||||
_text = .; /* Text and read-only data */
|
||||
.text ALIGN(16) : {
|
||||
HEAD_TEXT
|
||||
TEXT_TEXT
|
||||
SCHED_TEXT
|
||||
LOCK_TEXT
|
||||
|
|
|
@ -23,7 +23,6 @@
|
|||
#include <asm/assembly.h>
|
||||
#include <asm/errno.h>
|
||||
#include <linux/linkage.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
.macro get_fault_ip t1 t2
|
||||
|
@ -56,7 +55,7 @@
|
|||
|
||||
.level LEVEL
|
||||
|
||||
__HEAD
|
||||
.text
|
||||
.section .fixup, "ax"
|
||||
|
||||
/* get_user() fixups, store -EFAULT in r8, and 0 in r9 */
|
||||
|
|
|
@ -33,12 +33,11 @@
|
|||
*/
|
||||
|
||||
|
||||
.text
|
||||
|
||||
#include <asm/assembly.h>
|
||||
#include <asm/errno.h>
|
||||
#include <linux/linkage.h>
|
||||
#include <linux/init.h>
|
||||
|
||||
__HEAD
|
||||
|
||||
/*
|
||||
* get_sr gets the appropriate space value into
|
||||
|
|
|
@ -547,6 +547,7 @@ void __init mem_init(void)
|
|||
}
|
||||
|
||||
unsigned long *empty_zero_page __read_mostly;
|
||||
EXPORT_SYMBOL(empty_zero_page);
|
||||
|
||||
void show_mem(void)
|
||||
{
|
||||
|
|
|
@ -221,8 +221,8 @@ image-$(CONFIG_WARP) += cuImage.warp
|
|||
image-$(CONFIG_YOSEMITE) += cuImage.yosemite
|
||||
|
||||
# Board ports in arch/powerpc/platform/8xx/Kconfig
|
||||
image-$(CONFIG_PPC_MPC86XADS) += cuImage.mpc866ads
|
||||
image-$(CONFIG_PPC_MPC885ADS) += cuImage.mpc885ads
|
||||
image-$(CONFIG_MPC86XADS) += cuImage.mpc866ads
|
||||
image-$(CONFIG_MPC885ADS) += cuImage.mpc885ads
|
||||
image-$(CONFIG_PPC_EP88XC) += dtbImage.ep88xc
|
||||
image-$(CONFIG_PPC_ADDER875) += cuImage.adder875-uboot \
|
||||
dtbImage.adder875-redboot
|
||||
|
|
|
@ -189,7 +189,7 @@ struct pci_dev *of_create_pci_dev(struct device_node *node,
|
|||
|
||||
dev->cfg_size = pci_cfg_space_size(dev);
|
||||
|
||||
sprintf(pci_name(dev), "%04x:%02x:%02x.%d", pci_domain_nr(bus),
|
||||
dev_set_name(&dev->dev, "%04x:%02x:%02x.%d", pci_domain_nr(bus),
|
||||
dev->bus->number, PCI_SLOT(devfn), PCI_FUNC(devfn));
|
||||
dev->class = get_int_prop(node, "class-code", 0);
|
||||
dev->revision = get_int_prop(node, "revision-id", 0);
|
||||
|
|
|
@ -87,6 +87,7 @@ static long setup_sigcontext(struct sigcontext __user *sc, struct pt_regs *regs,
|
|||
#ifdef CONFIG_ALTIVEC
|
||||
elf_vrreg_t __user *v_regs = (elf_vrreg_t __user *)(((unsigned long)sc->vmx_reserve + 15) & ~0xful);
|
||||
#endif
|
||||
unsigned long msr = regs->msr;
|
||||
long err = 0;
|
||||
|
||||
flush_fp_to_thread(current);
|
||||
|
@ -102,7 +103,7 @@ static long setup_sigcontext(struct sigcontext __user *sc, struct pt_regs *regs,
|
|||
/* set MSR_VEC in the MSR value in the frame to indicate that sc->v_reg)
|
||||
* contains valid data.
|
||||
*/
|
||||
regs->msr |= MSR_VEC;
|
||||
msr |= MSR_VEC;
|
||||
}
|
||||
/* We always copy to/from vrsave, it's 0 if we don't have or don't
|
||||
* use altivec.
|
||||
|
@ -114,6 +115,7 @@ static long setup_sigcontext(struct sigcontext __user *sc, struct pt_regs *regs,
|
|||
err |= __put_user(&sc->gp_regs, &sc->regs);
|
||||
WARN_ON(!FULL_REGS(regs));
|
||||
err |= __copy_to_user(&sc->gp_regs, regs, GP_REGS_SIZE);
|
||||
err |= __put_user(msr, &sc->gp_regs[PT_MSR]);
|
||||
err |= __copy_to_user(&sc->fp_regs, ¤t->thread.fpr, FP_REGS_SIZE);
|
||||
err |= __put_user(signr, &sc->signal);
|
||||
err |= __put_user(handler, &sc->handler);
|
||||
|
|
|
@ -116,8 +116,6 @@ static void kvmppc_44x_shadow_release(struct kvm_vcpu *vcpu,
|
|||
struct tlbe *stlbe = &vcpu->arch.shadow_tlb[index];
|
||||
struct page *page = vcpu->arch.shadow_pages[index];
|
||||
|
||||
kunmap(vcpu->arch.shadow_pages[index]);
|
||||
|
||||
if (get_tlb_v(stlbe)) {
|
||||
if (kvmppc_44x_tlbe_is_writable(stlbe))
|
||||
kvm_release_page_dirty(page);
|
||||
|
@ -144,18 +142,19 @@ void kvmppc_mmu_map(struct kvm_vcpu *vcpu, u64 gvaddr, gfn_t gfn, u64 asid,
|
|||
stlbe = &vcpu->arch.shadow_tlb[victim];
|
||||
|
||||
/* Get reference to new page. */
|
||||
down_write(¤t->mm->mmap_sem);
|
||||
down_read(¤t->mm->mmap_sem);
|
||||
new_page = gfn_to_page(vcpu->kvm, gfn);
|
||||
if (is_error_page(new_page)) {
|
||||
printk(KERN_ERR "Couldn't get guest page!\n");
|
||||
printk(KERN_ERR "Couldn't get guest page for gfn %lx!\n", gfn);
|
||||
kvm_release_page_clean(new_page);
|
||||
up_read(¤t->mm->mmap_sem);
|
||||
return;
|
||||
}
|
||||
hpaddr = page_to_phys(new_page);
|
||||
|
||||
/* Drop reference to old page. */
|
||||
kvmppc_44x_shadow_release(vcpu, victim);
|
||||
up_write(¤t->mm->mmap_sem);
|
||||
up_read(¤t->mm->mmap_sem);
|
||||
|
||||
vcpu->arch.shadow_pages[victim] = new_page;
|
||||
|
||||
|
|
|
@ -227,39 +227,6 @@ void kvmppc_check_and_deliver_interrupts(struct kvm_vcpu *vcpu)
|
|||
}
|
||||
}
|
||||
|
||||
static int kvmppc_emulate_mmio(struct kvm_run *run, struct kvm_vcpu *vcpu)
|
||||
{
|
||||
enum emulation_result er;
|
||||
int r;
|
||||
|
||||
er = kvmppc_emulate_instruction(run, vcpu);
|
||||
switch (er) {
|
||||
case EMULATE_DONE:
|
||||
/* Future optimization: only reload non-volatiles if they were
|
||||
* actually modified. */
|
||||
r = RESUME_GUEST_NV;
|
||||
break;
|
||||
case EMULATE_DO_MMIO:
|
||||
run->exit_reason = KVM_EXIT_MMIO;
|
||||
/* We must reload nonvolatiles because "update" load/store
|
||||
* instructions modify register state. */
|
||||
/* Future optimization: only reload non-volatiles if they were
|
||||
* actually modified. */
|
||||
r = RESUME_HOST_NV;
|
||||
break;
|
||||
case EMULATE_FAIL:
|
||||
/* XXX Deliver Program interrupt to guest. */
|
||||
printk(KERN_EMERG "%s: emulation failed (%08x)\n", __func__,
|
||||
vcpu->arch.last_inst);
|
||||
r = RESUME_HOST;
|
||||
break;
|
||||
default:
|
||||
BUG();
|
||||
}
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
/**
|
||||
* kvmppc_handle_exit
|
||||
*
|
||||
|
|
|
@ -246,6 +246,11 @@ int kvmppc_emulate_instruction(struct kvm_run *run, struct kvm_vcpu *vcpu)
|
|||
case 31:
|
||||
switch (get_xop(inst)) {
|
||||
|
||||
case 23: /* lwzx */
|
||||
rt = get_rt(inst);
|
||||
emulated = kvmppc_handle_load(run, vcpu, rt, 4, 1);
|
||||
break;
|
||||
|
||||
case 83: /* mfmsr */
|
||||
rt = get_rt(inst);
|
||||
vcpu->arch.gpr[rt] = vcpu->arch.msr;
|
||||
|
@ -267,6 +272,13 @@ int kvmppc_emulate_instruction(struct kvm_run *run, struct kvm_vcpu *vcpu)
|
|||
kvmppc_set_msr(vcpu, vcpu->arch.gpr[rs]);
|
||||
break;
|
||||
|
||||
case 151: /* stwx */
|
||||
rs = get_rs(inst);
|
||||
emulated = kvmppc_handle_store(run, vcpu,
|
||||
vcpu->arch.gpr[rs],
|
||||
4, 1);
|
||||
break;
|
||||
|
||||
case 163: /* wrteei */
|
||||
vcpu->arch.msr = (vcpu->arch.msr & ~MSR_EE)
|
||||
| (inst & MSR_EE);
|
||||
|
|
|
@ -151,6 +151,7 @@ out:
|
|||
return ret;
|
||||
}
|
||||
#endif /* CONFIG_MEMORY_HOTREMOVE */
|
||||
#endif /* CONFIG_MEMORY_HOTPLUG */
|
||||
|
||||
/*
|
||||
* walk_memory_resource() needs to make sure there is no holes in a given
|
||||
|
@ -184,8 +185,6 @@ walk_memory_resource(unsigned long start_pfn, unsigned long nr_pages, void *arg,
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(walk_memory_resource);
|
||||
|
||||
#endif /* CONFIG_MEMORY_HOTPLUG */
|
||||
|
||||
void show_mem(void)
|
||||
{
|
||||
unsigned long total = 0, reserved = 0;
|
||||
|
|
|
@ -432,7 +432,7 @@ static struct i2c_driver_device i2c_devices[] __initdata = {
|
|||
{"dallas,ds1339", "ds1339"},
|
||||
{"dallas,ds1340", "ds1340"},
|
||||
{"stm,m41t00", "m41t00"},
|
||||
{"dallas,ds1374", "rtc-ds1374"},
|
||||
{"dallas,ds1374", "ds1374"},
|
||||
};
|
||||
|
||||
static int __init of_find_i2c_driver(struct device_node *node,
|
||||
|
|
|
@ -304,6 +304,7 @@ config ARCH_SPARSEMEM_ENABLE
|
|||
def_bool y
|
||||
select SPARSEMEM_VMEMMAP_ENABLE
|
||||
select SPARSEMEM_VMEMMAP
|
||||
select SPARSEMEM_STATIC if !64BIT
|
||||
|
||||
config ARCH_SPARSEMEM_DEFAULT
|
||||
def_bool y
|
||||
|
|
|
@ -711,7 +711,7 @@ int __cpuinit __cpu_up(unsigned int cpu)
|
|||
memset(sf, 0, sizeof(struct stack_frame));
|
||||
sf->gprs[9] = (unsigned long) sf;
|
||||
cpu_lowcore->save_area[15] = (unsigned long) sf;
|
||||
__ctl_store(cpu_lowcore->cregs_save_area[0], 0, 15);
|
||||
__ctl_store(cpu_lowcore->cregs_save_area, 0, 15);
|
||||
asm volatile(
|
||||
" stam 0,15,0(%0)"
|
||||
: : "a" (&cpu_lowcore->access_regs_save_area) : "memory");
|
||||
|
|
|
@ -20,7 +20,7 @@ static int __diag_time_slice_end(struct kvm_vcpu *vcpu)
|
|||
VCPU_EVENT(vcpu, 5, "%s", "diag time slice end");
|
||||
vcpu->stat.diagnose_44++;
|
||||
vcpu_put(vcpu);
|
||||
schedule();
|
||||
yield();
|
||||
vcpu_load(vcpu);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -339,6 +339,11 @@ int kvm_s390_handle_wait(struct kvm_vcpu *vcpu)
|
|||
if (kvm_cpu_has_interrupt(vcpu))
|
||||
return 0;
|
||||
|
||||
__set_cpu_idle(vcpu);
|
||||
spin_lock_bh(&vcpu->arch.local_int.lock);
|
||||
vcpu->arch.local_int.timer_due = 0;
|
||||
spin_unlock_bh(&vcpu->arch.local_int.lock);
|
||||
|
||||
if (psw_interrupts_disabled(vcpu)) {
|
||||
VCPU_EVENT(vcpu, 3, "%s", "disabled wait");
|
||||
__unset_cpu_idle(vcpu);
|
||||
|
@ -366,8 +371,6 @@ int kvm_s390_handle_wait(struct kvm_vcpu *vcpu)
|
|||
no_timer:
|
||||
spin_lock_bh(&vcpu->arch.local_int.float_int->lock);
|
||||
spin_lock_bh(&vcpu->arch.local_int.lock);
|
||||
__set_cpu_idle(vcpu);
|
||||
vcpu->arch.local_int.timer_due = 0;
|
||||
add_wait_queue(&vcpu->arch.local_int.wq, &wait);
|
||||
while (list_empty(&vcpu->arch.local_int.list) &&
|
||||
list_empty(&vcpu->arch.local_int.float_int->list) &&
|
||||
|
|
|
@ -423,6 +423,8 @@ int kvm_arch_vcpu_ioctl_set_mpstate(struct kvm_vcpu *vcpu,
|
|||
return -EINVAL; /* not implemented yet */
|
||||
}
|
||||
|
||||
extern void s390_handle_mcck(void);
|
||||
|
||||
static void __vcpu_run(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
memcpy(&vcpu->arch.sie_block->gg14, &vcpu->arch.guest_gprs[14], 16);
|
||||
|
@ -430,13 +432,21 @@ static void __vcpu_run(struct kvm_vcpu *vcpu)
|
|||
if (need_resched())
|
||||
schedule();
|
||||
|
||||
if (test_thread_flag(TIF_MCCK_PENDING))
|
||||
s390_handle_mcck();
|
||||
|
||||
kvm_s390_deliver_pending_interrupts(vcpu);
|
||||
|
||||
vcpu->arch.sie_block->icptcode = 0;
|
||||
local_irq_disable();
|
||||
kvm_guest_enter();
|
||||
local_irq_enable();
|
||||
VCPU_EVENT(vcpu, 6, "entering sie flags %x",
|
||||
atomic_read(&vcpu->arch.sie_block->cpuflags));
|
||||
sie64a(vcpu->arch.sie_block, vcpu->arch.guest_gprs);
|
||||
if (sie64a(vcpu->arch.sie_block, vcpu->arch.guest_gprs)) {
|
||||
VCPU_EVENT(vcpu, 3, "%s", "fault in sie instruction");
|
||||
kvm_s390_inject_program_int(vcpu, PGM_ADDRESSING);
|
||||
}
|
||||
VCPU_EVENT(vcpu, 6, "exit sie icptcode %d",
|
||||
vcpu->arch.sie_block->icptcode);
|
||||
local_irq_disable();
|
||||
|
@ -475,7 +485,6 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
|
|||
might_sleep();
|
||||
|
||||
do {
|
||||
kvm_s390_deliver_pending_interrupts(vcpu);
|
||||
__vcpu_run(vcpu);
|
||||
rc = kvm_handle_sie_intercept(vcpu);
|
||||
} while (!signal_pending(current) && !rc);
|
||||
|
|
|
@ -254,36 +254,46 @@ void disable_noexec(struct mm_struct *mm, struct task_struct *tsk)
|
|||
int s390_enable_sie(void)
|
||||
{
|
||||
struct task_struct *tsk = current;
|
||||
struct mm_struct *mm;
|
||||
int rc;
|
||||
struct mm_struct *mm, *old_mm;
|
||||
|
||||
task_lock(tsk);
|
||||
|
||||
rc = 0;
|
||||
/* Do we have pgstes? if yes, we are done */
|
||||
if (tsk->mm->context.pgstes)
|
||||
goto unlock;
|
||||
return 0;
|
||||
|
||||
rc = -EINVAL;
|
||||
/* lets check if we are allowed to replace the mm */
|
||||
task_lock(tsk);
|
||||
if (!tsk->mm || atomic_read(&tsk->mm->mm_users) > 1 ||
|
||||
tsk->mm != tsk->active_mm || tsk->mm->ioctx_list)
|
||||
goto unlock;
|
||||
tsk->mm != tsk->active_mm || tsk->mm->ioctx_list) {
|
||||
task_unlock(tsk);
|
||||
return -EINVAL;
|
||||
}
|
||||
task_unlock(tsk);
|
||||
|
||||
tsk->mm->context.pgstes = 1; /* dirty little tricks .. */
|
||||
/* we copy the mm with pgstes enabled */
|
||||
tsk->mm->context.pgstes = 1;
|
||||
mm = dup_mm(tsk);
|
||||
tsk->mm->context.pgstes = 0;
|
||||
|
||||
rc = -ENOMEM;
|
||||
if (!mm)
|
||||
goto unlock;
|
||||
mmput(tsk->mm);
|
||||
return -ENOMEM;
|
||||
|
||||
/* Now lets check again if somebody attached ptrace etc */
|
||||
task_lock(tsk);
|
||||
if (!tsk->mm || atomic_read(&tsk->mm->mm_users) > 1 ||
|
||||
tsk->mm != tsk->active_mm || tsk->mm->ioctx_list) {
|
||||
mmput(mm);
|
||||
task_unlock(tsk);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* ok, we are alone. No ptrace, no threads, etc. */
|
||||
old_mm = tsk->mm;
|
||||
tsk->mm = tsk->active_mm = mm;
|
||||
preempt_disable();
|
||||
update_mm(mm, tsk);
|
||||
cpu_set(smp_processor_id(), mm->cpu_vm_mask);
|
||||
preempt_enable();
|
||||
rc = 0;
|
||||
unlock:
|
||||
task_unlock(tsk);
|
||||
return rc;
|
||||
mmput(old_mm);
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(s390_enable_sie);
|
||||
|
|
|
@ -236,7 +236,7 @@ static int insert_memory_segment(struct memory_segment *seg)
|
|||
{
|
||||
struct memory_segment *tmp;
|
||||
|
||||
if (seg->start + seg->size >= VMEM_MAX_PHYS ||
|
||||
if (seg->start + seg->size > VMEM_MAX_PHYS ||
|
||||
seg->start + seg->size < seg->start)
|
||||
return -ERANGE;
|
||||
|
||||
|
|
|
@ -41,6 +41,8 @@ cflags-$(CONFIG_CPU_SH5) := $(call cc-option,-m5-32media-nofpu,)
|
|||
cflags-$(CONFIG_CPU_BIG_ENDIAN) += -mb
|
||||
cflags-$(CONFIG_CPU_LITTLE_ENDIAN) += -ml
|
||||
|
||||
cflags-y += $(call cc-option,-mno-fdpic)
|
||||
|
||||
#
|
||||
# -Wa,-isa= tuning implies -Wa,-dsp for the versions of binutils that
|
||||
# support it, while -Wa,-dsp by itself limits the range of usable opcodes
|
||||
|
|
|
@ -16,6 +16,21 @@
|
|||
|
||||
static struct plat_sci_port sci_platform_data[] = {
|
||||
{
|
||||
.mapbase = 0xffe00000,
|
||||
.flags = UPF_BOOT_AUTOCONF,
|
||||
.type = PORT_SCIF,
|
||||
.irqs = { 80, 80, 80, 80 },
|
||||
},{
|
||||
.mapbase = 0xffe10000,
|
||||
.flags = UPF_BOOT_AUTOCONF,
|
||||
.type = PORT_SCIF,
|
||||
.irqs = { 81, 81, 81, 81 },
|
||||
},{
|
||||
.mapbase = 0xffe20000,
|
||||
.flags = UPF_BOOT_AUTOCONF,
|
||||
.type = PORT_SCIF,
|
||||
.irqs = { 82, 82, 82, 82 },
|
||||
},{
|
||||
.mapbase = 0xa4e30000,
|
||||
.flags = UPF_BOOT_AUTOCONF,
|
||||
.type = PORT_SCI,
|
||||
|
@ -73,9 +88,35 @@ static struct platform_device rtc_device = {
|
|||
.resource = rtc_resources,
|
||||
};
|
||||
|
||||
static struct resource sh7723_usb_host_resources[] = {
|
||||
[0] = {
|
||||
.name = "r8a66597_hcd",
|
||||
.start = 0xa4d80000,
|
||||
.end = 0xa4d800ff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
.start = 65,
|
||||
.end = 65,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device sh7723_usb_host_device = {
|
||||
.name = "r8a66597_hcd",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.dma_mask = NULL, /* not use dma */
|
||||
.coherent_dma_mask = 0xffffffff,
|
||||
},
|
||||
.num_resources = ARRAY_SIZE(sh7723_usb_host_resources),
|
||||
.resource = sh7723_usb_host_resources,
|
||||
};
|
||||
|
||||
static struct platform_device *sh7723_devices[] __initdata = {
|
||||
&sci_device,
|
||||
&rtc_device,
|
||||
&sh7723_usb_host_device,
|
||||
};
|
||||
|
||||
static int __init sh7723_devices_setup(void)
|
||||
|
|
|
@ -291,9 +291,10 @@ static struct intc_sense_reg irq_sense_registers[] __initdata = {
|
|||
};
|
||||
|
||||
static DECLARE_INTC_DESC(intc_irq_desc, "sh7763-irq", irq_vectors,
|
||||
NULL, NULL, irq_mask_registers, irq_prio_registers,
|
||||
NULL, irq_mask_registers, irq_prio_registers,
|
||||
irq_sense_registers);
|
||||
|
||||
|
||||
/* External interrupt pins in IRL mode */
|
||||
static struct intc_vect irl_vectors[] __initdata = {
|
||||
INTC_VECT(IRL_LLLL, 0x200), INTC_VECT(IRL_LLLH, 0x220),
|
||||
|
@ -324,10 +325,10 @@ static struct intc_mask_reg irl7654_mask_registers[] __initdata = {
|
|||
};
|
||||
|
||||
static DECLARE_INTC_DESC(intc_irl7654_desc, "sh7763-irl7654", irl_vectors,
|
||||
NULL, NULL, irl7654_mask_registers, NULL, NULL);
|
||||
NULL, irl7654_mask_registers, NULL, NULL);
|
||||
|
||||
static DECLARE_INTC_DESC(intc_irl3210_desc, "sh7763-irl3210", irl_vectors,
|
||||
NULL, NULL, irl3210_mask_registers, NULL, NULL);
|
||||
NULL, irl3210_mask_registers, NULL, NULL);
|
||||
|
||||
#define INTC_ICR0 0xffd00000
|
||||
#define INTC_INTMSK0 0xffd00044
|
||||
|
|
|
@ -49,7 +49,6 @@
|
|||
#include "irq_user.h"
|
||||
#include "irq_kern.h"
|
||||
#include "ubd_user.h"
|
||||
#include "kern_util.h"
|
||||
#include "os.h"
|
||||
#include "mem.h"
|
||||
#include "mem_kern.h"
|
||||
|
|
|
@ -299,6 +299,6 @@ extern int os_arch_prctl(int pid, int code, unsigned long *addr);
|
|||
extern int get_pty(void);
|
||||
|
||||
/* sys-$ARCH/task_size.c */
|
||||
extern unsigned long os_get_task_size(void);
|
||||
extern unsigned long os_get_top_address(void);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -274,7 +274,7 @@ int __init linux_main(int argc, char **argv)
|
|||
if (have_root == 0)
|
||||
add_arg(DEFAULT_COMMAND_LINE);
|
||||
|
||||
host_task_size = os_get_task_size();
|
||||
host_task_size = os_get_top_address();
|
||||
/*
|
||||
* TASK_SIZE needs to be PGDIR_SIZE aligned or else exit_mmap craps
|
||||
* out
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <sched.h>
|
||||
#include <linux/limits.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/wait.h>
|
||||
#include "kern_constants.h"
|
||||
|
|
|
@ -55,7 +55,7 @@ static int ptrace_dump_regs(int pid)
|
|||
* Signals that are OK to receive in the stub - we'll just continue it.
|
||||
* SIGWINCH will happen when UML is inside a detached screen.
|
||||
*/
|
||||
#define STUB_SIG_MASK (1 << SIGVTALRM)
|
||||
#define STUB_SIG_MASK ((1 << SIGVTALRM) | (1 << SIGWINCH))
|
||||
|
||||
/* Signals that the stub will finish with - anything else is an error */
|
||||
#define STUB_DONE_MASK (1 << SIGTRAP)
|
||||
|
|
|
@ -121,8 +121,10 @@ static int stop_ptraced_child(int pid, int exitcode, int mustexit)
|
|||
{
|
||||
int status, n, ret = 0;
|
||||
|
||||
if (ptrace(PTRACE_CONT, pid, 0, 0) < 0)
|
||||
fatal_perror("stop_ptraced_child : ptrace failed");
|
||||
if (ptrace(PTRACE_CONT, pid, 0, 0) < 0) {
|
||||
perror("stop_ptraced_child : ptrace failed");
|
||||
return -1;
|
||||
}
|
||||
CATCH_EINTR(n = waitpid(pid, &status, 0));
|
||||
if (!WIFEXITED(status) || (WEXITSTATUS(status) != exitcode)) {
|
||||
int exit_with = WEXITSTATUS(status);
|
||||
|
@ -212,7 +214,7 @@ static void __init check_sysemu(void)
|
|||
if (n < 0)
|
||||
fatal_perror("check_sysemu : wait failed");
|
||||
if (!WIFSTOPPED(status) || (WSTOPSIG(status) != SIGTRAP))
|
||||
fatal("check_sysemu : expected SIGTRAP, got status = %d",
|
||||
fatal("check_sysemu : expected SIGTRAP, got status = %d\n",
|
||||
status);
|
||||
|
||||
if (ptrace(PTRACE_GETREGS, pid, 0, regs) < 0)
|
||||
|
@ -254,9 +256,11 @@ static void __init check_sysemu(void)
|
|||
|
||||
if (WIFSTOPPED(status) &&
|
||||
(WSTOPSIG(status) == (SIGTRAP|0x80))) {
|
||||
if (!count)
|
||||
fatal("check_ptrace : SYSEMU_SINGLESTEP "
|
||||
if (!count) {
|
||||
non_fatal("check_ptrace : SYSEMU_SINGLESTEP "
|
||||
"doesn't singlestep");
|
||||
goto fail;
|
||||
}
|
||||
n = ptrace(PTRACE_POKEUSR, pid, PT_SYSCALL_RET_OFFSET,
|
||||
os_getpid());
|
||||
if (n < 0)
|
||||
|
@ -266,9 +270,12 @@ static void __init check_sysemu(void)
|
|||
}
|
||||
else if (WIFSTOPPED(status) && (WSTOPSIG(status) == SIGTRAP))
|
||||
count++;
|
||||
else
|
||||
fatal("check_ptrace : expected SIGTRAP or "
|
||||
"(SIGTRAP | 0x80), got status = %d", status);
|
||||
else {
|
||||
non_fatal("check_ptrace : expected SIGTRAP or "
|
||||
"(SIGTRAP | 0x80), got status = %d\n",
|
||||
status);
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
if (stop_ptraced_child(pid, 0, 0) < 0)
|
||||
goto fail_stopped;
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
#include <errno.h>
|
||||
#include <sys/ptrace.h>
|
||||
#include <asm/user.h>
|
||||
#include <sys/user.h>
|
||||
#include "kern_constants.h"
|
||||
#include "longjmp.h"
|
||||
#include "user.h"
|
||||
|
@ -76,7 +76,7 @@ int put_fp_registers(int pid, unsigned long *regs)
|
|||
|
||||
void arch_init_registers(int pid)
|
||||
{
|
||||
struct user_fxsr_struct fpx_regs;
|
||||
struct user_fpxregs_struct fpx_regs;
|
||||
int err;
|
||||
|
||||
err = ptrace(PTRACE_GETFPXREGS, pid, 0, &fpx_regs);
|
||||
|
|
|
@ -63,7 +63,7 @@ static int page_ok(unsigned long page)
|
|||
return ok;
|
||||
}
|
||||
|
||||
unsigned long os_get_task_size(void)
|
||||
unsigned long os_get_top_address(void)
|
||||
{
|
||||
struct sigaction sa, old;
|
||||
unsigned long bottom = 0;
|
||||
|
@ -76,9 +76,9 @@ unsigned long os_get_task_size(void)
|
|||
* hosts, but shouldn't hurt otherwise.
|
||||
*/
|
||||
unsigned long top = 0xffffd000 >> UM_KERN_PAGE_SHIFT;
|
||||
unsigned long test;
|
||||
unsigned long test, original;
|
||||
|
||||
printf("Locating the top of the address space ... ");
|
||||
printf("Locating the bottom of the address space ... ");
|
||||
fflush(stdout);
|
||||
|
||||
/*
|
||||
|
@ -89,16 +89,31 @@ unsigned long os_get_task_size(void)
|
|||
sigemptyset(&sa.sa_mask);
|
||||
sa.sa_flags = SA_NODEFER;
|
||||
if (sigaction(SIGSEGV, &sa, &old)) {
|
||||
perror("os_get_task_size");
|
||||
perror("os_get_top_address");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (!page_ok(bottom)) {
|
||||
fprintf(stderr, "Address 0x%x no good?\n",
|
||||
bottom << UM_KERN_PAGE_SHIFT);
|
||||
/* Manually scan the address space, bottom-up, until we find
|
||||
* the first valid page (or run out of them).
|
||||
*/
|
||||
for (bottom = 0; bottom < top; bottom++) {
|
||||
if (page_ok(bottom))
|
||||
break;
|
||||
}
|
||||
|
||||
/* If we've got this far, we ran out of pages. */
|
||||
if (bottom == top) {
|
||||
fprintf(stderr, "Unable to determine bottom of address "
|
||||
"space.\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
printf("0x%x\n", bottom << UM_KERN_PAGE_SHIFT);
|
||||
printf("Locating the top of the address space ... ");
|
||||
fflush(stdout);
|
||||
|
||||
original = bottom;
|
||||
|
||||
/* This could happen with a 4G/4G split */
|
||||
if (page_ok(top))
|
||||
goto out;
|
||||
|
@ -114,7 +129,7 @@ unsigned long os_get_task_size(void)
|
|||
out:
|
||||
/* Restore the old SIGSEGV handling */
|
||||
if (sigaction(SIGSEGV, &old, NULL)) {
|
||||
perror("os_get_task_size");
|
||||
perror("os_get_top_address");
|
||||
exit(1);
|
||||
}
|
||||
top <<= UM_KERN_PAGE_SHIFT;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
unsigned long os_get_task_size(unsigned long shift)
|
||||
unsigned long os_get_top_address(unsigned long shift)
|
||||
{
|
||||
/* The old value of CONFIG_TOP_ADDR */
|
||||
return 0x7fc0000000;
|
||||
|
|
|
@ -106,6 +106,10 @@ static void deliver_alarm(void)
|
|||
unsigned long long this_tick = os_nsecs();
|
||||
int one_tick = UM_NSEC_PER_SEC / UM_HZ;
|
||||
|
||||
/* Protection against the host's time going backwards */
|
||||
if ((last_tick != 0) && (this_tick < last_tick))
|
||||
this_tick = last_tick;
|
||||
|
||||
if (last_tick == 0)
|
||||
last_tick = this_tick - one_tick;
|
||||
|
||||
|
@ -148,6 +152,9 @@ static int after_sleep_interval(struct timespec *ts)
|
|||
start_usecs = usec;
|
||||
|
||||
start_usecs -= skew / UM_NSEC_PER_USEC;
|
||||
if (start_usecs < 0)
|
||||
start_usecs = 0;
|
||||
|
||||
tv = ((struct timeval) { .tv_sec = start_usecs / UM_USEC_PER_SEC,
|
||||
.tv_usec = start_usecs % UM_USEC_PER_SEC });
|
||||
interval = ((struct itimerval) { { 0, usec }, tv });
|
||||
|
|
|
@ -3,5 +3,9 @@
|
|||
#include <asm/checksum.h>
|
||||
|
||||
/*XXX: we need them because they would be exported by x86_64 */
|
||||
#if (__GNUC__ == 4 && __GNUC_MINOR__ >= 3) || __GNUC__ > 4
|
||||
EXPORT_SYMBOL(memcpy);
|
||||
#else
|
||||
EXPORT_SYMBOL(__memcpy);
|
||||
#endif
|
||||
EXPORT_SYMBOL(csum_partial);
|
||||
|
|
|
@ -1508,13 +1508,13 @@ config PCI_GOMMCONFIG
|
|||
config PCI_GODIRECT
|
||||
bool "Direct"
|
||||
|
||||
config PCI_GOANY
|
||||
bool "Any"
|
||||
|
||||
config PCI_GOOLPC
|
||||
bool "OLPC"
|
||||
depends on OLPC
|
||||
|
||||
config PCI_GOANY
|
||||
bool "Any"
|
||||
|
||||
endchoice
|
||||
|
||||
config PCI_BIOS
|
||||
|
@ -1531,9 +1531,8 @@ config PCI_MMCONFIG
|
|||
depends on X86_32 && PCI && ACPI && (PCI_GOMMCONFIG || PCI_GOANY)
|
||||
|
||||
config PCI_OLPC
|
||||
bool
|
||||
depends on PCI && PCI_GOOLPC
|
||||
default y
|
||||
def_bool y
|
||||
depends on PCI && OLPC && (PCI_GOOLPC || PCI_GOANY)
|
||||
|
||||
config PCI_DOMAINS
|
||||
def_bool y
|
||||
|
|
|
@ -115,8 +115,6 @@ static void enable_a20_fast(void)
|
|||
|
||||
int enable_a20(void)
|
||||
{
|
||||
int loops = A20_ENABLE_LOOPS;
|
||||
|
||||
#if defined(CONFIG_X86_ELAN)
|
||||
/* Elan croaks if we try to touch the KBC */
|
||||
enable_a20_fast();
|
||||
|
@ -128,6 +126,7 @@ int enable_a20(void)
|
|||
enable_a20_kbc();
|
||||
return 0;
|
||||
#else
|
||||
int loops = A20_ENABLE_LOOPS;
|
||||
while (loops--) {
|
||||
/* First, check to see if A20 is already enabled
|
||||
(legacy free, etc.) */
|
||||
|
|
|
@ -248,6 +248,7 @@ ENTRY(resume_userspace)
|
|||
DISABLE_INTERRUPTS(CLBR_ANY) # make sure we don't miss an interrupt
|
||||
# setting need_resched or sigpending
|
||||
# between sampling and the iret
|
||||
TRACE_IRQS_OFF
|
||||
movl TI_flags(%ebp), %ecx
|
||||
andl $_TIF_WORK_MASK, %ecx # is there any work to be done on
|
||||
# int/exception return?
|
||||
|
|
|
@ -189,7 +189,7 @@ default_entry:
|
|||
* this stage.
|
||||
*/
|
||||
|
||||
#define KPMDS ((0x100000000-__PAGE_OFFSET) >> 30) /* Number of kernel PMDs */
|
||||
#define KPMDS (((-__PAGE_OFFSET) >> 30) & 3) /* Number of kernel PMDs */
|
||||
|
||||
xorl %ebx,%ebx /* %ebx is kept at zero */
|
||||
|
||||
|
|
|
@ -2130,14 +2130,10 @@ static inline void __init check_timer(void)
|
|||
{
|
||||
int apic1, pin1, apic2, pin2;
|
||||
int vector;
|
||||
unsigned int ver;
|
||||
unsigned long flags;
|
||||
|
||||
local_irq_save(flags);
|
||||
|
||||
ver = apic_read(APIC_LVR);
|
||||
ver = GET_APIC_VERSION(ver);
|
||||
|
||||
/*
|
||||
* get/set the timer IRQ vector:
|
||||
*/
|
||||
|
@ -2150,15 +2146,11 @@ static inline void __init check_timer(void)
|
|||
* mode for the 8259A whenever interrupts are routed
|
||||
* through I/O APICs. Also IRQ0 has to be enabled in
|
||||
* the 8259A which implies the virtual wire has to be
|
||||
* disabled in the local APIC. Finally timer interrupts
|
||||
* need to be acknowledged manually in the 8259A for
|
||||
* timer_interrupt() and for the i82489DX when using
|
||||
* the NMI watchdog.
|
||||
* disabled in the local APIC.
|
||||
*/
|
||||
apic_write_around(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_EXTINT);
|
||||
init_8259A(1);
|
||||
timer_ack = !cpu_has_tsc;
|
||||
timer_ack |= (nmi_watchdog == NMI_IO_APIC && !APIC_INTEGRATED(ver));
|
||||
timer_ack = 1;
|
||||
if (timer_over_8254 > 0)
|
||||
enable_8259A_irq(0);
|
||||
|
||||
|
|
|
@ -155,6 +155,7 @@ int geode_mfgpt_toggle_event(int timer, int cmp, int event, int enable)
|
|||
wrmsr(msr, value, dummy);
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(geode_mfgpt_toggle_event);
|
||||
|
||||
int geode_mfgpt_set_irq(int timer, int cmp, int irq, int enable)
|
||||
{
|
||||
|
@ -222,6 +223,7 @@ int geode_mfgpt_alloc_timer(int timer, int domain)
|
|||
/* No timers available - too bad */
|
||||
return -1;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(geode_mfgpt_alloc_timer);
|
||||
|
||||
|
||||
#ifdef CONFIG_GEODE_MFGPT_TIMER
|
||||
|
|
|
@ -26,7 +26,6 @@
|
|||
|
||||
#include <asm/smp.h>
|
||||
#include <asm/nmi.h>
|
||||
#include <asm/timer.h>
|
||||
|
||||
#include "mach_traps.h"
|
||||
|
||||
|
@ -82,7 +81,7 @@ int __init check_nmi_watchdog(void)
|
|||
|
||||
prev_nmi_count = kmalloc(NR_CPUS * sizeof(int), GFP_KERNEL);
|
||||
if (!prev_nmi_count)
|
||||
goto error;
|
||||
return -1;
|
||||
|
||||
printk(KERN_INFO "Testing NMI watchdog ... ");
|
||||
|
||||
|
@ -119,7 +118,7 @@ int __init check_nmi_watchdog(void)
|
|||
if (!atomic_read(&nmi_active)) {
|
||||
kfree(prev_nmi_count);
|
||||
atomic_set(&nmi_active, -1);
|
||||
goto error;
|
||||
return -1;
|
||||
}
|
||||
printk("OK.\n");
|
||||
|
||||
|
@ -130,10 +129,6 @@ int __init check_nmi_watchdog(void)
|
|||
|
||||
kfree(prev_nmi_count);
|
||||
return 0;
|
||||
error:
|
||||
timer_ack = !cpu_has_tsc;
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int __init setup_nmi_watchdog(char *str)
|
||||
|
|
|
@ -378,6 +378,7 @@ dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle,
|
|||
struct page *page;
|
||||
unsigned long dma_mask = 0;
|
||||
dma_addr_t bus;
|
||||
int noretry = 0;
|
||||
|
||||
/* ignore region specifiers */
|
||||
gfp &= ~(__GFP_DMA | __GFP_HIGHMEM | __GFP_DMA32);
|
||||
|
@ -397,20 +398,25 @@ dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle,
|
|||
if (dev->dma_mask == NULL)
|
||||
return NULL;
|
||||
|
||||
/* Don't invoke OOM killer */
|
||||
gfp |= __GFP_NORETRY;
|
||||
/* Don't invoke OOM killer or retry in lower 16MB DMA zone */
|
||||
if (gfp & __GFP_DMA)
|
||||
noretry = 1;
|
||||
|
||||
#ifdef CONFIG_X86_64
|
||||
/* Why <=? Even when the mask is smaller than 4GB it is often
|
||||
larger than 16MB and in this case we have a chance of
|
||||
finding fitting memory in the next higher zone first. If
|
||||
not retry with true GFP_DMA. -AK */
|
||||
if (dma_mask <= DMA_32BIT_MASK && !(gfp & GFP_DMA))
|
||||
if (dma_mask <= DMA_32BIT_MASK && !(gfp & GFP_DMA)) {
|
||||
gfp |= GFP_DMA32;
|
||||
if (dma_mask < DMA_32BIT_MASK)
|
||||
noretry = 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
again:
|
||||
page = dma_alloc_pages(dev, gfp, get_order(size));
|
||||
page = dma_alloc_pages(dev,
|
||||
noretry ? gfp | __GFP_NORETRY : gfp, get_order(size));
|
||||
if (page == NULL)
|
||||
return NULL;
|
||||
|
||||
|
|
|
@ -4,6 +4,8 @@
|
|||
#include <linux/acpi.h>
|
||||
#include <linux/bcd.h>
|
||||
#include <linux/mc146818rtc.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/pnp.h>
|
||||
|
||||
#include <asm/time.h>
|
||||
#include <asm/vsyscall.h>
|
||||
|
@ -197,3 +199,35 @@ unsigned long long native_read_tsc(void)
|
|||
}
|
||||
EXPORT_SYMBOL(native_read_tsc);
|
||||
|
||||
|
||||
static struct resource rtc_resources[] = {
|
||||
[0] = {
|
||||
.start = RTC_PORT(0),
|
||||
.end = RTC_PORT(1),
|
||||
.flags = IORESOURCE_IO,
|
||||
},
|
||||
[1] = {
|
||||
.start = RTC_IRQ,
|
||||
.end = RTC_IRQ,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
}
|
||||
};
|
||||
|
||||
static struct platform_device rtc_device = {
|
||||
.name = "rtc_cmos",
|
||||
.id = -1,
|
||||
.resource = rtc_resources,
|
||||
.num_resources = ARRAY_SIZE(rtc_resources),
|
||||
};
|
||||
|
||||
static __init int add_rtc_cmos(void)
|
||||
{
|
||||
#ifdef CONFIG_PNP
|
||||
if (!pnp_platform_devices)
|
||||
platform_device_register(&rtc_device);
|
||||
#else
|
||||
platform_device_register(&rtc_device);
|
||||
#endif /* CONFIG_PNP */
|
||||
return 0;
|
||||
}
|
||||
device_initcall(add_rtc_cmos);
|
||||
|
|
|
@ -544,6 +544,7 @@ vm86_trap:
|
|||
#define DO_ERROR(trapnr, signr, str, name) \
|
||||
void do_##name(struct pt_regs *regs, long error_code) \
|
||||
{ \
|
||||
trace_hardirqs_fixup(); \
|
||||
if (notify_die(DIE_TRAP, str, regs, error_code, trapnr, signr) \
|
||||
== NOTIFY_STOP) \
|
||||
return; \
|
||||
|
|
|
@ -200,7 +200,6 @@ int __pit_timer_fn(struct kvm_kpit_state *ps)
|
|||
|
||||
atomic_inc(&pt->pending);
|
||||
smp_mb__after_atomic_inc();
|
||||
/* FIXME: handle case where the guest is in guest mode */
|
||||
if (vcpu0 && waitqueue_active(&vcpu0->wq)) {
|
||||
vcpu0->arch.mp_state = KVM_MP_STATE_RUNNABLE;
|
||||
wake_up_interruptible(&vcpu0->wq);
|
||||
|
@ -237,6 +236,19 @@ static enum hrtimer_restart pit_timer_fn(struct hrtimer *data)
|
|||
return HRTIMER_NORESTART;
|
||||
}
|
||||
|
||||
void __kvm_migrate_pit_timer(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
struct kvm_pit *pit = vcpu->kvm->arch.vpit;
|
||||
struct hrtimer *timer;
|
||||
|
||||
if (vcpu->vcpu_id != 0 || !pit)
|
||||
return;
|
||||
|
||||
timer = &pit->pit_state.pit_timer.timer;
|
||||
if (hrtimer_cancel(timer))
|
||||
hrtimer_start(timer, timer->expires, HRTIMER_MODE_ABS);
|
||||
}
|
||||
|
||||
static void destroy_pit_timer(struct kvm_kpit_timer *pt)
|
||||
{
|
||||
pr_debug("pit: execute del timer!\n");
|
||||
|
|
|
@ -94,3 +94,9 @@ void kvm_timer_intr_post(struct kvm_vcpu *vcpu, int vec)
|
|||
/* TODO: PIT, RTC etc. */
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(kvm_timer_intr_post);
|
||||
|
||||
void __kvm_migrate_timers(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
__kvm_migrate_apic_timer(vcpu);
|
||||
__kvm_migrate_pit_timer(vcpu);
|
||||
}
|
||||
|
|
|
@ -84,6 +84,8 @@ void kvm_timer_intr_post(struct kvm_vcpu *vcpu, int vec);
|
|||
void kvm_inject_pending_timer_irqs(struct kvm_vcpu *vcpu);
|
||||
void kvm_inject_apic_timer_irqs(struct kvm_vcpu *vcpu);
|
||||
void __kvm_migrate_apic_timer(struct kvm_vcpu *vcpu);
|
||||
void __kvm_migrate_pit_timer(struct kvm_vcpu *vcpu);
|
||||
void __kvm_migrate_timers(struct kvm_vcpu *vcpu);
|
||||
|
||||
int pit_has_pending_timer(struct kvm_vcpu *vcpu);
|
||||
int apic_has_pending_timer(struct kvm_vcpu *vcpu);
|
||||
|
|
|
@ -658,7 +658,7 @@ static int is_empty_shadow_page(u64 *spt)
|
|||
u64 *end;
|
||||
|
||||
for (pos = spt, end = pos + PAGE_SIZE / sizeof(u64); pos != end; pos++)
|
||||
if (*pos != shadow_trap_nonpresent_pte) {
|
||||
if (is_shadow_present_pte(*pos)) {
|
||||
printk(KERN_ERR "%s: %p %llx\n", __func__,
|
||||
pos, *pos);
|
||||
return 0;
|
||||
|
@ -1858,6 +1858,7 @@ static void free_mmu_pages(struct kvm_vcpu *vcpu)
|
|||
sp = container_of(vcpu->kvm->arch.active_mmu_pages.next,
|
||||
struct kvm_mmu_page, link);
|
||||
kvm_mmu_zap_page(vcpu->kvm, sp);
|
||||
cond_resched();
|
||||
}
|
||||
free_page((unsigned long)vcpu->arch.mmu.pae_root);
|
||||
}
|
||||
|
|
|
@ -418,7 +418,7 @@ static int FNAME(page_fault)(struct kvm_vcpu *vcpu, gva_t addr,
|
|||
|
||||
/* mmio */
|
||||
if (is_error_pfn(pfn)) {
|
||||
pgprintk("gfn %x is mmio\n", walker.gfn);
|
||||
pgprintk("gfn %lx is mmio\n", walker.gfn);
|
||||
kvm_release_pfn_clean(pfn);
|
||||
return 1;
|
||||
}
|
||||
|
|
|
@ -688,7 +688,7 @@ static void svm_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
|
|||
delta = vcpu->arch.host_tsc - tsc_this;
|
||||
svm->vmcb->control.tsc_offset += delta;
|
||||
vcpu->cpu = cpu;
|
||||
kvm_migrate_apic_timer(vcpu);
|
||||
kvm_migrate_timers(vcpu);
|
||||
}
|
||||
|
||||
for (i = 0; i < NR_HOST_SAVE_USER_MSRS; i++)
|
||||
|
|
|
@ -608,7 +608,7 @@ static void vmx_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
|
|||
|
||||
if (vcpu->cpu != cpu) {
|
||||
vcpu_clear(vmx);
|
||||
kvm_migrate_apic_timer(vcpu);
|
||||
kvm_migrate_timers(vcpu);
|
||||
vpid_sync_vcpu_all(vmx);
|
||||
}
|
||||
|
||||
|
@ -1036,6 +1036,7 @@ static void hardware_enable(void *garbage)
|
|||
static void hardware_disable(void *garbage)
|
||||
{
|
||||
asm volatile (ASM_VMX_VMXOFF : : : "cc");
|
||||
write_cr4(read_cr4() & ~X86_CR4_VMXE);
|
||||
}
|
||||
|
||||
static __init int adjust_vmx_controls(u32 ctl_min, u32 ctl_opt,
|
||||
|
|
|
@ -2758,7 +2758,7 @@ again:
|
|||
|
||||
if (vcpu->requests) {
|
||||
if (test_and_clear_bit(KVM_REQ_MIGRATE_TIMER, &vcpu->requests))
|
||||
__kvm_migrate_apic_timer(vcpu);
|
||||
__kvm_migrate_timers(vcpu);
|
||||
if (test_and_clear_bit(KVM_REQ_REPORT_TPR_ACCESS,
|
||||
&vcpu->requests)) {
|
||||
kvm_run->exit_reason = KVM_EXIT_TPR_ACCESS;
|
||||
|
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче