Merge commit 'v2.6.35-rc3' into perf/core

Merge reason: Go from -rc1 base to -rc3 base, merge in fixes.
This commit is contained in:
Ingo Molnar 2010-06-18 10:53:12 +02:00
commit 646b1db495
1019 changed files with 83316 additions and 7749 deletions

1
.gitignore vendored
View File

@ -28,6 +28,7 @@ modules.builtin
*.gz *.gz
*.bz2 *.bz2
*.lzma *.lzma
*.lzo
*.patch *.patch
*.gcno *.gcno

7
Documentation/.gitignore vendored Normal file
View File

@ -0,0 +1,7 @@
filesystems/dnotify_test
laptops/dslm
timers/hpet_example
vm/hugepage-mmap
vm/hugepage-shm
vm/map_hugetlb

View File

@ -133,46 +133,6 @@ Description:
The symbolic link points to the PCI device sysfs entry of the The symbolic link points to the PCI device sysfs entry of the
Physical Function this device associates with. Physical Function this device associates with.
What: /sys/bus/pci/slots/...
Date: April 2005 (possibly older)
KernelVersion: 2.6.12 (possibly older)
Contact: linux-pci@vger.kernel.org
Description:
When the appropriate driver is loaded, it will create a
directory per claimed physical PCI slot in
/sys/bus/pci/slots/. The names of these directories are
specific to the driver, which in turn, are specific to the
platform, but in general, should match the label on the
machine's physical chassis.
The drivers that can create slot directories include the
PCI hotplug drivers, and as of 2.6.27, the pci_slot driver.
The slot directories contain, at a minimum, a file named
'address' which contains the PCI bus:device:function tuple.
Other files may appear as well, but are specific to the
driver.
What: /sys/bus/pci/slots/.../function[0-7]
Date: March 2010
KernelVersion: 2.6.35
Contact: linux-pci@vger.kernel.org
Description:
If PCI slot directories (as described above) are created,
and the physical slot is actually populated with a device,
symbolic links in the slot directory pointing to the
device's PCI functions are created as well.
What: /sys/bus/pci/devices/.../slot
Date: March 2010
KernelVersion: 2.6.35
Contact: linux-pci@vger.kernel.org
Description:
If PCI slot directories (as described above) are created,
a symbolic link pointing to the slot directory will be
created as well.
What: /sys/bus/pci/slots/.../module What: /sys/bus/pci/slots/.../module
Date: June 2009 Date: June 2009
Contact: linux-pci@vger.kernel.org Contact: linux-pci@vger.kernel.org

View File

@ -389,7 +389,7 @@
</para> </para>
<para> <para>
If your driver supports memory management (it should!), you'll If your driver supports memory management (it should!), you'll
need to set that up at load time as well. How you intialize need to set that up at load time as well. How you initialize
it depends on which memory manager you're using, TTM or GEM. it depends on which memory manager you're using, TTM or GEM.
</para> </para>
<sect3> <sect3>
@ -399,7 +399,7 @@
aperture space for graphics devices. TTM supports both UMA devices aperture space for graphics devices. TTM supports both UMA devices
and devices with dedicated video RAM (VRAM), i.e. most discrete and devices with dedicated video RAM (VRAM), i.e. most discrete
graphics devices. If your device has dedicated RAM, supporting graphics devices. If your device has dedicated RAM, supporting
TTM is desireable. TTM also integrates tightly with your TTM is desirable. TTM also integrates tightly with your
driver specific buffer execution function. See the radeon driver specific buffer execution function. See the radeon
driver for examples. driver for examples.
</para> </para>
@ -443,7 +443,7 @@
likely eventually calling ttm_bo_global_init and likely eventually calling ttm_bo_global_init and
ttm_bo_global_release, respectively. Also like the previous ttm_bo_global_release, respectively. Also like the previous
object, ttm_global_item_ref is used to create an initial reference object, ttm_global_item_ref is used to create an initial reference
count for the TTM, which will call your initalization function. count for the TTM, which will call your initialization function.
</para> </para>
</sect3> </sect3>
<sect3> <sect3>
@ -557,7 +557,7 @@ void intel_crt_init(struct drm_device *dev)
CRT connector and encoder combination is created. A device CRT connector and encoder combination is created. A device
specific i2c bus is also created, for fetching EDID data and specific i2c bus is also created, for fetching EDID data and
performing monitor detection. Once the process is complete, performing monitor detection. Once the process is complete,
the new connector is regsitered with sysfs, to make its the new connector is registered with sysfs, to make its
properties available to applications. properties available to applications.
</para> </para>
<sect4> <sect4>
@ -581,12 +581,12 @@ void intel_crt_init(struct drm_device *dev)
<para> <para>
For each encoder, CRTC and connector, several functions must For each encoder, CRTC and connector, several functions must
be provided, depending on the object type. Encoder objects be provided, depending on the object type. Encoder objects
need should provide a DPMS (basically on/off) function, mode fixup need to provide a DPMS (basically on/off) function, mode fixup
(for converting requested modes into native hardware timings), (for converting requested modes into native hardware timings),
and prepare, set and commit functions for use by the core DRM and prepare, set and commit functions for use by the core DRM
helper functions. Connector helpers need to provide mode fetch and helper functions. Connector helpers need to provide mode fetch and
validity functions as well as an encoder matching function for validity functions as well as an encoder matching function for
returing an ideal encoder for a given connector. The core returning an ideal encoder for a given connector. The core
connector functions include a DPMS callback, (deprecated) connector functions include a DPMS callback, (deprecated)
save/restore routines, detection, mode probing, property handling, save/restore routines, detection, mode probing, property handling,
and cleanup functions. and cleanup functions.

View File

@ -58,7 +58,7 @@ MPEG stream embedded, sliced VBI data format in this specification.
</contrib> </contrib>
<affiliation> <affiliation>
<address> <address>
<email>awalls@radix.net</email> <email>awalls@md.metrocast.net</email>
</address> </address>
</affiliation> </affiliation>
</author> </author>

View File

@ -53,8 +53,10 @@ input</refpurpose>
automatically, similar to sensing the video standard. To do so, applications automatically, similar to sensing the video standard. To do so, applications
call <constant> VIDIOC_QUERY_DV_PRESET</constant> with a pointer to a call <constant> VIDIOC_QUERY_DV_PRESET</constant> with a pointer to a
&v4l2-dv-preset; type. Once the hardware detects a preset, that preset is &v4l2-dv-preset; type. Once the hardware detects a preset, that preset is
returned in the preset field of &v4l2-dv-preset;. When detection is not returned in the preset field of &v4l2-dv-preset;. If the preset could not be
possible or fails, the value V4L2_DV_INVALID is returned.</para> detected because there was no signal, or the signal was unreliable, or the
signal did not map to a supported preset, then the value V4L2_DV_INVALID is
returned.</para>
</refsect1> </refsect1>
<refsect1> <refsect1>

View File

@ -6,6 +6,8 @@ Written by Doug Thompson <dougthompson@xmission.com>
7 Dec 2005 7 Dec 2005
17 Jul 2007 Updated 17 Jul 2007 Updated
(c) Mauro Carvalho Chehab <mchehab@redhat.com>
05 Aug 2009 Nehalem interface
EDAC is maintained and written by: EDAC is maintained and written by:
@ -717,3 +719,153 @@ unique drivers for their hardware systems.
The 'test_device_edac' sample driver is located at the The 'test_device_edac' sample driver is located at the
bluesmoke.sourceforge.net project site for EDAC. bluesmoke.sourceforge.net project site for EDAC.
=======================================================================
NEHALEM USAGE OF EDAC APIs
This chapter documents some EXPERIMENTAL mappings for EDAC API to handle
Nehalem EDAC driver. They will likely be changed on future versions
of the driver.
Due to the way Nehalem exports Memory Controller data, some adjustments
were done at i7core_edac driver. This chapter will cover those differences
1) On Nehalem, there are one Memory Controller per Quick Patch Interconnect
(QPI). At the driver, the term "socket" means one QPI. This is
associated with a physical CPU socket.
Each MC have 3 physical read channels, 3 physical write channels and
3 logic channels. The driver currenty sees it as just 3 channels.
Each channel can have up to 3 DIMMs.
The minimum known unity is DIMMs. There are no information about csrows.
As EDAC API maps the minimum unity is csrows, the driver sequencially
maps channel/dimm into different csrows.
For example, suposing the following layout:
Ch0 phy rd0, wr0 (0x063f4031): 2 ranks, UDIMMs
dimm 0 1024 Mb offset: 0, bank: 8, rank: 1, row: 0x4000, col: 0x400
dimm 1 1024 Mb offset: 4, bank: 8, rank: 1, row: 0x4000, col: 0x400
Ch1 phy rd1, wr1 (0x063f4031): 2 ranks, UDIMMs
dimm 0 1024 Mb offset: 0, bank: 8, rank: 1, row: 0x4000, col: 0x400
Ch2 phy rd3, wr3 (0x063f4031): 2 ranks, UDIMMs
dimm 0 1024 Mb offset: 0, bank: 8, rank: 1, row: 0x4000, col: 0x400
The driver will map it as:
csrow0: channel 0, dimm0
csrow1: channel 0, dimm1
csrow2: channel 1, dimm0
csrow3: channel 2, dimm0
exports one
DIMM per csrow.
Each QPI is exported as a different memory controller.
2) Nehalem MC has the hability to generate errors. The driver implements this
functionality via some error injection nodes:
For injecting a memory error, there are some sysfs nodes, under
/sys/devices/system/edac/mc/mc?/:
inject_addrmatch/*:
Controls the error injection mask register. It is possible to specify
several characteristics of the address to match an error code:
dimm = the affected dimm. Numbers are relative to a channel;
rank = the memory rank;
channel = the channel that will generate an error;
bank = the affected bank;
page = the page address;
column (or col) = the address column.
each of the above values can be set to "any" to match any valid value.
At driver init, all values are set to any.
For example, to generate an error at rank 1 of dimm 2, for any channel,
any bank, any page, any column:
echo 2 >/sys/devices/system/edac/mc/mc0/inject_addrmatch/dimm
echo 1 >/sys/devices/system/edac/mc/mc0/inject_addrmatch/rank
To return to the default behaviour of matching any, you can do:
echo any >/sys/devices/system/edac/mc/mc0/inject_addrmatch/dimm
echo any >/sys/devices/system/edac/mc/mc0/inject_addrmatch/rank
inject_eccmask:
specifies what bits will have troubles,
inject_section:
specifies what ECC cache section will get the error:
3 for both
2 for the highest
1 for the lowest
inject_type:
specifies the type of error, being a combination of the following bits:
bit 0 - repeat
bit 1 - ecc
bit 2 - parity
inject_enable starts the error generation when something different
than 0 is written.
All inject vars can be read. root permission is needed for write.
Datasheet states that the error will only be generated after a write on an
address that matches inject_addrmatch. It seems, however, that reading will
also produce an error.
For example, the following code will generate an error for any write access
at socket 0, on any DIMM/address on channel 2:
echo 2 >/sys/devices/system/edac/mc/mc0/inject_addrmatch/channel
echo 2 >/sys/devices/system/edac/mc/mc0/inject_type
echo 64 >/sys/devices/system/edac/mc/mc0/inject_eccmask
echo 3 >/sys/devices/system/edac/mc/mc0/inject_section
echo 1 >/sys/devices/system/edac/mc/mc0/inject_enable
dd if=/dev/mem of=/dev/null seek=16k bs=4k count=1 >& /dev/null
For socket 1, it is needed to replace "mc0" by "mc1" at the above
commands.
The generated error message will look like:
EDAC MC0: UE row 0, channel-a= 0 channel-b= 0 labels "-": NON_FATAL (addr = 0x0075b980, socket=0, Dimm=0, Channel=2, syndrome=0x00000040, count=1, Err=8c0000400001009f:4000080482 (read error: read ECC error))
3) Nehalem specific Corrected Error memory counters
Nehalem have some registers to count memory errors. The driver uses those
registers to report Corrected Errors on devices with Registered Dimms.
However, those counters don't work with Unregistered Dimms. As the chipset
offers some counters that also work with UDIMMS (but with a worse level of
granularity than the default ones), the driver exposes those registers for
UDIMM memories.
They can be read by looking at the contents of all_channel_counts/
$ for i in /sys/devices/system/edac/mc/mc0/all_channel_counts/*; do echo $i; cat $i; done
/sys/devices/system/edac/mc/mc0/all_channel_counts/udimm0
0
/sys/devices/system/edac/mc/mc0/all_channel_counts/udimm1
0
/sys/devices/system/edac/mc/mc0/all_channel_counts/udimm2
0
What happens here is that errors on different csrows, but at the same
dimm number will increment the same counter.
So, in this memory mapping:
csrow0: channel 0, dimm0
csrow1: channel 0, dimm1
csrow2: channel 1, dimm0
csrow3: channel 2, dimm0
The hardware will increment udimm0 for an error at the first dimm at either
csrow0, csrow2 or csrow3;
The hardware will increment udimm1 for an error at the second dimm at either
csrow0, csrow2 or csrow3;
The hardware will increment udimm2 for an error at the third dimm at either
csrow0, csrow2 or csrow3;
4) Standard error counters
The standard error counters are generated when an mcelog error is received
by the driver. Since, with udimm, this is counted by software, it is
possible that some errors could be lost. With rdimm's, they displays the
contents of the registers

View File

@ -578,15 +578,6 @@ Who: Avi Kivity <avi@redhat.com>
---------------------------- ----------------------------
What: "acpi=ht" boot option
When: 2.6.35
Why: Useful in 2003, implementation is a hack.
Generally invoked by accident today.
Seen as doing more harm than good.
Who: Len Brown <len.brown@intel.com>
----------------------------
What: iwlwifi 50XX module parameters What: iwlwifi 50XX module parameters
When: 2.6.40 When: 2.6.40
Why: The "..50" modules parameters were used to configure 5000 series and Why: The "..50" modules parameters were used to configure 5000 series and

View File

@ -794,11 +794,6 @@ designed.
Roadmap: Roadmap:
2.6.35 Inclusion in mainline as an experimental mount option
=> approximately 2-3 months to merge window
=> needs to be in xfs-dev tree in 4-6 weeks
=> code is nearing readiness for review
2.6.37 Remove experimental tag from mount option 2.6.37 Remove experimental tag from mount option
=> should be roughly 6 months after initial merge => should be roughly 6 months after initial merge
=> enough time to: => enough time to:

View File

@ -6,12 +6,12 @@ Supported adapters:
http://www.ali.com.tw/eng/support/datasheet_request.php http://www.ali.com.tw/eng/support/datasheet_request.php
Authors: Authors:
Frodo Looijaard <frodol@dds.nl>, Frodo Looijaard <frodol@dds.nl>,
Philip Edelbrock <phil@netroedge.com>, Philip Edelbrock <phil@netroedge.com>,
Mark D. Studebaker <mdsxyz123@yahoo.com>, Mark D. Studebaker <mdsxyz123@yahoo.com>,
Dan Eaton <dan.eaton@rocketlogix.com>, Dan Eaton <dan.eaton@rocketlogix.com>,
Stephen Rousset<stephen.rousset@rocketlogix.com> Stephen Rousset<stephen.rousset@rocketlogix.com>
Description Description
----------- -----------

View File

@ -18,7 +18,7 @@ For an overview of these chips see http://www.acerlabs.com
The M1563 southbridge is deceptively similar to the M1533, with a few The M1563 southbridge is deceptively similar to the M1533, with a few
notable exceptions. One of those happens to be the fact they upgraded the notable exceptions. One of those happens to be the fact they upgraded the
i2c core to be SMBus 2.0 compliant, and happens to be almost identical to i2c core to be SMBus 2.0 compliant, and happens to be almost identical to
the i2c controller found in the Intel 801 south bridges. the i2c controller found in the Intel 801 south bridges.
Features Features
-------- --------

View File

@ -6,8 +6,8 @@ Supported adapters:
http://www.ali.com.tw/eng/support/datasheet_request.php http://www.ali.com.tw/eng/support/datasheet_request.php
Authors: Authors:
Frodo Looijaard <frodol@dds.nl>, Frodo Looijaard <frodol@dds.nl>,
Philip Edelbrock <phil@netroedge.com>, Philip Edelbrock <phil@netroedge.com>,
Mark D. Studebaker <mdsxyz123@yahoo.com> Mark D. Studebaker <mdsxyz123@yahoo.com>
Module Parameters Module Parameters
@ -40,10 +40,10 @@ M1541 and M1543C South Bridges.
The M1543C is a South bridge for desktop systems. The M1543C is a South bridge for desktop systems.
The M1541 is a South bridge for portable systems. The M1541 is a South bridge for portable systems.
They are part of the following ALI chipsets: They are part of the following ALI chipsets:
* "Aladdin Pro 2" includes the M1621 Slot 1 North bridge with AGP and * "Aladdin Pro 2" includes the M1621 Slot 1 North bridge with AGP and
100MHz CPU Front Side bus 100MHz CPU Front Side bus
* "Aladdin V" includes the M1541 Socket 7 North bridge with AGP and 100MHz * "Aladdin V" includes the M1541 Socket 7 North bridge with AGP and 100MHz
CPU Front Side bus CPU Front Side bus
Some Aladdin V motherboards: Some Aladdin V motherboards:
Asus P5A Asus P5A
@ -77,7 +77,7 @@ output of lspci will show something similar to the following:
** then run lspci. ** then run lspci.
** If you see the 1533 and 5229 devices but NOT the 7101 device, ** If you see the 1533 and 5229 devices but NOT the 7101 device,
** then you must enable ACPI, the PMU, SMB, or something similar ** then you must enable ACPI, the PMU, SMB, or something similar
** in the BIOS. ** in the BIOS.
** The driver won't work if it can't find the M7101 device. ** The driver won't work if it can't find the M7101 device.
The SMB controller is part of the M7101 device, which is an ACPI-compliant The SMB controller is part of the M7101 device, which is an ACPI-compliant
@ -87,8 +87,8 @@ The whole M7101 device has to be enabled for the SMB to work. You can't
just enable the SMB alone. The SMB and the ACPI have separate I/O spaces. just enable the SMB alone. The SMB and the ACPI have separate I/O spaces.
We make sure that the SMB is enabled. We leave the ACPI alone. We make sure that the SMB is enabled. We leave the ACPI alone.
Features Features
-------- --------
This driver controls the SMB Host only. The SMB Slave This driver controls the SMB Host only. The SMB Slave
controller on the M15X3 is not enabled. This driver does not use controller on the M15X3 is not enabled. This driver does not use

View File

@ -1,10 +1,10 @@
Kernel driver i2c-pca-isa Kernel driver i2c-pca-isa
Supported adapters: Supported adapters:
This driver supports ISA boards using the Philips PCA 9564 This driver supports ISA boards using the Philips PCA 9564
Parallel bus to I2C bus controller Parallel bus to I2C bus controller
Author: Ian Campbell <icampbell@arcom.com>, Arcom Control Systems Author: Ian Campbell <icampbell@arcom.com>, Arcom Control Systems
Module Parameters Module Parameters
----------------- -----------------
@ -12,12 +12,12 @@ Module Parameters
* base int * base int
I/O base address I/O base address
* irq int * irq int
IRQ interrupt IRQ interrupt
* clock int * clock int
Clock rate as described in table 1 of PCA9564 datasheet Clock rate as described in table 1 of PCA9564 datasheet
Description Description
----------- -----------
This driver supports ISA boards using the Philips PCA 9564 This driver supports ISA boards using the Philips PCA 9564
Parallel bus to I2C bus controller Parallel bus to I2C bus controller

View File

@ -1,41 +1,41 @@
Kernel driver i2c-sis5595 Kernel driver i2c-sis5595
Authors: Authors:
Frodo Looijaard <frodol@dds.nl>, Frodo Looijaard <frodol@dds.nl>,
Mark D. Studebaker <mdsxyz123@yahoo.com>, Mark D. Studebaker <mdsxyz123@yahoo.com>,
Philip Edelbrock <phil@netroedge.com> Philip Edelbrock <phil@netroedge.com>
Supported adapters: Supported adapters:
* Silicon Integrated Systems Corp. SiS5595 Southbridge * Silicon Integrated Systems Corp. SiS5595 Southbridge
Datasheet: Publicly available at the Silicon Integrated Systems Corp. site. Datasheet: Publicly available at the Silicon Integrated Systems Corp. site.
Note: all have mfr. ID 0x1039. Note: all have mfr. ID 0x1039.
SUPPORTED PCI ID SUPPORTED PCI ID
5595 0008 5595 0008
Note: these chips contain a 0008 device which is incompatible with the Note: these chips contain a 0008 device which is incompatible with the
5595. We recognize these by the presence of the listed 5595. We recognize these by the presence of the listed
"blacklist" PCI ID and refuse to load. "blacklist" PCI ID and refuse to load.
NOT SUPPORTED PCI ID BLACKLIST PCI ID NOT SUPPORTED PCI ID BLACKLIST PCI ID
540 0008 0540 540 0008 0540
550 0008 0550 550 0008 0550
5513 0008 5511 5513 0008 5511
5581 0008 5597 5581 0008 5597
5582 0008 5597 5582 0008 5597
5597 0008 5597 5597 0008 5597
5598 0008 5597/5598 5598 0008 5597/5598
630 0008 0630 630 0008 0630
645 0008 0645 645 0008 0645
646 0008 0646 646 0008 0646
648 0008 0648 648 0008 0648
650 0008 0650 650 0008 0650
651 0008 0651 651 0008 0651
730 0008 0730 730 0008 0730
735 0008 0735 735 0008 0735
745 0008 0745 745 0008 0745
746 0008 0746 746 0008 0746
Module Parameters Module Parameters
----------------- -----------------

View File

@ -14,9 +14,9 @@ Module Parameters
* force = [1|0] Forcibly enable the SIS630. DANGEROUS! * force = [1|0] Forcibly enable the SIS630. DANGEROUS!
This can be interesting for chipsets not named This can be interesting for chipsets not named
above to check if it works for you chipset, but DANGEROUS! above to check if it works for you chipset, but DANGEROUS!
* high_clock = [1|0] Forcibly set Host Master Clock to 56KHz (default, * high_clock = [1|0] Forcibly set Host Master Clock to 56KHz (default,
what your BIOS use). DANGEROUS! This should be a bit what your BIOS use). DANGEROUS! This should be a bit
faster, but freeze some systems (i.e. my Laptop). faster, but freeze some systems (i.e. my Laptop).
@ -44,6 +44,6 @@ Philip Edelbrock <phil@netroedge.com>
- testing SiS730 support - testing SiS730 support
Mark M. Hoffman <mhoffman@lightlink.com> Mark M. Hoffman <mhoffman@lightlink.com>
- bug fixes - bug fixes
To anyone else which I forgot here ;), thanks! To anyone else which I forgot here ;), thanks!

View File

@ -1,17 +1,17 @@
The I2C protocol knows about two kinds of device addresses: normal 7 bit The I2C protocol knows about two kinds of device addresses: normal 7 bit
addresses, and an extended set of 10 bit addresses. The sets of addresses addresses, and an extended set of 10 bit addresses. The sets of addresses
do not intersect: the 7 bit address 0x10 is not the same as the 10 bit do not intersect: the 7 bit address 0x10 is not the same as the 10 bit
address 0x10 (though a single device could respond to both of them). You address 0x10 (though a single device could respond to both of them). You
select a 10 bit address by adding an extra byte after the address select a 10 bit address by adding an extra byte after the address
byte: byte:
S Addr7 Rd/Wr .... S Addr7 Rd/Wr ....
becomes becomes
S 11110 Addr10 Rd/Wr S 11110 Addr10 Rd/Wr
S is the start bit, Rd/Wr the read/write bit, and if you count the number S is the start bit, Rd/Wr the read/write bit, and if you count the number
of bits, you will see the there are 8 after the S bit for 7 bit addresses, of bits, you will see the there are 8 after the S bit for 7 bit addresses,
and 16 after the S bit for 10 bit addresses. and 16 after the S bit for 10 bit addresses.
WARNING! The current 10 bit address support is EXPERIMENTAL. There are WARNING! The current 10 bit address support is EXPERIMENTAL. There are
several places in the code that will cause SEVERE PROBLEMS with 10 bit several places in the code that will cause SEVERE PROBLEMS with 10 bit
addresses, even though there is some basic handling and hooks. Also, addresses, even though there is some basic handling and hooks. Also,
almost no supported adapter handles the 10 bit addresses correctly. almost no supported adapter handles the 10 bit addresses correctly.

View File

@ -65,7 +65,7 @@ CROSS_COMPILE
Specify an optional fixed part of the binutils filename. Specify an optional fixed part of the binutils filename.
CROSS_COMPILE can be a part of the filename or the full path. CROSS_COMPILE can be a part of the filename or the full path.
CROSS_COMPILE is also used for ccache is some setups. CROSS_COMPILE is also used for ccache in some setups.
CF CF
-------------------------------------------------- --------------------------------------------------
@ -162,3 +162,7 @@ For tags/TAGS/cscope targets, you can specify more than one arch
to be included in the databases, separated by blank space. E.g.: to be included in the databases, separated by blank space. E.g.:
$ make ALLSOURCE_ARCHS="x86 mips arm" tags $ make ALLSOURCE_ARCHS="x86 mips arm" tags
To get all available archs you can also specify all. E.g.:
$ make ALLSOURCE_ARCHS=all tags

View File

@ -66,14 +66,14 @@ of advantages of mutexes:
c0377ccb <mutex_lock>: c0377ccb <mutex_lock>:
c0377ccb: f0 ff 08 lock decl (%eax) c0377ccb: f0 ff 08 lock decl (%eax)
c0377cce: 78 0e js c0377cde <.text.lock.mutex> c0377cce: 78 0e js c0377cde <.text..lock.mutex>
c0377cd0: c3 ret c0377cd0: c3 ret
the unlocking fastpath is equally tight: the unlocking fastpath is equally tight:
c0377cd1 <mutex_unlock>: c0377cd1 <mutex_unlock>:
c0377cd1: f0 ff 00 lock incl (%eax) c0377cd1: f0 ff 00 lock incl (%eax)
c0377cd4: 7e 0f jle c0377ce5 <.text.lock.mutex+0x7> c0377cd4: 7e 0f jle c0377ce5 <.text..lock.mutex+0x7>
c0377cd6: c3 ret c0377cd6: c3 ret
- 'struct mutex' semantics are well-defined and are enforced if - 'struct mutex' semantics are well-defined and are enforced if

View File

@ -2,7 +2,7 @@
obj- := dummy.o obj- := dummy.o
# List of programs to build # List of programs to build
hostprogs-y := hpet_example hostprogs-$(CONFIG_X86) := hpet_example
# Tell kbuild to always build the programs # Tell kbuild to always build the programs
always := $(hostprogs-y) always := $(hostprogs-y)

View File

@ -176,5 +176,6 @@
175 -> Leadtek Winfast DTV1000S [107d:6655] 175 -> Leadtek Winfast DTV1000S [107d:6655]
176 -> Beholder BeholdTV 505 RDS [0000:5051] 176 -> Beholder BeholdTV 505 RDS [0000:5051]
177 -> Hawell HW-404M7 177 -> Hawell HW-404M7
179 -> Beholder BeholdTV H7 [5ace:7190] 178 -> Beholder BeholdTV H7 [5ace:7190]
180 -> Beholder BeholdTV A7 [5ace:7090] 179 -> Beholder BeholdTV A7 [5ace:7090]
180 -> Avermedia M733A [1461:4155,1461:4255]

View File

@ -290,6 +290,7 @@ sonixb 0c45:602e Genius VideoCam Messenger
sonixj 0c45:6040 Speed NVC 350K sonixj 0c45:6040 Speed NVC 350K
sonixj 0c45:607c Sonix sn9c102p Hv7131R sonixj 0c45:607c Sonix sn9c102p Hv7131R
sonixj 0c45:60c0 Sangha Sn535 sonixj 0c45:60c0 Sangha Sn535
sonixj 0c45:60ce USB-PC-Camera-168 (TALK-5067)
sonixj 0c45:60ec SN9C105+MO4000 sonixj 0c45:60ec SN9C105+MO4000
sonixj 0c45:60fb Surfer NoName sonixj 0c45:60fb Surfer NoName
sonixj 0c45:60fc LG-LIC300 sonixj 0c45:60fc LG-LIC300

View File

@ -1731,7 +1731,7 @@ S: Maintained
F: sound/pci/cs5535audio/ F: sound/pci/cs5535audio/
CX18 VIDEO4LINUX DRIVER CX18 VIDEO4LINUX DRIVER
M: Andy Walls <awalls@radix.net> M: Andy Walls <awalls@md.metrocast.net>
L: ivtv-devel@ivtvdriver.org (moderated for non-subscribers) L: ivtv-devel@ivtvdriver.org (moderated for non-subscribers)
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git
@ -2978,7 +2978,6 @@ F: drivers/net/ixgb/
F: drivers/net/ixgbe/ F: drivers/net/ixgbe/
INTEL PRO/WIRELESS 2100 NETWORK CONNECTION SUPPORT INTEL PRO/WIRELESS 2100 NETWORK CONNECTION SUPPORT
M: Zhu Yi <yi.zhu@intel.com>
M: Reinette Chatre <reinette.chatre@intel.com> M: Reinette Chatre <reinette.chatre@intel.com>
M: Intel Linux Wireless <ilw@linux.intel.com> M: Intel Linux Wireless <ilw@linux.intel.com>
L: linux-wireless@vger.kernel.org L: linux-wireless@vger.kernel.org
@ -2988,7 +2987,6 @@ F: Documentation/networking/README.ipw2100
F: drivers/net/wireless/ipw2x00/ipw2100.* F: drivers/net/wireless/ipw2x00/ipw2100.*
INTEL PRO/WIRELESS 2915ABG NETWORK CONNECTION SUPPORT INTEL PRO/WIRELESS 2915ABG NETWORK CONNECTION SUPPORT
M: Zhu Yi <yi.zhu@intel.com>
M: Reinette Chatre <reinette.chatre@intel.com> M: Reinette Chatre <reinette.chatre@intel.com>
M: Intel Linux Wireless <ilw@linux.intel.com> M: Intel Linux Wireless <ilw@linux.intel.com>
L: linux-wireless@vger.kernel.org L: linux-wireless@vger.kernel.org
@ -3019,8 +3017,8 @@ F: drivers/net/wimax/i2400m/
F: include/linux/wimax/i2400m.h F: include/linux/wimax/i2400m.h
INTEL WIRELESS WIFI LINK (iwlwifi) INTEL WIRELESS WIFI LINK (iwlwifi)
M: Zhu Yi <yi.zhu@intel.com>
M: Reinette Chatre <reinette.chatre@intel.com> M: Reinette Chatre <reinette.chatre@intel.com>
M: Wey-Yi Guy <wey-yi.w.guy@intel.com>
M: Intel Linux Wireless <ilw@linux.intel.com> M: Intel Linux Wireless <ilw@linux.intel.com>
L: linux-wireless@vger.kernel.org L: linux-wireless@vger.kernel.org
W: http://intellinuxwireless.org W: http://intellinuxwireless.org
@ -3030,7 +3028,6 @@ F: drivers/net/wireless/iwlwifi/
INTEL WIRELESS MULTICOMM 3200 WIFI (iwmc3200wifi) INTEL WIRELESS MULTICOMM 3200 WIFI (iwmc3200wifi)
M: Samuel Ortiz <samuel.ortiz@intel.com> M: Samuel Ortiz <samuel.ortiz@intel.com>
M: Zhu Yi <yi.zhu@intel.com>
M: Intel Linux Wireless <ilw@linux.intel.com> M: Intel Linux Wireless <ilw@linux.intel.com>
L: linux-wireless@vger.kernel.org L: linux-wireless@vger.kernel.org
S: Supported S: Supported
@ -3165,7 +3162,7 @@ F: Documentation/hwmon/it87
F: drivers/hwmon/it87.c F: drivers/hwmon/it87.c
IVTV VIDEO4LINUX DRIVER IVTV VIDEO4LINUX DRIVER
M: Andy Walls <awalls@radix.net> M: Andy Walls <awalls@md.metrocast.net>
L: ivtv-devel@ivtvdriver.org (moderated for non-subscribers) L: ivtv-devel@ivtvdriver.org (moderated for non-subscribers)
L: linux-media@vger.kernel.org L: linux-media@vger.kernel.org
T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git
@ -3242,7 +3239,7 @@ L: autofs@linux.kernel.org
S: Maintained S: Maintained
F: fs/autofs4/ F: fs/autofs4/
KERNEL BUILD KERNEL BUILD + files below scripts/ (unless maintained elsewhere)
M: Michal Marek <mmarek@suse.cz> M: Michal Marek <mmarek@suse.cz>
T: git git://repo.or.cz/linux-kbuild.git for-next T: git git://repo.or.cz/linux-kbuild.git for-next
T: git git://repo.or.cz/linux-kbuild.git for-linus T: git git://repo.or.cz/linux-kbuild.git for-linus
@ -3251,6 +3248,9 @@ S: Maintained
F: Documentation/kbuild/ F: Documentation/kbuild/
F: Makefile F: Makefile
F: scripts/Makefile.* F: scripts/Makefile.*
F: scripts/basic/
F: scripts/mk*
F: scripts/package/
KERNEL JANITORS KERNEL JANITORS
L: kernel-janitors@vger.kernel.org L: kernel-janitors@vger.kernel.org
@ -3493,9 +3493,8 @@ F: arch/powerpc/platforms/83xx/
LINUX FOR POWERPC PA SEMI PWRFICIENT LINUX FOR POWERPC PA SEMI PWRFICIENT
M: Olof Johansson <olof@lixom.net> M: Olof Johansson <olof@lixom.net>
W: http://www.pasemi.com/
L: linuxppc-dev@ozlabs.org L: linuxppc-dev@ozlabs.org
S: Supported S: Maintained
F: arch/powerpc/platforms/pasemi/ F: arch/powerpc/platforms/pasemi/
F: drivers/*/*pasemi* F: drivers/*/*pasemi*
F: drivers/*/*/*pasemi* F: drivers/*/*/*pasemi*

View File

@ -1,7 +1,7 @@
VERSION = 2 VERSION = 2
PATCHLEVEL = 6 PATCHLEVEL = 6
SUBLEVEL = 35 SUBLEVEL = 35
EXTRAVERSION = -rc1 EXTRAVERSION = -rc3
NAME = Sheep on Meth NAME = Sheep on Meth
# *DOCUMENTATION* # *DOCUMENTATION*
@ -183,11 +183,14 @@ SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
# CROSS_COMPILE can be set on the command line # CROSS_COMPILE can be set on the command line
# make CROSS_COMPILE=ia64-linux- # make CROSS_COMPILE=ia64-linux-
# Alternatively CROSS_COMPILE can be set in the environment. # Alternatively CROSS_COMPILE can be set in the environment.
# A third alternative is to store a setting in .config so that plain
# "make" in the configured kernel build directory always uses that.
# Default value for CROSS_COMPILE is not to prefix executables # Default value for CROSS_COMPILE is not to prefix executables
# Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile # Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile
export KBUILD_BUILDHOST := $(SUBARCH) export KBUILD_BUILDHOST := $(SUBARCH)
ARCH ?= $(SUBARCH) ARCH ?= $(SUBARCH)
CROSS_COMPILE ?= CROSS_COMPILE ?=
CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%)
# Architecture as present in compile.h # Architecture as present in compile.h
UTS_MACHINE := $(ARCH) UTS_MACHINE := $(ARCH)
@ -576,9 +579,6 @@ KBUILD_CFLAGS += $(call cc-option,-Wno-pointer-sign,)
# disable invalid "can't wrap" optimizations for signed / pointers # disable invalid "can't wrap" optimizations for signed / pointers
KBUILD_CFLAGS += $(call cc-option,-fno-strict-overflow) KBUILD_CFLAGS += $(call cc-option,-fno-strict-overflow)
# revert to pre-gcc-4.4 behaviour of .eh_frame
KBUILD_CFLAGS += $(call cc-option,-fno-dwarf2-cfi-asm)
# conserve stack if available # conserve stack if available
KBUILD_CFLAGS += $(call cc-option,-fconserve-stack) KBUILD_CFLAGS += $(call cc-option,-fconserve-stack)
@ -882,9 +882,6 @@ $(sort $(vmlinux-init) $(vmlinux-main)) $(vmlinux-lds): $(vmlinux-dirs) ;
PHONY += $(vmlinux-dirs) PHONY += $(vmlinux-dirs)
$(vmlinux-dirs): prepare scripts $(vmlinux-dirs): prepare scripts
$(Q)$(MAKE) $(build)=$@ $(Q)$(MAKE) $(build)=$@
ifdef CONFIG_MODULES
$(Q)$(MAKE) $(modbuiltin)=$@
endif
# Build the kernel release string # Build the kernel release string
# #
@ -907,14 +904,19 @@ endif
# $(localver) # $(localver)
# localversion* (files without backups, containing '~') # localversion* (files without backups, containing '~')
# $(CONFIG_LOCALVERSION) (from kernel config setting) # $(CONFIG_LOCALVERSION) (from kernel config setting)
# $(localver-auto) (only if CONFIG_LOCALVERSION_AUTO is set) # $(LOCALVERSION) (from make command line, if provided)
# ./scripts/setlocalversion (SCM tag, if one exists) # $(localver-extra)
# $(LOCALVERSION) (from make command line if provided) # $(scm-identifier) (unique SCM tag, if one exists)
# ./scripts/setlocalversion (only with CONFIG_LOCALVERSION_AUTO)
# .scmversion (only with CONFIG_LOCALVERSION_AUTO)
# + (only without CONFIG_LOCALVERSION_AUTO
# and without LOCALVERSION= and
# repository is at non-tagged commit)
# #
# Note how the final $(localver-auto) string is included *only* if the # For kernels without CONFIG_LOCALVERSION_AUTO compiled from an SCM that has
# kernel config option CONFIG_LOCALVERSION_AUTO is selected. Also, at the # been revised beyond a tagged commit, `+' is appended to the version string
# moment, only git is supported but other SCMs can edit the script # when not overridden by using "make LOCALVERSION=". This indicates that the
# scripts/setlocalversion and add the appropriate checks as needed. # kernel is not a vanilla release version and has been modified.
pattern = ".*/localversion[^~]*" pattern = ".*/localversion[^~]*"
string = $(shell cat /dev/null \ string = $(shell cat /dev/null \
@ -923,26 +925,32 @@ string = $(shell cat /dev/null \
localver = $(subst $(space),, $(string) \ localver = $(subst $(space),, $(string) \
$(patsubst "%",%,$(CONFIG_LOCALVERSION))) $(patsubst "%",%,$(CONFIG_LOCALVERSION)))
# If CONFIG_LOCALVERSION_AUTO is set scripts/setlocalversion is called # scripts/setlocalversion is called to create a unique identifier if the source
# and if the SCM is know a tag from the SCM is appended. # is managed by a known SCM and the repository has been revised since the last
# The appended tag is determined by the SCM used. # tagged (release) commit. The format of the identifier is determined by the
# SCM's implementation.
# #
# .scmversion is used when generating rpm packages so we do not loose # .scmversion is used when generating rpm packages so we do not loose
# the version information from the SCM when we do the build of the kernel # the version information from the SCM when we do the build of the kernel
# from the copied source # from the copied source
ifdef CONFIG_LOCALVERSION_AUTO
ifeq ($(wildcard .scmversion),) ifeq ($(wildcard .scmversion),)
_localver-auto = $(shell $(CONFIG_SHELL) \ scm-identifier = $(shell $(CONFIG_SHELL) \
$(srctree)/scripts/setlocalversion $(srctree)) $(srctree)/scripts/setlocalversion $(srctree))
else else
_localver-auto = $(shell cat .scmversion 2> /dev/null) scm-identifier = $(shell cat .scmversion 2> /dev/null)
endif endif
localver-auto = $(LOCALVERSION)$(_localver-auto) ifdef CONFIG_LOCALVERSION_AUTO
localver-extra = $(scm-identifier)
else
ifneq ($(scm-identifier),)
ifeq ($(LOCALVERSION),)
localver-extra = +
endif
endif
endif endif
localver-full = $(localver)$(localver-auto) localver-full = $(localver)$(LOCALVERSION)$(localver-extra)
# Store (new) KERNELRELASE string in include/config/kernel.release # Store (new) KERNELRELASE string in include/config/kernel.release
kernelrelease = $(KERNELVERSION)$(localver-full) kernelrelease = $(KERNELVERSION)$(localver-full)
@ -1087,13 +1095,18 @@ all: modules
# using awk while concatenating to the final file. # using awk while concatenating to the final file.
PHONY += modules PHONY += modules
modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux) modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux) modules.builtin
$(Q)$(AWK) '!x[$$0]++' $(vmlinux-dirs:%=$(objtree)/%/modules.order) > $(objtree)/modules.order $(Q)$(AWK) '!x[$$0]++' $(vmlinux-dirs:%=$(objtree)/%/modules.order) > $(objtree)/modules.order
$(Q)$(AWK) '!x[$$0]++' $(vmlinux-dirs:%=$(objtree)/%/modules.builtin) > $(objtree)/modules.builtin
@$(kecho) ' Building modules, stage 2.'; @$(kecho) ' Building modules, stage 2.';
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.fwinst obj=firmware __fw_modbuild $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.fwinst obj=firmware __fw_modbuild
modules.builtin: $(vmlinux-dirs:%=%/modules.builtin)
$(Q)$(AWK) '!x[$$0]++' $^ > $(objtree)/modules.builtin
%/modules.builtin: include/config/auto.conf
$(Q)$(MAKE) $(modbuiltin)=$*
# Target to prepare building external modules # Target to prepare building external modules
PHONY += modules_prepare PHONY += modules_prepare
@ -1249,7 +1262,9 @@ help:
@echo ' firmware_install- Install all firmware to INSTALL_FW_PATH' @echo ' firmware_install- Install all firmware to INSTALL_FW_PATH'
@echo ' (default: $$(INSTALL_MOD_PATH)/lib/firmware)' @echo ' (default: $$(INSTALL_MOD_PATH)/lib/firmware)'
@echo ' dir/ - Build all files in dir and below' @echo ' dir/ - Build all files in dir and below'
@echo ' dir/file.[ois] - Build specified target only' @echo ' dir/file.[oisS] - Build specified target only'
@echo ' dir/file.lst - Build specified mixed source/assembly target only'
@echo ' (requires a recent binutils and recent build (System.map))'
@echo ' dir/file.ko - Build module including final link' @echo ' dir/file.ko - Build module including final link'
@echo ' modules_prepare - Set up for building external modules' @echo ' modules_prepare - Set up for building external modules'
@echo ' tags/TAGS - Generate tags file for editors' @echo ' tags/TAGS - Generate tags file for editors'

View File

@ -951,8 +951,6 @@ static int sa1111_resume(struct platform_device *dev)
if (!save) if (!save)
return 0; return 0;
spin_lock_irqsave(&sachip->lock, flags);
/* /*
* Ensure that the SA1111 is still here. * Ensure that the SA1111 is still here.
* FIXME: shouldn't do this here. * FIXME: shouldn't do this here.
@ -969,6 +967,13 @@ static int sa1111_resume(struct platform_device *dev)
* First of all, wake up the chip. * First of all, wake up the chip.
*/ */
sa1111_wake(sachip); sa1111_wake(sachip);
/*
* Only lock for write ops. Also, sa1111_wake must be called with
* released spinlock!
*/
spin_lock_irqsave(&sachip->lock, flags);
sa1111_writel(0, sachip->base + SA1111_INTC + SA1111_INTEN0); sa1111_writel(0, sachip->base + SA1111_INTC + SA1111_INTEN0);
sa1111_writel(0, sachip->base + SA1111_INTC + SA1111_INTEN1); sa1111_writel(0, sachip->base + SA1111_INTC + SA1111_INTEN1);

View File

@ -17,6 +17,7 @@
#include <linux/err.h> #include <linux/err.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/completion.h>
#include <mach/dma.h> #include <mach/dma.h>
#define MSM_DMOV_CHANNEL_COUNT 16 #define MSM_DMOV_CHANNEL_COUNT 16

View File

@ -32,7 +32,10 @@ void clk_disable(struct clk *clk)
} }
EXPORT_SYMBOL(clk_disable); EXPORT_SYMBOL(clk_disable);
/* We have a fixed clock alone, for now */ static struct clk clk_24 = {
.rate = 2400000,
};
static struct clk clk_48 = { static struct clk clk_48 = {
.rate = 48 * 1000 * 1000, .rate = 48 * 1000 * 1000,
}; };
@ -50,6 +53,8 @@ static struct clk clk_default;
} }
static struct clk_lookup lookups[] = { static struct clk_lookup lookups[] = {
CLK(&clk_24, "mtu0"),
CLK(&clk_24, "mtu1"),
CLK(&clk_48, "uart0"), CLK(&clk_48, "uart0"),
CLK(&clk_48, "uart1"), CLK(&clk_48, "uart1"),
CLK(&clk_default, "gpio.0"), CLK(&clk_default, "gpio.0"),
@ -59,10 +64,8 @@ static struct clk_lookup lookups[] = {
CLK(&clk_default, "rng"), CLK(&clk_default, "rng"),
}; };
static int __init clk_init(void) int __init clk_init(void)
{ {
clkdev_add_table(lookups, ARRAY_SIZE(lookups)); clkdev_add_table(lookups, ARRAY_SIZE(lookups));
return 0; return 0;
} }
arch_initcall(clk_init);

View File

@ -11,3 +11,5 @@
struct clk { struct clk {
unsigned long rate; unsigned long rate;
}; };
int __init clk_init(void);

View File

@ -31,6 +31,8 @@
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
#include <asm/hardware/cache-l2x0.h> #include <asm/hardware/cache-l2x0.h>
#include "clock.h"
#define __MEM_4K_RESOURCE(x) \ #define __MEM_4K_RESOURCE(x) \
.res = {.start = (x), .end = (x) + SZ_4K - 1, .flags = IORESOURCE_MEM} .res = {.start = (x), .end = (x) + SZ_4K - 1, .flags = IORESOURCE_MEM}
@ -143,6 +145,12 @@ void __init cpu8815_init_irq(void)
/* This modified VIC cell has two register blocks, at 0 and 0x20 */ /* This modified VIC cell has two register blocks, at 0 and 0x20 */
vic_init(io_p2v(NOMADIK_IC_BASE + 0x00), IRQ_VIC_START + 0, ~0, 0); vic_init(io_p2v(NOMADIK_IC_BASE + 0x00), IRQ_VIC_START + 0, ~0, 0);
vic_init(io_p2v(NOMADIK_IC_BASE + 0x20), IRQ_VIC_START + 32, ~0, 0); vic_init(io_p2v(NOMADIK_IC_BASE + 0x20), IRQ_VIC_START + 32, ~0, 0);
/*
* Init clocks here so that they are available for system timer
* initialization.
*/
clk_init();
} }
/* /*

View File

@ -263,11 +263,11 @@ const struct matrix_keymap_data palmtc_keymap_data = {
.keymap_size = ARRAY_SIZE(palmtc_matrix_keys), .keymap_size = ARRAY_SIZE(palmtc_matrix_keys),
}; };
const static unsigned int palmtc_keypad_row_gpios[] = { static const unsigned int palmtc_keypad_row_gpios[] = {
0, 9, 10, 11 0, 9, 10, 11
}; };
const static unsigned int palmtc_keypad_col_gpios[] = { static const unsigned int palmtc_keypad_col_gpios[] = {
18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 79, 80 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 79, 80
}; };

View File

@ -818,6 +818,9 @@ static struct i2c_board_info akita_i2c_board_info[] = {
.type = "max7310", .type = "max7310",
.addr = 0x18, .addr = 0x18,
.platform_data = &akita_ioexp, .platform_data = &akita_ioexp,
}, {
.type = "wm8750",
.addr = 0x1b,
}, },
}; };

View File

@ -7,4 +7,5 @@ obj-$(CONFIG_UX500_SOC_DB5500) += cpu-db5500.o devices-db5500.o
obj-$(CONFIG_UX500_SOC_DB8500) += cpu-db8500.o devices-db8500.o obj-$(CONFIG_UX500_SOC_DB8500) += cpu-db8500.o devices-db8500.o
obj-$(CONFIG_MACH_U8500_MOP) += board-mop500.o obj-$(CONFIG_MACH_U8500_MOP) += board-mop500.o
obj-$(CONFIG_MACH_U5500) += board-u5500.o obj-$(CONFIG_MACH_U5500) += board-u5500.o
obj-$(CONFIG_SMP) += platsmp.o headsmp.o localtimer.o obj-$(CONFIG_SMP) += platsmp.o headsmp.o
obj-$(CONFIG_LOCAL_TIMERS) += localtimer.o

View File

@ -16,6 +16,7 @@
#include <asm/clkdev.h> #include <asm/clkdev.h>
#include <plat/mtu.h>
#include <mach/hardware.h> #include <mach/hardware.h>
#include "clock.h" #include "clock.h"
@ -59,6 +60,9 @@
#define PRCM_DMACLK_MGT 0x074 #define PRCM_DMACLK_MGT 0x074
#define PRCM_B2R2CLK_MGT 0x078 #define PRCM_B2R2CLK_MGT 0x078
#define PRCM_TVCLK_MGT 0x07C #define PRCM_TVCLK_MGT 0x07C
#define PRCM_TCR 0x1C8
#define PRCM_TCR_STOPPED (1 << 16)
#define PRCM_TCR_DOZE_MODE (1 << 17)
#define PRCM_UNIPROCLK_MGT 0x278 #define PRCM_UNIPROCLK_MGT 0x278
#define PRCM_SSPCLK_MGT 0x280 #define PRCM_SSPCLK_MGT 0x280
#define PRCM_RNGCLK_MGT 0x284 #define PRCM_RNGCLK_MGT 0x284
@ -120,10 +124,95 @@ void clk_disable(struct clk *clk)
} }
EXPORT_SYMBOL(clk_disable); EXPORT_SYMBOL(clk_disable);
/*
* The MTU has a separate, rather complex muxing setup
* with alternative parents (peripheral cluster or
* ULP or fixed 32768 Hz) depending on settings
*/
static unsigned long clk_mtu_get_rate(struct clk *clk)
{
void __iomem *addr = __io_address(U8500_PRCMU_BASE)
+ PRCM_TCR;
u32 tcr = readl(addr);
int mtu = (int) clk->data;
/*
* One of these is selected eventually
* TODO: Replace the constant with a reference
* to the ULP source once this is modeled.
*/
unsigned long clk32k = 32768;
unsigned long mturate;
unsigned long retclk;
/* Get the rate from the parent as a default */
if (clk->parent_periph)
mturate = clk_get_rate(clk->parent_periph);
else if (clk->parent_cluster)
mturate = clk_get_rate(clk->parent_cluster);
else
/* We need to be connected SOMEWHERE */
BUG();
/*
* Are we in doze mode?
* In this mode the parent peripheral or the fixed 32768 Hz
* clock is fed into the block.
*/
if (!(tcr & PRCM_TCR_DOZE_MODE)) {
/*
* Here we're using the clock input from the APE ULP
* clock domain. But first: are the timers stopped?
*/
if (tcr & PRCM_TCR_STOPPED) {
clk32k = 0;
mturate = 0;
} else {
/* Else default mode: 0 and 2.4 MHz */
clk32k = 0;
if (cpu_is_u5500())
/* DB5500 divides by 8 */
mturate /= 8;
else if (cpu_is_u8500ed()) {
/*
* This clocking setting must not be used
* in the ED chip, it is simply not
* connected anywhere!
*/
mturate = 0;
BUG();
} else
/*
* In this mode the ulp38m4 clock is divided
* by a factor 16, on the DB8500 typically
* 38400000 / 16 ~ 2.4 MHz.
* TODO: Replace the constant with a reference
* to the ULP source once this is modeled.
*/
mturate = 38400000 / 16;
}
}
/* Return the clock selected for this MTU */
if (tcr & (1 << mtu))
retclk = clk32k;
else
retclk = mturate;
pr_info("MTU%d clock rate: %lu Hz\n", mtu, retclk);
return retclk;
}
unsigned long clk_get_rate(struct clk *clk) unsigned long clk_get_rate(struct clk *clk)
{ {
unsigned long rate; unsigned long rate;
/*
* If there is a custom getrate callback for this clock,
* it will take precedence.
*/
if (clk->get_rate)
return clk->get_rate(clk);
if (clk->ops && clk->ops->get_rate) if (clk->ops && clk->ops->get_rate)
return clk->ops->get_rate(clk); return clk->ops->get_rate(clk);
@ -341,8 +430,9 @@ static DEFINE_PRCC_CLK(5, usb_v1, 0, 0, NULL);
/* Peripheral Cluster #6 */ /* Peripheral Cluster #6 */
static DEFINE_PRCC_CLK(6, mtu1_v1, 8, -1, NULL); /* MTU ID in data */
static DEFINE_PRCC_CLK(6, mtu0_v1, 7, -1, NULL); static DEFINE_PRCC_CLK_CUSTOM(6, mtu1_v1, 8, -1, NULL, clk_mtu_get_rate, 1);
static DEFINE_PRCC_CLK_CUSTOM(6, mtu0_v1, 7, -1, NULL, clk_mtu_get_rate, 0);
static DEFINE_PRCC_CLK(6, cfgreg_v1, 6, 6, NULL); static DEFINE_PRCC_CLK(6, cfgreg_v1, 6, 6, NULL);
static DEFINE_PRCC_CLK(6, dmc_ed, 6, 6, NULL); static DEFINE_PRCC_CLK(6, dmc_ed, 6, 6, NULL);
static DEFINE_PRCC_CLK(6, hash1, 5, -1, NULL); static DEFINE_PRCC_CLK(6, hash1, 5, -1, NULL);
@ -357,8 +447,9 @@ static DEFINE_PRCC_CLK(6, rng_v1, 0, 0, &clk_rngclk);
/* Peripheral Cluster #7 */ /* Peripheral Cluster #7 */
static DEFINE_PRCC_CLK(7, tzpc0_ed, 4, -1, NULL); static DEFINE_PRCC_CLK(7, tzpc0_ed, 4, -1, NULL);
static DEFINE_PRCC_CLK(7, mtu1_ed, 3, -1, NULL); /* MTU ID in data */
static DEFINE_PRCC_CLK(7, mtu0_ed, 2, -1, NULL); static DEFINE_PRCC_CLK_CUSTOM(7, mtu1_ed, 3, -1, NULL, clk_mtu_get_rate, 1);
static DEFINE_PRCC_CLK_CUSTOM(7, mtu0_ed, 2, -1, NULL, clk_mtu_get_rate, 0);
static DEFINE_PRCC_CLK(7, wdg_ed, 1, -1, NULL); static DEFINE_PRCC_CLK(7, wdg_ed, 1, -1, NULL);
static DEFINE_PRCC_CLK(7, cfgreg_ed, 0, -1, NULL); static DEFINE_PRCC_CLK(7, cfgreg_ed, 0, -1, NULL);
@ -503,15 +594,17 @@ static struct clk_lookup u8500_v1_clks[] = {
CLK(uiccclk, "uicc", NULL), CLK(uiccclk, "uicc", NULL),
}; };
static int __init clk_init(void) int __init clk_init(void)
{ {
if (cpu_is_u8500ed()) { if (cpu_is_u8500ed()) {
clk_prcmu_ops.enable = clk_prcmu_ed_enable; clk_prcmu_ops.enable = clk_prcmu_ed_enable;
clk_prcmu_ops.disable = clk_prcmu_ed_disable; clk_prcmu_ops.disable = clk_prcmu_ed_disable;
clk_per6clk.rate = 100000000;
} else if (cpu_is_u5500()) { } else if (cpu_is_u5500()) {
/* Clock tree for U5500 not implemented yet */ /* Clock tree for U5500 not implemented yet */
clk_prcc_ops.enable = clk_prcc_ops.disable = NULL; clk_prcc_ops.enable = clk_prcc_ops.disable = NULL;
clk_prcmu_ops.enable = clk_prcmu_ops.disable = NULL; clk_prcmu_ops.enable = clk_prcmu_ops.disable = NULL;
clk_per6clk.rate = 26000000;
} }
clkdev_add_table(u8500_common_clks, ARRAY_SIZE(u8500_common_clks)); clkdev_add_table(u8500_common_clks, ARRAY_SIZE(u8500_common_clks));
@ -522,4 +615,3 @@ static int __init clk_init(void)
return 0; return 0;
} }
arch_initcall(clk_init);

View File

@ -28,6 +28,9 @@ struct clkops {
* @ops: pointer to clkops struct used to control this clock * @ops: pointer to clkops struct used to control this clock
* @name: name, for debugging * @name: name, for debugging
* @enabled: refcount. positive if enabled, zero if disabled * @enabled: refcount. positive if enabled, zero if disabled
* @get_rate: custom callback for getting the clock rate
* @data: custom per-clock data for example for the get_rate
* callback
* @rate: fixed rate for clocks which don't implement * @rate: fixed rate for clocks which don't implement
* ops->getrate * ops->getrate
* @prcmu_cg_off: address offset of the combined enable/disable register * @prcmu_cg_off: address offset of the combined enable/disable register
@ -67,6 +70,8 @@ struct clk {
const struct clkops *ops; const struct clkops *ops;
const char *name; const char *name;
unsigned int enabled; unsigned int enabled;
unsigned long (*get_rate)(struct clk *);
void *data;
unsigned long rate; unsigned long rate;
struct list_head list; struct list_head list;
@ -117,9 +122,26 @@ struct clk clk_##_name = { \
.parent_periph = _kernclk \ .parent_periph = _kernclk \
} }
#define DEFINE_PRCC_CLK_CUSTOM(_pclust, _name, _bus_en, _kernel_en, _kernclk, _callback, _data) \
struct clk clk_##_name = { \
.name = #_name, \
.ops = &clk_prcc_ops, \
.cluster = _pclust, \
.prcc_bus = _bus_en, \
.prcc_kernel = _kernel_en, \
.parent_cluster = &clk_per##_pclust##clk, \
.parent_periph = _kernclk, \
.get_rate = _callback, \
.data = (void *) _data \
}
#define CLK(_clk, _devname, _conname) \ #define CLK(_clk, _devname, _conname) \
{ \ { \
.clk = &clk_##_clk, \ .clk = &clk_##_clk, \
.dev_id = _devname, \ .dev_id = _devname, \
.con_id = _conname, \ .con_id = _conname, \
} }
int __init clk_db8500_ed_fixup(void);
int __init clk_init(void);

View File

@ -62,6 +62,12 @@ void __init ux500_init_irq(void)
{ {
gic_dist_init(0, __io_address(UX500_GIC_DIST_BASE), 29); gic_dist_init(0, __io_address(UX500_GIC_DIST_BASE), 29);
gic_cpu_init(0, __io_address(UX500_GIC_CPU_BASE)); gic_cpu_init(0, __io_address(UX500_GIC_CPU_BASE));
/*
* Init clocks here so that they are available for system timer
* initialization.
*/
clk_init();
} }
#ifdef CONFIG_CACHE_L2X0 #ifdef CONFIG_CACHE_L2X0

View File

@ -18,7 +18,7 @@ feroceon_copy_user_page(void *kto, const void *kfrom)
{ {
asm("\ asm("\
stmfd sp!, {r4-r9, lr} \n\ stmfd sp!, {r4-r9, lr} \n\
mov ip, %0 \n\ mov ip, %2 \n\
1: mov lr, r1 \n\ 1: mov lr, r1 \n\
ldmia r1!, {r2 - r9} \n\ ldmia r1!, {r2 - r9} \n\
pld [lr, #32] \n\ pld [lr, #32] \n\
@ -64,7 +64,7 @@ feroceon_copy_user_page(void *kto, const void *kfrom)
mcr p15, 0, ip, c7, c10, 4 @ drain WB\n\ mcr p15, 0, ip, c7, c10, 4 @ drain WB\n\
ldmfd sp!, {r4-r9, pc}" ldmfd sp!, {r4-r9, pc}"
: :
: "I" (PAGE_SIZE)); : "r" (kto), "r" (kfrom), "I" (PAGE_SIZE));
} }
void feroceon_copy_user_highpage(struct page *to, struct page *from, void feroceon_copy_user_highpage(struct page *to, struct page *from,

View File

@ -27,7 +27,7 @@ v4wb_copy_user_page(void *kto, const void *kfrom)
{ {
asm("\ asm("\
stmfd sp!, {r4, lr} @ 2\n\ stmfd sp!, {r4, lr} @ 2\n\
mov r2, %0 @ 1\n\ mov r2, %2 @ 1\n\
ldmia r1!, {r3, r4, ip, lr} @ 4\n\ ldmia r1!, {r3, r4, ip, lr} @ 4\n\
1: mcr p15, 0, r0, c7, c6, 1 @ 1 invalidate D line\n\ 1: mcr p15, 0, r0, c7, c6, 1 @ 1 invalidate D line\n\
stmia r0!, {r3, r4, ip, lr} @ 4\n\ stmia r0!, {r3, r4, ip, lr} @ 4\n\
@ -44,7 +44,7 @@ v4wb_copy_user_page(void *kto, const void *kfrom)
mcr p15, 0, r1, c7, c10, 4 @ 1 drain WB\n\ mcr p15, 0, r1, c7, c10, 4 @ 1 drain WB\n\
ldmfd sp!, {r4, pc} @ 3" ldmfd sp!, {r4, pc} @ 3"
: :
: "I" (PAGE_SIZE / 64)); : "r" (kto), "r" (kfrom), "I" (PAGE_SIZE / 64));
} }
void v4wb_copy_user_highpage(struct page *to, struct page *from, void v4wb_copy_user_highpage(struct page *to, struct page *from,

View File

@ -25,7 +25,7 @@ v4wt_copy_user_page(void *kto, const void *kfrom)
{ {
asm("\ asm("\
stmfd sp!, {r4, lr} @ 2\n\ stmfd sp!, {r4, lr} @ 2\n\
mov r2, %0 @ 1\n\ mov r2, %2 @ 1\n\
ldmia r1!, {r3, r4, ip, lr} @ 4\n\ ldmia r1!, {r3, r4, ip, lr} @ 4\n\
1: stmia r0!, {r3, r4, ip, lr} @ 4\n\ 1: stmia r0!, {r3, r4, ip, lr} @ 4\n\
ldmia r1!, {r3, r4, ip, lr} @ 4+1\n\ ldmia r1!, {r3, r4, ip, lr} @ 4+1\n\
@ -40,7 +40,7 @@ v4wt_copy_user_page(void *kto, const void *kfrom)
mcr p15, 0, r2, c7, c7, 0 @ flush ID cache\n\ mcr p15, 0, r2, c7, c7, 0 @ flush ID cache\n\
ldmfd sp!, {r4, pc} @ 3" ldmfd sp!, {r4, pc} @ 3"
: :
: "I" (PAGE_SIZE / 64)); : "r" (kto), "r" (kfrom), "I" (PAGE_SIZE / 64));
} }
void v4wt_copy_user_highpage(struct page *to, struct page *from, void v4wt_copy_user_highpage(struct page *to, struct page *from,

View File

@ -34,7 +34,7 @@ xsc3_mc_copy_user_page(void *kto, const void *kfrom)
{ {
asm("\ asm("\
stmfd sp!, {r4, r5, lr} \n\ stmfd sp!, {r4, r5, lr} \n\
mov lr, %0 \n\ mov lr, %2 \n\
\n\ \n\
pld [r1, #0] \n\ pld [r1, #0] \n\
pld [r1, #32] \n\ pld [r1, #32] \n\
@ -67,7 +67,7 @@ xsc3_mc_copy_user_page(void *kto, const void *kfrom)
\n\ \n\
ldmfd sp!, {r4, r5, pc}" ldmfd sp!, {r4, r5, pc}"
: :
: "I" (PAGE_SIZE / 64 - 1)); : "r" (kto), "r" (kfrom), "I" (PAGE_SIZE / 64 - 1));
} }
void xsc3_mc_copy_user_highpage(struct page *to, struct page *from, void xsc3_mc_copy_user_highpage(struct page *to, struct page *from,

View File

@ -393,6 +393,9 @@ do_translation_fault(unsigned long addr, unsigned int fsr,
if (addr < TASK_SIZE) if (addr < TASK_SIZE)
return do_page_fault(addr, fsr, regs); return do_page_fault(addr, fsr, regs);
if (user_mode(regs))
goto bad_area;
index = pgd_index(addr); index = pgd_index(addr);
/* /*

View File

@ -48,7 +48,16 @@ void *kmap_atomic(struct page *page, enum km_type type)
debug_kmap_atomic(type); debug_kmap_atomic(type);
kmap = kmap_high_get(page); #ifdef CONFIG_DEBUG_HIGHMEM
/*
* There is no cache coherency issue when non VIVT, so force the
* dedicated kmap usage for better debugging purposes in that case.
*/
if (!cache_is_vivt())
kmap = NULL;
else
#endif
kmap = kmap_high_get(page);
if (kmap) if (kmap)
return kmap; return kmap;

View File

@ -678,10 +678,10 @@ void __init mem_init(void)
void free_initmem(void) void free_initmem(void)
{ {
#ifdef CONFIG_HAVE_TCM #ifdef CONFIG_HAVE_TCM
extern char *__tcm_start, *__tcm_end; extern char __tcm_start, __tcm_end;
totalram_pages += free_area(__phys_to_pfn(__pa(__tcm_start)), totalram_pages += free_area(__phys_to_pfn(__pa(&__tcm_start)),
__phys_to_pfn(__pa(__tcm_end)), __phys_to_pfn(__pa(&__tcm_end)),
"TCM link"); "TCM link");
#endif #endif

View File

@ -13,7 +13,9 @@
#include <linux/irq.h> #include <linux/irq.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/clockchips.h> #include <linux/clockchips.h>
#include <linux/clk.h>
#include <linux/jiffies.h> #include <linux/jiffies.h>
#include <linux/err.h>
#include <asm/mach/time.h> #include <asm/mach/time.h>
#include <plat/mtu.h> #include <plat/mtu.h>
@ -124,13 +126,25 @@ static struct irqaction nmdk_timer_irq = {
void __init nmdk_timer_init(void) void __init nmdk_timer_init(void)
{ {
unsigned long rate; unsigned long rate;
u32 cr = MTU_CRn_32BITS;; struct clk *clk0;
struct clk *clk1;
u32 cr;
clk0 = clk_get_sys("mtu0", NULL);
BUG_ON(IS_ERR(clk0));
clk1 = clk_get_sys("mtu1", NULL);
BUG_ON(IS_ERR(clk1));
clk_enable(clk0);
clk_enable(clk1);
/* /*
* Tick rate is 2.4MHz for Nomadik and 110MHz for ux500: * Tick rate is 2.4MHz for Nomadik and 110MHz for ux500:
* use a divide-by-16 counter if it's more than 16MHz * use a divide-by-16 counter if it's more than 16MHz
*/ */
rate = CLOCK_TICK_RATE; cr = MTU_CRn_32BITS;;
rate = clk_get_rate(clk0);
if (rate > 16 << 20) { if (rate > 16 << 20) {
rate /= 16; rate /= 16;
cr |= MTU_CRn_PRESCALE_16; cr |= MTU_CRn_PRESCALE_16;
@ -153,6 +167,14 @@ void __init nmdk_timer_init(void)
nmdk_clksrc.name); nmdk_clksrc.name);
/* Timer 1 is used for events, fix according to rate */ /* Timer 1 is used for events, fix according to rate */
cr = MTU_CRn_32BITS;
rate = clk_get_rate(clk1);
if (rate > 16 << 20) {
rate /= 16;
cr |= MTU_CRn_PRESCALE_16;
} else {
cr |= MTU_CRn_PRESCALE_1;
}
writel(cr | MTU_CRn_ONESHOT, mtu_base + MTU_CR(1)); /* off, currently */ writel(cr | MTU_CRn_ONESHOT, mtu_base + MTU_CR(1)); /* off, currently */
nmdk_clkevt.mult = div_sc(rate, NSEC_PER_SEC, nmdk_clkevt.shift); nmdk_clkevt.mult = div_sc(rate, NSEC_PER_SEC, nmdk_clkevt.shift);
nmdk_clkevt.max_delta_ns = nmdk_clkevt.max_delta_ns =

View File

@ -277,7 +277,7 @@ ENTRY(vfp_put_double)
#ifdef CONFIG_VFPv3 #ifdef CONFIG_VFPv3
@ d16 - d31 registers @ d16 - d31 registers
.irp dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 .irp dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
1: mcrr p11, 3, r1, r2, c\dr @ fmdrr r1, r2, d\dr 1: mcrr p11, 3, r0, r1, c\dr @ fmdrr r0, r1, d\dr
mov pc, lr mov pc, lr
.org 1b + 8 .org 1b + 8
.endr .endr

View File

@ -19,6 +19,7 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/miscdevice.h> #include <linux/miscdevice.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/smp_lock.h>
#include <linux/bcd.h> #include <linux/bcd.h>
#include <linux/capability.h> #include <linux/capability.h>
@ -238,9 +239,7 @@ static unsigned char days_in_mo[] =
/* ioctl that supports RTC_RD_TIME and RTC_SET_TIME (read and set time/date). */ /* ioctl that supports RTC_RD_TIME and RTC_SET_TIME (read and set time/date). */
static int static int rtc_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
rtc_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
unsigned long arg)
{ {
unsigned long flags; unsigned long flags;
@ -354,6 +353,17 @@ rtc_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
} }
} }
static long rtc_unlocked_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{
int ret;
lock_kernel();
ret = rtc_ioctl(file, cmd, arg);
unlock_kernel();
return ret;
}
static void static void
print_rtc_status(void) print_rtc_status(void)
{ {
@ -375,8 +385,8 @@ print_rtc_status(void)
/* The various file operations we support. */ /* The various file operations we support. */
static const struct file_operations rtc_fops = { static const struct file_operations rtc_fops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.ioctl = rtc_ioctl, .unlocked_ioctl = rtc_unlocked_ioctl,
}; };
/* Probe for the chip by writing something to its RAM and try reading it back. */ /* Probe for the chip by writing something to its RAM and try reading it back. */

View File

@ -27,6 +27,7 @@
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/bcd.h> #include <linux/bcd.h>
#include <linux/mutex.h> #include <linux/mutex.h>
#include <linux/smp_lock.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <asm/system.h> #include <asm/system.h>
@ -53,7 +54,7 @@ static DEFINE_MUTEX(rtc_lock); /* Protect state etc */
static const unsigned char days_in_month[] = static const unsigned char days_in_month[] =
{ 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int pcf8563_ioctl(struct inode *, struct file *, unsigned int, unsigned long); static long pcf8563_unlocked_ioctl(struct file *, unsigned int, unsigned long);
/* Cache VL bit value read at driver init since writing the RTC_SECOND /* Cache VL bit value read at driver init since writing the RTC_SECOND
* register clears the VL status. * register clears the VL status.
@ -62,7 +63,7 @@ static int voltage_low;
static const struct file_operations pcf8563_fops = { static const struct file_operations pcf8563_fops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.ioctl = pcf8563_ioctl, .unlocked_ioctl = pcf8563_unlocked_ioctl,
}; };
unsigned char unsigned char
@ -212,8 +213,7 @@ pcf8563_exit(void)
* ioctl calls for this driver. Why return -ENOTTY upon error? Because * ioctl calls for this driver. Why return -ENOTTY upon error? Because
* POSIX says so! * POSIX says so!
*/ */
int pcf8563_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, static int pcf8563_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
unsigned long arg)
{ {
/* Some sanity checks. */ /* Some sanity checks. */
if (_IOC_TYPE(cmd) != RTC_MAGIC) if (_IOC_TYPE(cmd) != RTC_MAGIC)
@ -339,6 +339,17 @@ int pcf8563_ioctl(struct inode *inode, struct file *filp, unsigned int cmd,
return 0; return 0;
} }
static long pcf8563_unlocked_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
{
int ret;
lock_kernel();
return pcf8563_ioctl(filp, cmd, arg);
unlock_kernel();
return ret;
}
static int __init pcf8563_register(void) static int __init pcf8563_register(void)
{ {
if (pcf8563_init() < 0) { if (pcf8563_init() < 0) {

View File

@ -17,8 +17,8 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/init.h> #include <linux/init.h>
#define mask_irq(irq_nr) (*R_VECT_MASK_CLR = 1 << (irq_nr)); #define crisv10_mask_irq(irq_nr) (*R_VECT_MASK_CLR = 1 << (irq_nr));
#define unmask_irq(irq_nr) (*R_VECT_MASK_SET = 1 << (irq_nr)); #define crisv10_unmask_irq(irq_nr) (*R_VECT_MASK_SET = 1 << (irq_nr));
/* don't use set_int_vector, it bypasses the linux interrupt handlers. it is /* don't use set_int_vector, it bypasses the linux interrupt handlers. it is
* global just so that the kernel gdb can use it. * global just so that the kernel gdb can use it.
@ -116,12 +116,12 @@ static unsigned int startup_crisv10_irq(unsigned int irq)
static void enable_crisv10_irq(unsigned int irq) static void enable_crisv10_irq(unsigned int irq)
{ {
unmask_irq(irq); crisv10_unmask_irq(irq);
} }
static void disable_crisv10_irq(unsigned int irq) static void disable_crisv10_irq(unsigned int irq)
{ {
mask_irq(irq); crisv10_mask_irq(irq);
} }
static void ack_crisv10_irq(unsigned int irq) static void ack_crisv10_irq(unsigned int irq)

View File

@ -1,5 +1,4 @@
/* $Id: dmacopy.c,v 1.1 2001/12/17 13:59:27 bjornw Exp $ /*
*
* memcpy for large blocks, using memory-memory DMA channels 6 and 7 in Etrax * memcpy for large blocks, using memory-memory DMA channels 6 and 7 in Etrax
*/ */
@ -13,11 +12,11 @@ void *dma_memcpy(void *pdst,
unsigned int pn) unsigned int pn)
{ {
static etrax_dma_descr indma, outdma; static etrax_dma_descr indma, outdma;
D(printk("dma_memcpy %d bytes... ", pn)); D(printk(KERN_DEBUG "dma_memcpy %d bytes... ", pn));
#if 0 #if 0
*R_GEN_CONFIG = genconfig_shadow = *R_GEN_CONFIG = genconfig_shadow =
(genconfig_shadow & ~0x3c0000) | (genconfig_shadow & ~0x3c0000) |
IO_STATE(R_GEN_CONFIG, dma6, intdma7) | IO_STATE(R_GEN_CONFIG, dma6, intdma7) |
IO_STATE(R_GEN_CONFIG, dma7, intdma6); IO_STATE(R_GEN_CONFIG, dma7, intdma6);
@ -32,11 +31,11 @@ void *dma_memcpy(void *pdst,
*R_DMA_CH7_FIRST = &outdma; *R_DMA_CH7_FIRST = &outdma;
*R_DMA_CH6_CMD = IO_STATE(R_DMA_CH6_CMD, cmd, start); *R_DMA_CH6_CMD = IO_STATE(R_DMA_CH6_CMD, cmd, start);
*R_DMA_CH7_CMD = IO_STATE(R_DMA_CH7_CMD, cmd, start); *R_DMA_CH7_CMD = IO_STATE(R_DMA_CH7_CMD, cmd, start);
while(*R_DMA_CH7_CMD == 1) /* wait for completion */ ;
D(printk("done\n")); while (*R_DMA_CH7_CMD == 1)
/* wait for completion */;
D(printk(KERN_DEBUG "done\n"));
} }

View File

@ -1,13 +1,11 @@
/* /*
* $Id: hw_settings.S,v 1.1 2001/12/17 13:59:27 bjornw Exp $
*
* This table is used by some tools to extract hardware parameters. * This table is used by some tools to extract hardware parameters.
* The table should be included in the kernel and the decompressor. * The table should be included in the kernel and the decompressor.
* Don't forget to update the tools if you change this table. * Don't forget to update the tools if you change this table.
* *
* Copyright (C) 2001 Axis Communications AB * Copyright (C) 2001 Axis Communications AB
* *
* Authors: Mikael Starvik (starvik@axis.com) * Authors: Mikael Starvik (starvik@axis.com)
*/ */
#define PA_SET_VALUE ((CONFIG_ETRAX_DEF_R_PORT_PA_DIR << 8) | \ #define PA_SET_VALUE ((CONFIG_ETRAX_DEF_R_PORT_PA_DIR << 8) | \
@ -15,13 +13,13 @@
#define PB_SET_VALUE ((CONFIG_ETRAX_DEF_R_PORT_PB_CONFIG << 16) | \ #define PB_SET_VALUE ((CONFIG_ETRAX_DEF_R_PORT_PB_CONFIG << 16) | \
(CONFIG_ETRAX_DEF_R_PORT_PB_DIR << 8) | \ (CONFIG_ETRAX_DEF_R_PORT_PB_DIR << 8) | \
(CONFIG_ETRAX_DEF_R_PORT_PB_DATA)) (CONFIG_ETRAX_DEF_R_PORT_PB_DATA))
.ascii "HW_PARAM_MAGIC" ; Magic number .ascii "HW_PARAM_MAGIC" ; Magic number
.dword 0xc0004000 ; Kernel start address .dword 0xc0004000 ; Kernel start address
; Debug port ; Debug port
#ifdef CONFIG_ETRAX_DEBUG_PORT0 #ifdef CONFIG_ETRAX_DEBUG_PORT0
.dword 0 .dword 0
#elif defined(CONFIG_ETRAX_DEBUG_PORT1) #elif defined(CONFIG_ETRAX_DEBUG_PORT1)
.dword 1 .dword 1
#elif defined(CONFIG_ETRAX_DEBUG_PORT2) #elif defined(CONFIG_ETRAX_DEBUG_PORT2)
@ -30,7 +28,7 @@
.dword 3 .dword 3
#else #else
.dword 4 ; No debug .dword 4 ; No debug
#endif #endif
; SDRAM or EDO DRAM? ; SDRAM or EDO DRAM?
#ifdef CONFIG_ETRAX_SDRAM #ifdef CONFIG_ETRAX_SDRAM
@ -39,7 +37,7 @@
.dword 0 .dword 0
#endif #endif
; Register values ; Register values
.dword R_WAITSTATES .dword R_WAITSTATES
.dword CONFIG_ETRAX_DEF_R_WAITSTATES .dword CONFIG_ETRAX_DEF_R_WAITSTATES
.dword R_BUS_CONFIG .dword R_BUS_CONFIG
@ -56,7 +54,7 @@
.dword CONFIG_ETRAX_DEF_R_DRAM_TIMING .dword CONFIG_ETRAX_DEF_R_DRAM_TIMING
#endif #endif
.dword R_PORT_PA_SET .dword R_PORT_PA_SET
.dword PA_SET_VALUE .dword PA_SET_VALUE
.dword R_PORT_PB_SET .dword R_PORT_PB_SET
.dword PB_SET_VALUE .dword PB_SET_VALUE
.dword 0 ; No more register values .dword 0 ; No more register values

View File

@ -360,24 +360,10 @@ config ETRAX_SER4_DSR_BIT
string "Ser 4 DSR bit (empty = not used)" string "Ser 4 DSR bit (empty = not used)"
depends on ETRAX_SERIAL_PORT4 depends on ETRAX_SERIAL_PORT4
config ETRAX_SER3_CD_BIT config ETRAX_SER4_CD_BIT
string "Ser 4 CD bit (empty = not used)" string "Ser 4 CD bit (empty = not used)"
depends on ETRAX_SERIAL_PORT4 depends on ETRAX_SERIAL_PORT4
config ETRAX_RS485
bool "RS-485 support"
depends on ETRAXFS_SERIAL
help
Enables support for RS-485 serial communication. For a primer on
RS-485, see <http://www.hw.cz/english/docs/rs485/rs485.html>.
config ETRAX_RS485_DISABLE_RECEIVER
bool "Disable serial receiver"
depends on ETRAX_RS485
help
It is necessary to disable the serial receiver to avoid serial
loopback. Not all products are able to do this in software only.
config ETRAX_SYNCHRONOUS_SERIAL config ETRAX_SYNCHRONOUS_SERIAL
bool "Synchronous serial-port support" bool "Synchronous serial-port support"
depends on ETRAX_ARCH_V32 depends on ETRAX_ARCH_V32

View File

@ -649,10 +649,10 @@ i2c_release(struct inode *inode, struct file *filp)
/* Main device API. ioctl's to write or read to/from i2c registers. /* Main device API. ioctl's to write or read to/from i2c registers.
*/ */
static int static long
i2c_ioctl(struct inode *inode, struct file *file, i2c_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
unsigned int cmd, unsigned long arg)
{ {
int ret;
if(_IOC_TYPE(cmd) != ETRAXI2C_IOCTYPE) { if(_IOC_TYPE(cmd) != ETRAXI2C_IOCTYPE) {
return -ENOTTY; return -ENOTTY;
} }
@ -665,9 +665,13 @@ i2c_ioctl(struct inode *inode, struct file *file,
I2C_ARGREG(arg), I2C_ARGREG(arg),
I2C_ARGVALUE(arg))); I2C_ARGVALUE(arg)));
return i2c_writereg(I2C_ARGSLAVE(arg), lock_kernel();
ret = i2c_writereg(I2C_ARGSLAVE(arg),
I2C_ARGREG(arg), I2C_ARGREG(arg),
I2C_ARGVALUE(arg)); I2C_ARGVALUE(arg));
unlock_kernel();
return ret;
case I2C_READREG: case I2C_READREG:
{ {
unsigned char val; unsigned char val;
@ -675,7 +679,9 @@ i2c_ioctl(struct inode *inode, struct file *file,
D(printk("i2cr %d %d ", D(printk("i2cr %d %d ",
I2C_ARGSLAVE(arg), I2C_ARGSLAVE(arg),
I2C_ARGREG(arg))); I2C_ARGREG(arg)));
lock_kernel();
val = i2c_readreg(I2C_ARGSLAVE(arg), I2C_ARGREG(arg)); val = i2c_readreg(I2C_ARGSLAVE(arg), I2C_ARGREG(arg));
unlock_kernel();
D(printk("= %d\n", val)); D(printk("= %d\n", val));
return val; return val;
} }
@ -688,10 +694,10 @@ i2c_ioctl(struct inode *inode, struct file *file,
} }
static const struct file_operations i2c_fops = { static const struct file_operations i2c_fops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.ioctl = i2c_ioctl, .unlocked_ioctl = i2c_ioctl,
.open = i2c_open, .open = i2c_open,
.release = i2c_release, .release = i2c_release,
}; };
static int __init i2c_init(void) static int __init i2c_init(void)

View File

@ -24,6 +24,7 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/fs.h> #include <linux/fs.h>
#include <linux/ioctl.h> #include <linux/ioctl.h>
#include <linux/smp_lock.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/bcd.h> #include <linux/bcd.h>
#include <linux/mutex.h> #include <linux/mutex.h>
@ -49,7 +50,7 @@ static DEFINE_MUTEX(rtc_lock); /* Protect state etc */
static const unsigned char days_in_month[] = static const unsigned char days_in_month[] =
{ 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int pcf8563_ioctl(struct inode *, struct file *, unsigned int, unsigned long); static long pcf8563_unlocked_ioctl(struct file *filp, unsigned int cmd, unsigned long arg);
/* Cache VL bit value read at driver init since writing the RTC_SECOND /* Cache VL bit value read at driver init since writing the RTC_SECOND
* register clears the VL status. * register clears the VL status.
@ -57,8 +58,8 @@ int pcf8563_ioctl(struct inode *, struct file *, unsigned int, unsigned long);
static int voltage_low; static int voltage_low;
static const struct file_operations pcf8563_fops = { static const struct file_operations pcf8563_fops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.ioctl = pcf8563_ioctl .unlocked_ioctl = pcf8563_unlocked_ioctl,
}; };
unsigned char unsigned char
@ -208,8 +209,7 @@ pcf8563_exit(void)
* ioctl calls for this driver. Why return -ENOTTY upon error? Because * ioctl calls for this driver. Why return -ENOTTY upon error? Because
* POSIX says so! * POSIX says so!
*/ */
int pcf8563_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, static int pcf8563_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
unsigned long arg)
{ {
/* Some sanity checks. */ /* Some sanity checks. */
if (_IOC_TYPE(cmd) != RTC_MAGIC) if (_IOC_TYPE(cmd) != RTC_MAGIC)
@ -335,6 +335,17 @@ int pcf8563_ioctl(struct inode *inode, struct file *filp, unsigned int cmd,
return 0; return 0;
} }
static long pcf8563_unlocked_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
{
int ret;
lock_kernel();
return pcf8563_ioctl(filp, cmd, arg);
unlock_kernel();
return ret;
}
static int __init pcf8563_register(void) static int __init pcf8563_register(void)
{ {
if (pcf8563_init() < 0) { if (pcf8563_init() < 0) {

View File

@ -24,5 +24,5 @@ EXPORT_SYMBOL(crisv32_io_get_name);
EXPORT_SYMBOL(crisv32_io_get); EXPORT_SYMBOL(crisv32_io_get);
/* Functions masking/unmasking interrupts */ /* Functions masking/unmasking interrupts */
EXPORT_SYMBOL(mask_irq); EXPORT_SYMBOL(crisv32_mask_irq);
EXPORT_SYMBOL(unmask_irq); EXPORT_SYMBOL(crisv32_unmask_irq);

View File

@ -280,8 +280,7 @@ out:
return cpu; return cpu;
} }
void void crisv32_mask_irq(int irq)
mask_irq(int irq)
{ {
int cpu; int cpu;
@ -289,8 +288,7 @@ mask_irq(int irq)
block_irq(irq, cpu); block_irq(irq, cpu);
} }
void void crisv32_unmask_irq(int irq)
unmask_irq(int irq)
{ {
unblock_irq(irq, irq_cpu(irq)); unblock_irq(irq, irq_cpu(irq));
} }
@ -298,23 +296,23 @@ unmask_irq(int irq)
static unsigned int startup_crisv32_irq(unsigned int irq) static unsigned int startup_crisv32_irq(unsigned int irq)
{ {
unmask_irq(irq); crisv32_unmask_irq(irq);
return 0; return 0;
} }
static void shutdown_crisv32_irq(unsigned int irq) static void shutdown_crisv32_irq(unsigned int irq)
{ {
mask_irq(irq); crisv32_mask_irq(irq);
} }
static void enable_crisv32_irq(unsigned int irq) static void enable_crisv32_irq(unsigned int irq)
{ {
unmask_irq(irq); crisv32_unmask_irq(irq);
} }
static void disable_crisv32_irq(unsigned int irq) static void disable_crisv32_irq(unsigned int irq)
{ {
mask_irq(irq); crisv32_mask_irq(irq);
} }
static void ack_crisv32_irq(unsigned int irq) static void ack_crisv32_irq(unsigned int irq)

View File

@ -168,8 +168,8 @@ void __init smp_callin(void)
/* Enable IRQ and idle */ /* Enable IRQ and idle */
REG_WR(intr_vect, irq_regs[cpu], rw_mask, vect_mask); REG_WR(intr_vect, irq_regs[cpu], rw_mask, vect_mask);
unmask_irq(IPI_INTR_VECT); crisv32_unmask_irq(IPI_INTR_VECT);
unmask_irq(TIMER0_INTR_VECT); crisv32_unmask_irq(TIMER0_INTR_VECT);
preempt_disable(); preempt_disable();
notify_cpu_starting(cpu); notify_cpu_starting(cpu);
local_irq_enable(); local_irq_enable();

View File

@ -93,15 +93,16 @@ void set_break_vector(int n, irqvectptr addr);
"push $r10\n\t" /* push orig_r10 */ \ "push $r10\n\t" /* push orig_r10 */ \
"clear.d [$sp=$sp-4]\n\t" /* frametype - this is a normal stackframe */ "clear.d [$sp=$sp-4]\n\t" /* frametype - this is a normal stackframe */
/* BLOCK_IRQ and UNBLOCK_IRQ do the same as mask_irq and unmask_irq */ /* BLOCK_IRQ and UNBLOCK_IRQ do the same as
* crisv10_mask_irq and crisv10_unmask_irq */
#define BLOCK_IRQ(mask,nr) \ #define BLOCK_IRQ(mask,nr) \
"move.d " #mask ",$r0\n\t" \ "move.d " #mask ",$r0\n\t" \
"move.d $r0,[0xb00000d8]\n\t" "move.d $r0,[0xb00000d8]\n\t"
#define UNBLOCK_IRQ(mask) \ #define UNBLOCK_IRQ(mask) \
"move.d " #mask ",$r0\n\t" \ "move.d " #mask ",$r0\n\t" \
"move.d $r0,[0xb00000dc]\n\t" "move.d $r0,[0xb00000dc]\n\t"
#define IRQ_NAME2(nr) nr##_interrupt(void) #define IRQ_NAME2(nr) nr##_interrupt(void)
#define IRQ_NAME(nr) IRQ_NAME2(IRQ##nr) #define IRQ_NAME(nr) IRQ_NAME2(IRQ##nr)

View File

@ -23,8 +23,8 @@ struct etrax_interrupt_vector {
extern struct etrax_interrupt_vector *etrax_irv; /* head.S */ extern struct etrax_interrupt_vector *etrax_irv; /* head.S */
void mask_irq(int irq); void crisv32_mask_irq(int irq);
void unmask_irq(int irq); void crisv32_unmask_irq(int irq);
void set_exception_vector(int n, irqvectptr addr); void set_exception_vector(int n, irqvectptr addr);

View File

@ -2,22 +2,9 @@
#define _ASMCRIS_PARAM_H #define _ASMCRIS_PARAM_H
/* Currently we assume that HZ=100 is good for CRIS. */ /* Currently we assume that HZ=100 is good for CRIS. */
#ifdef __KERNEL__
# define HZ CONFIG_HZ /* Internal kernel timer frequency */
# define USER_HZ 100 /* .. some user interfaces are in "ticks" */
# define CLOCKS_PER_SEC (USER_HZ) /* like times() */
#endif
#ifndef HZ
#define HZ 100
#endif
#define EXEC_PAGESIZE 8192 #define EXEC_PAGESIZE 8192
#ifndef NOGROUP #include <asm-generic/param.h>
#define NOGROUP (-1)
#endif
#define MAXHOSTNAMELEN 64 /* max length of hostname */ #endif /* _ASMCRIS_PARAM_H */
#endif

View File

@ -21,7 +21,7 @@
# #
# the break handler has its own stack # the break handler has its own stack
# #
.section .bss.stack .section .bss..stack
.globl __break_user_context .globl __break_user_context
.balign THREAD_SIZE .balign THREAD_SIZE
__break_stack: __break_stack:
@ -63,7 +63,7 @@ __break_trace_through_exceptions:
# entry point for Break Exceptions/Interrupts # entry point for Break Exceptions/Interrupts
# #
############################################################################### ###############################################################################
.section .text.break .section .text..break
.balign 4 .balign 4
.globl __entry_break .globl __entry_break
__entry_break: __entry_break:

View File

@ -38,7 +38,7 @@
#define nr_syscalls ((syscall_table_size)/4) #define nr_syscalls ((syscall_table_size)/4)
.section .text.entry .section .text..entry
.balign 4 .balign 4
.macro LEDS val .macro LEDS val

View File

@ -1789,6 +1789,12 @@ void gdbstub(int sigval)
flush_cache = 1; flush_cache = 1;
break; break;
/* pNN: Read value of reg N and return it */
case 'p':
/* return no value, indicating that we don't support
* this command and that gdb should use 'g' instead */
break;
/* PNN,=RRRRRRRR: Write value R to reg N return OK */ /* PNN,=RRRRRRRR: Write value R to reg N return OK */
case 'P': case 'P':
ptr = &input_buffer[1]; ptr = &input_buffer[1];

View File

@ -542,7 +542,7 @@ __head_end:
.size _boot, .-_boot .size _boot, .-_boot
# provide a point for GDB to place a break # provide a point for GDB to place a break
.section .text.start,"ax" .section .text..start,"ax"
.globl _start .globl _start
.balign 4 .balign 4
_start: _start:

View File

@ -57,10 +57,10 @@ SECTIONS
_text = .; _text = .;
_stext = .; _stext = .;
.text : { .text : {
*(.text.start) *(.text..start)
*(.text.entry) *(.text..entry)
*(.text.break) *(.text..break)
*(.text.tlbmiss) *(.text..tlbmiss)
TEXT_TEXT TEXT_TEXT
SCHED_TEXT SCHED_TEXT
LOCK_TEXT LOCK_TEXT
@ -114,7 +114,7 @@ SECTIONS
.sbss : { *(.sbss .sbss.*) } .sbss : { *(.sbss .sbss.*) }
.bss : { *(.bss .bss.*) } .bss : { *(.bss .bss.*) }
.bss.stack : { *(.bss) } .bss..stack : { *(.bss) }
__bss_stop = .; __bss_stop = .;
_end = . ; _end = . ;

View File

@ -257,10 +257,10 @@ asmlinkage void do_page_fault(int datammu, unsigned long esr0, unsigned long ear
*/ */
out_of_memory: out_of_memory:
up_read(&mm->mmap_sem); up_read(&mm->mmap_sem);
printk("VM: killing process %s\n", current->comm); if (!user_mode(__frame))
if (user_mode(__frame)) goto no_context;
do_group_exit(SIGKILL); pagefault_out_of_memory();
goto no_context; return;
do_sigbus: do_sigbus:
up_read(&mm->mmap_sem); up_read(&mm->mmap_sem);

View File

@ -15,7 +15,7 @@
#include <asm/pgtable.h> #include <asm/pgtable.h>
#include <asm/spr-regs.h> #include <asm/spr-regs.h>
.section .text.tlbmiss .section .text..tlbmiss
.balign 4 .balign 4
.globl __entry_insn_mmu_miss .globl __entry_insn_mmu_miss

View File

@ -9,7 +9,7 @@
#define SRAM_START 0xff4000 #define SRAM_START 0xff4000
.section .text.startup .section .text..startup
.global startup .global startup
startup: startup:
mov.l #SRAM_START+0x8000, sp mov.l #SRAM_START+0x8000, sp

View File

@ -4,7 +4,7 @@ SECTIONS
{ {
__stext = . ; __stext = . ;
__text = .; __text = .;
*(.text.startup) *(.text..startup)
*(.text) *(.text)
__etext = . ; __etext = . ;
} }

View File

@ -70,12 +70,12 @@ name:
* path (ivt.S - TLB miss processing) or in places where it might not be * path (ivt.S - TLB miss processing) or in places where it might not be
* safe to use a "tpa" instruction (mca_asm.S - error recovery). * safe to use a "tpa" instruction (mca_asm.S - error recovery).
*/ */
.section ".data.patch.vtop", "a" // declare section & section attributes .section ".data..patch.vtop", "a" // declare section & section attributes
.previous .previous
#define LOAD_PHYSICAL(pr, reg, obj) \ #define LOAD_PHYSICAL(pr, reg, obj) \
[1:](pr)movl reg = obj; \ [1:](pr)movl reg = obj; \
.xdata4 ".data.patch.vtop", 1b-. .xdata4 ".data..patch.vtop", 1b-.
/* /*
* For now, we always put in the McKinley E9 workaround. On CPUs that don't need it, * For now, we always put in the McKinley E9 workaround. On CPUs that don't need it,
@ -84,11 +84,11 @@ name:
#define DO_MCKINLEY_E9_WORKAROUND #define DO_MCKINLEY_E9_WORKAROUND
#ifdef DO_MCKINLEY_E9_WORKAROUND #ifdef DO_MCKINLEY_E9_WORKAROUND
.section ".data.patch.mckinley_e9", "a" .section ".data..patch.mckinley_e9", "a"
.previous .previous
/* workaround for Itanium 2 Errata 9: */ /* workaround for Itanium 2 Errata 9: */
# define FSYS_RETURN \ # define FSYS_RETURN \
.xdata4 ".data.patch.mckinley_e9", 1f-.; \ .xdata4 ".data..patch.mckinley_e9", 1f-.; \
1:{ .mib; \ 1:{ .mib; \
nop.m 0; \ nop.m 0; \
mov r16=ar.pfs; \ mov r16=ar.pfs; \
@ -107,11 +107,11 @@ name:
* If physical stack register size is different from DEF_NUM_STACK_REG, * If physical stack register size is different from DEF_NUM_STACK_REG,
* dynamically patch the kernel for correct size. * dynamically patch the kernel for correct size.
*/ */
.section ".data.patch.phys_stack_reg", "a" .section ".data..patch.phys_stack_reg", "a"
.previous .previous
#define LOAD_PHYS_STACK_REG_SIZE(reg) \ #define LOAD_PHYS_STACK_REG_SIZE(reg) \
[1:] adds reg=IA64_NUM_PHYS_STACK_REG*8+8,r0; \ [1:] adds reg=IA64_NUM_PHYS_STACK_REG*8+8,r0; \
.xdata4 ".data.patch.phys_stack_reg", 1b-. .xdata4 ".data..patch.phys_stack_reg", 1b-.
/* /*
* Up until early 2004, use of .align within a function caused bad unwind info. * Up until early 2004, use of .align within a function caused bad unwind info.

View File

@ -24,6 +24,6 @@
# define SMP_CACHE_BYTES (1 << 3) # define SMP_CACHE_BYTES (1 << 3)
#endif #endif
#define __read_mostly __attribute__((__section__(".data.read_mostly"))) #define __read_mostly __attribute__((__section__(".data..read_mostly")))
#endif /* _ASM_IA64_CACHE_H */ #endif /* _ASM_IA64_CACHE_H */

View File

@ -31,7 +31,7 @@ extern void *per_cpu_init(void);
#endif /* SMP */ #endif /* SMP */
#define PER_CPU_BASE_SECTION ".data.percpu" #define PER_CPU_BASE_SECTION ".data..percpu"
/* /*
* Be extremely careful when taking the address of this variable! Due to virtual * Be extremely careful when taking the address of this variable! Due to virtual

View File

@ -21,7 +21,7 @@ GATECFLAGS_gate-syms.o = -r
$(obj)/gate-syms.o: $(obj)/gate.lds $(obj)/gate.o FORCE $(obj)/gate-syms.o: $(obj)/gate.lds $(obj)/gate.o FORCE
$(call if_changed,gate) $(call if_changed,gate)
# gate-data.o contains the gate DSO image as data in section .data.gate. # gate-data.o contains the gate DSO image as data in section .data..gate.
# We must build gate.so before we can assemble it. # We must build gate.so before we can assemble it.
# Note: kbuild does not track this dependency due to usage of .incbin # Note: kbuild does not track this dependency due to usage of .incbin
$(obj)/gate-data.o: $(obj)/gate.so $(obj)/gate-data.o: $(obj)/gate.so

View File

@ -1,3 +1,3 @@
.section .data.gate, "aw" .section .data..gate, "aw"
.incbin "arch/ia64/kernel/gate.so" .incbin "arch/ia64/kernel/gate.so"

View File

@ -21,18 +21,18 @@
* to targets outside the shared object) and to avoid multi-phase kernel builds, we * to targets outside the shared object) and to avoid multi-phase kernel builds, we
* simply create minimalistic "patch lists" in special ELF sections. * simply create minimalistic "patch lists" in special ELF sections.
*/ */
.section ".data.patch.fsyscall_table", "a" .section ".data..patch.fsyscall_table", "a"
.previous .previous
#define LOAD_FSYSCALL_TABLE(reg) \ #define LOAD_FSYSCALL_TABLE(reg) \
[1:] movl reg=0; \ [1:] movl reg=0; \
.xdata4 ".data.patch.fsyscall_table", 1b-. .xdata4 ".data..patch.fsyscall_table", 1b-.
.section ".data.patch.brl_fsys_bubble_down", "a" .section ".data..patch.brl_fsys_bubble_down", "a"
.previous .previous
#define BRL_COND_FSYS_BUBBLE_DOWN(pr) \ #define BRL_COND_FSYS_BUBBLE_DOWN(pr) \
[1:](pr)brl.cond.sptk 0; \ [1:](pr)brl.cond.sptk 0; \
;; \ ;; \
.xdata4 ".data.patch.brl_fsys_bubble_down", 1b-. .xdata4 ".data..patch.brl_fsys_bubble_down", 1b-.
GLOBAL_ENTRY(__kernel_syscall_via_break) GLOBAL_ENTRY(__kernel_syscall_via_break)
.prologue .prologue

View File

@ -33,21 +33,21 @@ SECTIONS
*/ */
. = GATE_ADDR + 0x600; . = GATE_ADDR + 0x600;
.data.patch : { .data..patch : {
__paravirt_start_gate_mckinley_e9_patchlist = .; __paravirt_start_gate_mckinley_e9_patchlist = .;
*(.data.patch.mckinley_e9) *(.data..patch.mckinley_e9)
__paravirt_end_gate_mckinley_e9_patchlist = .; __paravirt_end_gate_mckinley_e9_patchlist = .;
__paravirt_start_gate_vtop_patchlist = .; __paravirt_start_gate_vtop_patchlist = .;
*(.data.patch.vtop) *(.data..patch.vtop)
__paravirt_end_gate_vtop_patchlist = .; __paravirt_end_gate_vtop_patchlist = .;
__paravirt_start_gate_fsyscall_patchlist = .; __paravirt_start_gate_fsyscall_patchlist = .;
*(.data.patch.fsyscall_table) *(.data..patch.fsyscall_table)
__paravirt_end_gate_fsyscall_patchlist = .; __paravirt_end_gate_fsyscall_patchlist = .;
__paravirt_start_gate_brl_fsys_bubble_down_patchlist = .; __paravirt_start_gate_brl_fsys_bubble_down_patchlist = .;
*(.data.patch.brl_fsys_bubble_down) *(.data..patch.brl_fsys_bubble_down)
__paravirt_end_gate_brl_fsys_bubble_down_patchlist = .; __paravirt_end_gate_brl_fsys_bubble_down_patchlist = .;
} :readable } :readable

View File

@ -23,7 +23,7 @@ static struct sighand_struct init_sighand = INIT_SIGHAND(init_sighand);
* Initial task structure. * Initial task structure.
* *
* We need to make sure that this is properly aligned due to the way process stacks are * We need to make sure that this is properly aligned due to the way process stacks are
* handled. This is done by having a special ".data.init_task" section... * handled. This is done by having a special ".data..init_task" section...
*/ */
#define init_thread_info init_task_mem.s.thread_info #define init_thread_info init_task_mem.s.thread_info

View File

@ -82,7 +82,7 @@
mov r19=n;; /* prepare to save predicates */ \ mov r19=n;; /* prepare to save predicates */ \
br.sptk.many dispatch_to_fault_handler br.sptk.many dispatch_to_fault_handler
.section .text.ivt,"ax" .section .text..ivt,"ax"
.align 32768 // align on 32KB boundary .align 32768 // align on 32KB boundary
.global ia64_ivt .global ia64_ivt

View File

@ -16,7 +16,7 @@
#define ACCOUNT_SYS_ENTER #define ACCOUNT_SYS_ENTER
#endif #endif
.section ".data.patch.rse", "a" .section ".data..patch.rse", "a"
.previous .previous
/* /*
@ -215,7 +215,7 @@
(pUStk) extr.u r17=r18,3,6; \ (pUStk) extr.u r17=r18,3,6; \
(pUStk) sub r16=r18,r22; \ (pUStk) sub r16=r18,r22; \
[1:](pKStk) br.cond.sptk.many 1f; \ [1:](pKStk) br.cond.sptk.many 1f; \
.xdata4 ".data.patch.rse",1b-. \ .xdata4 ".data..patch.rse",1b-. \
;; \ ;; \
cmp.ge p6,p7 = 33,r17; \ cmp.ge p6,p7 = 33,r17; \
;; \ ;; \

View File

@ -28,7 +28,7 @@
#include "entry.h" #include "entry.h"
#define DATA8(sym, init_value) \ #define DATA8(sym, init_value) \
.pushsection .data.read_mostly ; \ .pushsection .data..read_mostly ; \
.align 8 ; \ .align 8 ; \
.global sym ; \ .global sym ; \
sym: ; \ sym: ; \

View File

@ -8,7 +8,7 @@
#define IVT_TEXT \ #define IVT_TEXT \
VMLINUX_SYMBOL(__start_ivt_text) = .; \ VMLINUX_SYMBOL(__start_ivt_text) = .; \
*(.text.ivt) \ *(.text..ivt) \
VMLINUX_SYMBOL(__end_ivt_text) = .; VMLINUX_SYMBOL(__end_ivt_text) = .;
OUTPUT_FORMAT("elf64-ia64-little") OUTPUT_FORMAT("elf64-ia64-little")
@ -54,8 +54,8 @@ SECTIONS
.text2 : AT(ADDR(.text2) - LOAD_OFFSET) .text2 : AT(ADDR(.text2) - LOAD_OFFSET)
{ *(.text2) } { *(.text2) }
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
.text.lock : AT(ADDR(.text.lock) - LOAD_OFFSET) .text..lock : AT(ADDR(.text..lock) - LOAD_OFFSET)
{ *(.text.lock) } { *(.text..lock) }
#endif #endif
_etext = .; _etext = .;
@ -75,10 +75,10 @@ SECTIONS
__stop___mca_table = .; __stop___mca_table = .;
} }
.data.patch.phys_stack_reg : AT(ADDR(.data.patch.phys_stack_reg) - LOAD_OFFSET) .data..patch.phys_stack_reg : AT(ADDR(.data..patch.phys_stack_reg) - LOAD_OFFSET)
{ {
__start___phys_stack_reg_patchlist = .; __start___phys_stack_reg_patchlist = .;
*(.data.patch.phys_stack_reg) *(.data..patch.phys_stack_reg)
__end___phys_stack_reg_patchlist = .; __end___phys_stack_reg_patchlist = .;
} }
@ -110,24 +110,24 @@ SECTIONS
INIT_TEXT_SECTION(PAGE_SIZE) INIT_TEXT_SECTION(PAGE_SIZE)
INIT_DATA_SECTION(16) INIT_DATA_SECTION(16)
.data.patch.vtop : AT(ADDR(.data.patch.vtop) - LOAD_OFFSET) .data..patch.vtop : AT(ADDR(.data..patch.vtop) - LOAD_OFFSET)
{ {
__start___vtop_patchlist = .; __start___vtop_patchlist = .;
*(.data.patch.vtop) *(.data..patch.vtop)
__end___vtop_patchlist = .; __end___vtop_patchlist = .;
} }
.data.patch.rse : AT(ADDR(.data.patch.rse) - LOAD_OFFSET) .data..patch.rse : AT(ADDR(.data..patch.rse) - LOAD_OFFSET)
{ {
__start___rse_patchlist = .; __start___rse_patchlist = .;
*(.data.patch.rse) *(.data..patch.rse)
__end___rse_patchlist = .; __end___rse_patchlist = .;
} }
.data.patch.mckinley_e9 : AT(ADDR(.data.patch.mckinley_e9) - LOAD_OFFSET) .data..patch.mckinley_e9 : AT(ADDR(.data..patch.mckinley_e9) - LOAD_OFFSET)
{ {
__start___mckinley_e9_bundles = .; __start___mckinley_e9_bundles = .;
*(.data.patch.mckinley_e9) *(.data..patch.mckinley_e9)
__end___mckinley_e9_bundles = .; __end___mckinley_e9_bundles = .;
} }
@ -175,17 +175,17 @@ SECTIONS
. = ALIGN(PAGE_SIZE); . = ALIGN(PAGE_SIZE);
__init_end = .; __init_end = .;
.data.page_aligned : AT(ADDR(.data.page_aligned) - LOAD_OFFSET) .data..page_aligned : AT(ADDR(.data..page_aligned) - LOAD_OFFSET)
{ {
PAGE_ALIGNED_DATA(PAGE_SIZE) PAGE_ALIGNED_DATA(PAGE_SIZE)
. = ALIGN(PAGE_SIZE); . = ALIGN(PAGE_SIZE);
__start_gate_section = .; __start_gate_section = .;
*(.data.gate) *(.data..gate)
__stop_gate_section = .; __stop_gate_section = .;
#ifdef CONFIG_XEN #ifdef CONFIG_XEN
. = ALIGN(PAGE_SIZE); . = ALIGN(PAGE_SIZE);
__xen_start_gate_section = .; __xen_start_gate_section = .;
*(.data.gate.xen) *(.data..gate.xen)
__xen_stop_gate_section = .; __xen_stop_gate_section = .;
#endif #endif
} }

View File

@ -144,6 +144,7 @@ int kvm_arch_hardware_enable(void *garbage)
VP_INIT_ENV : VP_INIT_ENV_INITALIZE, VP_INIT_ENV : VP_INIT_ENV_INITALIZE,
__pa(kvm_vm_buffer), KVM_VM_BUFFER_BASE, &tmp_base); __pa(kvm_vm_buffer), KVM_VM_BUFFER_BASE, &tmp_base);
if (status != 0) { if (status != 0) {
spin_unlock(&vp_lock);
printk(KERN_WARNING"kvm: Failed to Enable VT Support!!!!\n"); printk(KERN_WARNING"kvm: Failed to Enable VT Support!!!!\n");
return -EINVAL; return -EINVAL;
} }

View File

@ -104,7 +104,7 @@ GLOBAL_ENTRY(kvm_vmm_panic)
br.call.sptk.many b6=vmm_panic_handler; br.call.sptk.many b6=vmm_panic_handler;
END(kvm_vmm_panic) END(kvm_vmm_panic)
.section .text.ivt,"ax" .section .text..ivt,"ax"
.align 32768 // align on 32KB boundary .align 32768 // align on 32KB boundary
.global kvm_ia64_ivt .global kvm_ia64_ivt

View File

@ -1,4 +1,4 @@
#!/usr/bin/env python #!/usr/bin/python
# #
# Usage: unwcheck.py FILE # Usage: unwcheck.py FILE
# #

View File

@ -1,3 +1,3 @@
.section .data.gate.xen, "aw" .section .data..gate.xen, "aw"
.incbin "arch/ia64/xen/gate.so" .incbin "arch/ia64/xen/gate.so"

View File

@ -14,7 +14,7 @@
#include <linux/init.h> #include <linux/init.h>
#include <xen/interface/elfnote.h> #include <xen/interface/elfnote.h>
.section .data.read_mostly .section .data..read_mostly
.align 8 .align 8
.global xen_domain_type .global xen_domain_type
xen_domain_type: xen_domain_type:

View File

@ -188,7 +188,6 @@ good_area:
if ((error_code & ACE_INSTRUCTION) && !(vma->vm_flags & VM_EXEC)) if ((error_code & ACE_INSTRUCTION) && !(vma->vm_flags & VM_EXEC))
goto bad_area; goto bad_area;
survive:
/* /*
* If for any reason at all we couldn't handle the fault, * If for any reason at all we couldn't handle the fault,
* make sure we exit gracefully rather than endlessly redo * make sure we exit gracefully rather than endlessly redo
@ -271,15 +270,10 @@ no_context:
*/ */
out_of_memory: out_of_memory:
up_read(&mm->mmap_sem); up_read(&mm->mmap_sem);
if (is_global_init(tsk)) { if (!(error_code & ACE_USERMODE))
yield(); goto no_context;
down_read(&mm->mmap_sem); pagefault_out_of_memory();
goto survive; return;
}
printk("VM: killing process %s\n", tsk->comm);
if (error_code & ACE_USERMODE)
do_group_exit(SIGKILL);
goto no_context;
do_sigbus: do_sigbus:
up_read(&mm->mmap_sem); up_read(&mm->mmap_sem);

View File

@ -57,7 +57,7 @@ SECTIONS {
.romvec : { .romvec : {
__rom_start = . ; __rom_start = . ;
_romvec = .; _romvec = .;
*(.data.initvect) *(.data..initvect)
} > romvec } > romvec
#endif #endif
@ -68,7 +68,7 @@ SECTIONS {
TEXT_TEXT TEXT_TEXT
SCHED_TEXT SCHED_TEXT
LOCK_TEXT LOCK_TEXT
*(.text.lock) *(.text..lock)
. = ALIGN(16); /* Exception table */ . = ALIGN(16); /* Exception table */
__start___ex_table = .; __start___ex_table = .;

View File

@ -280,7 +280,7 @@ _dprbase:
* and then overwritten as needed. * and then overwritten as needed.
*/ */
.section ".data.initvect","awx" .section ".data..initvect","awx"
.long RAMEND /* Reset: Initial Stack Pointer - 0. */ .long RAMEND /* Reset: Initial Stack Pointer - 0. */
.long _start /* Reset: Initial Program Counter - 1. */ .long _start /* Reset: Initial Program Counter - 1. */
.long buserr /* Bus Error - 2. */ .long buserr /* Bus Error - 2. */

View File

@ -291,7 +291,7 @@ _dprbase:
* and then overwritten as needed. * and then overwritten as needed.
*/ */
.section ".data.initvect","awx" .section ".data..initvect","awx"
.long RAMEND /* Reset: Initial Stack Pointer - 0. */ .long RAMEND /* Reset: Initial Stack Pointer - 0. */
.long _start /* Reset: Initial Program Counter - 1. */ .long _start /* Reset: Initial Program Counter - 1. */
.long buserr /* Bus Error - 2. */ .long buserr /* Bus Error - 2. */

View File

@ -34,6 +34,8 @@
/* MS be sure that SLAB allocates aligned objects */ /* MS be sure that SLAB allocates aligned objects */
#define ARCH_KMALLOC_MINALIGN L1_CACHE_BYTES #define ARCH_KMALLOC_MINALIGN L1_CACHE_BYTES
#define ARCH_SLAB_MINALIGN L1_CACHE_BYTES
#define PAGE_UP(addr) (((addr)+((PAGE_SIZE)-1))&(~((PAGE_SIZE)-1))) #define PAGE_UP(addr) (((addr)+((PAGE_SIZE)-1))&(~((PAGE_SIZE)-1)))
#define PAGE_DOWN(addr) ((addr)&(~((PAGE_SIZE)-1))) #define PAGE_DOWN(addr) ((addr)&(~((PAGE_SIZE)-1)))

View File

@ -90,7 +90,6 @@ static int dma_direct_map_sg(struct device *dev, struct scatterlist *sgl,
/* FIXME this part of code is untested */ /* FIXME this part of code is untested */
for_each_sg(sgl, sg, nents, i) { for_each_sg(sgl, sg, nents, i) {
sg->dma_address = sg_phys(sg) + get_dma_direct_offset(dev); sg->dma_address = sg_phys(sg) + get_dma_direct_offset(dev);
sg->dma_length = sg->length;
__dma_sync_page(page_to_phys(sg_page(sg)), sg->offset, __dma_sync_page(page_to_phys(sg_page(sg)), sg->offset,
sg->length, direction); sg->length, direction);
} }

View File

@ -1277,6 +1277,7 @@ void pcibios_allocate_bus_resources(struct pci_bus *bus)
printk(KERN_WARNING "PCI: Cannot allocate resource region " printk(KERN_WARNING "PCI: Cannot allocate resource region "
"%d of PCI bridge %d, will remap\n", i, bus->number); "%d of PCI bridge %d, will remap\n", i, bus->number);
clear_resource: clear_resource:
res->start = res->end = 0;
res->flags = 0; res->flags = 0;
} }

View File

@ -1,7 +1,7 @@
#include <asm/lasat/head.h> #include <asm/lasat/head.h>
.text .text
.section .text.start, "ax" .section .text..start, "ax"
.set noreorder .set noreorder
.set mips3 .set mips3

View File

@ -4,7 +4,7 @@ SECTIONS
{ {
.text : .text :
{ {
*(.text.start) *(.text..start)
} }
/* Data in ROM */ /* Data in ROM */

View File

@ -338,11 +338,10 @@ no_context:
*/ */
out_of_memory: out_of_memory:
up_read(&mm->mmap_sem); up_read(&mm->mmap_sem);
monitor_signal(regs); if ((fault_code & MMUFCR_xFC_ACCESS) != MMUFCR_xFC_ACCESS_USR)
printk(KERN_ALERT "VM: killing process %s\n", tsk->comm); goto no_context;
if ((fault_code & MMUFCR_xFC_ACCESS) == MMUFCR_xFC_ACCESS_USR) pagefault_out_of_memory();
do_exit(SIGKILL); return;
goto no_context;
do_sigbus: do_sigbus:
up_read(&mm->mmap_sem); up_read(&mm->mmap_sem);

View File

@ -117,6 +117,7 @@ static void __init pcibios_allocate_bus_resources(struct list_head *bus_list)
* Invalidate the resource to prevent * Invalidate the resource to prevent
* child resource allocations in this * child resource allocations in this
* range. */ * range. */
r->start = r->end = 0;
r->flags = 0; r->flags = 0;
} }
} }

View File

@ -28,7 +28,7 @@
#define SMP_CACHE_BYTES L1_CACHE_BYTES #define SMP_CACHE_BYTES L1_CACHE_BYTES
#define __read_mostly __attribute__((__section__(".data.read_mostly"))) #define __read_mostly __attribute__((__section__(".data..read_mostly")))
void parisc_cache_init(void); /* initializes cache-flushing */ void parisc_cache_init(void); /* initializes cache-flushing */
void disable_sr_hashing_asm(int); /* low level support for above */ void disable_sr_hashing_asm(int); /* low level support for above */

View File

@ -174,7 +174,7 @@ static inline void set_eiem(unsigned long val)
}) })
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
# define __lock_aligned __attribute__((__section__(".data.lock_aligned"))) # define __lock_aligned __attribute__((__section__(".data..lock_aligned")))
#endif #endif
#define arch_align_stack(x) (x) #define arch_align_stack(x) (x)

View File

@ -345,7 +345,7 @@ smp_slave_stext:
ENDPROC(stext) ENDPROC(stext)
#ifndef CONFIG_64BIT #ifndef CONFIG_64BIT
.section .data.read_mostly .section .data..read_mostly
.align 4 .align 4
.export $global$,data .export $global$,data

View File

@ -53,11 +53,11 @@ union thread_union init_thread_union __init_task_data
* guarantee that global objects will be laid out in memory in the same order * guarantee that global objects will be laid out in memory in the same order
* as the order of declaration, so put these in different sections and use * as the order of declaration, so put these in different sections and use
* the linker script to order them. */ * the linker script to order them. */
pmd_t pmd0[PTRS_PER_PMD] __attribute__ ((__section__ (".data.vm0.pmd"), aligned(PAGE_SIZE))); pmd_t pmd0[PTRS_PER_PMD] __attribute__ ((__section__ (".data..vm0.pmd"), aligned(PAGE_SIZE)));
#endif #endif
pgd_t swapper_pg_dir[PTRS_PER_PGD] __attribute__ ((__section__ (".data.vm0.pgd"), aligned(PAGE_SIZE))); pgd_t swapper_pg_dir[PTRS_PER_PGD] __attribute__ ((__section__ (".data..vm0.pgd"), aligned(PAGE_SIZE)));
pte_t pg0[PT_INITIAL * PTRS_PER_PTE] __attribute__ ((__section__ (".data.vm0.pte"), aligned(PAGE_SIZE))); pte_t pg0[PT_INITIAL * PTRS_PER_PTE] __attribute__ ((__section__ (".data..vm0.pte"), aligned(PAGE_SIZE)));
/* /*
* Initial task structure. * Initial task structure.

View File

@ -94,8 +94,8 @@ SECTIONS
/* PA-RISC locks requires 16-byte alignment */ /* PA-RISC locks requires 16-byte alignment */
. = ALIGN(16); . = ALIGN(16);
.data.lock_aligned : { .data..lock_aligned : {
*(.data.lock_aligned) *(.data..lock_aligned)
} }
/* End of data section */ /* End of data section */
@ -105,10 +105,10 @@ SECTIONS
__bss_start = .; __bss_start = .;
/* page table entries need to be PAGE_SIZE aligned */ /* page table entries need to be PAGE_SIZE aligned */
. = ALIGN(PAGE_SIZE); . = ALIGN(PAGE_SIZE);
.data.vmpages : { .data..vmpages : {
*(.data.vm0.pmd) *(.data..vm0.pmd)
*(.data.vm0.pgd) *(.data..vm0.pgd)
*(.data.vm0.pte) *(.data..vm0.pte)
} }
.bss : { .bss : {
*(.bss) *(.bss)

View File

@ -351,7 +351,7 @@ config ARCH_ENABLE_MEMORY_HOTREMOVE
config KEXEC config KEXEC
bool "kexec system call (EXPERIMENTAL)" bool "kexec system call (EXPERIMENTAL)"
depends on PPC_BOOK3S && EXPERIMENTAL depends on (PPC_BOOK3S || (FSL_BOOKE && !SMP)) && EXPERIMENTAL
help help
kexec is a system call that implements the ability to shutdown your kexec is a system call that implements the ability to shutdown your
current kernel, and to start another kernel. It is like a reboot current kernel, and to start another kernel. It is like a reboot

Some files were not shown because too many files have changed in this diff Show More