Linux 4.14-rc3
-----BEGIN PGP SIGNATURE----- iQEcBAABAgAGBQJZ0WQ6AAoJEHm+PkMAQRiGuloH/3sF4qfBhPuJo8OTf0uCtQ18 4Ux9zZbm81df/Jjz0exAp1Jqk+TvdIS3OXPWcKilvbUBP16hQcsxFTnI/5QF+YcN 87aNr+OCMJzOBK4suN1yhzO46NYHeIizdB0PTZVL1Zsto69Tt31D8VJmgH6oBxAw Isb/nAkOr31dZ9PI5UEExTIanUt6EywVb0UswA+2rNl3h1UkeasQCpMpK2n6HBhU kVD7sxEd/CN0MmfhB0HrySSam/BeSpOtzoU9bemOwrU2uu9+5+2rqMe7Gsdj4nX6 3Kk+7FQNktlrhxCZIFN/+CdusOUuDd8r/75d7DnsRK5YvSb0sZzJkfD3Nba68Ms= =7J2+ -----END PGP SIGNATURE----- Merge git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux Merge 4.14-rc3 in order to pick up the new timer_setup function.
This commit is contained in:
commit
ab387f0af2
|
@ -32,8 +32,6 @@ cpufreq-stats.txt - General description of sysfs cpufreq stats.
|
|||
|
||||
index.txt - File index, Mailing list and Links (this document)
|
||||
|
||||
intel-pstate.txt - Intel pstate cpufreq driver specific file.
|
||||
|
||||
pcc-cpufreq.txt - PCC cpufreq driver specific file.
|
||||
|
||||
|
||||
|
|
|
@ -32,7 +32,7 @@ Example:
|
|||
compatible = "st,stm32h743-rcc", "st,stm32-rcc";
|
||||
reg = <0x58024400 0x400>;
|
||||
#reset-cells = <1>;
|
||||
#clock-cells = <2>;
|
||||
#clock-cells = <1>;
|
||||
clocks = <&clk_hse>, <&clk_lse>, <&clk_i2s_ckin>;
|
||||
|
||||
st,syscfg = <&pwrcfg>;
|
||||
|
|
|
@ -15,11 +15,14 @@ Required properties
|
|||
|
||||
compatible : Must be "ams,as3645a".
|
||||
reg : The I2C address of the device. Typically 0x30.
|
||||
#address-cells : 1
|
||||
#size-cells : 0
|
||||
|
||||
|
||||
Required properties of the "flash" child node
|
||||
=============================================
|
||||
Required properties of the flash child node (0)
|
||||
===============================================
|
||||
|
||||
reg: 0
|
||||
flash-timeout-us: Flash timeout in microseconds. The value must be in
|
||||
the range [100000, 850000] and divisible by 50000.
|
||||
flash-max-microamp: Maximum flash current in microamperes. Has to be
|
||||
|
@ -33,20 +36,21 @@ ams,input-max-microamp: Maximum flash controller input current. The
|
|||
and divisible by 50000.
|
||||
|
||||
|
||||
Optional properties of the "flash" child node
|
||||
=============================================
|
||||
Optional properties of the flash child node
|
||||
===========================================
|
||||
|
||||
label : The label of the flash LED.
|
||||
|
||||
|
||||
Required properties of the "indicator" child node
|
||||
=================================================
|
||||
Required properties of the indicator child node (1)
|
||||
===================================================
|
||||
|
||||
reg: 1
|
||||
led-max-microamp: Maximum indicator current. The allowed values are
|
||||
2500, 5000, 7500 and 10000.
|
||||
|
||||
Optional properties of the "indicator" child node
|
||||
=================================================
|
||||
Optional properties of the indicator child node
|
||||
===============================================
|
||||
|
||||
label : The label of the indicator LED.
|
||||
|
||||
|
@ -55,16 +59,20 @@ Example
|
|||
=======
|
||||
|
||||
as3645a@30 {
|
||||
#address-cells: 1
|
||||
#size-cells: 0
|
||||
reg = <0x30>;
|
||||
compatible = "ams,as3645a";
|
||||
flash {
|
||||
flash@0 {
|
||||
reg = <0x0>;
|
||||
flash-timeout-us = <150000>;
|
||||
flash-max-microamp = <320000>;
|
||||
led-max-microamp = <60000>;
|
||||
ams,input-max-microamp = <1750000>;
|
||||
label = "as3645a:flash";
|
||||
};
|
||||
indicator {
|
||||
indicator@1 {
|
||||
reg = <0x1>;
|
||||
led-max-microamp = <10000>;
|
||||
label = "as3645a:indicator";
|
||||
};
|
||||
|
|
|
@ -8,6 +8,12 @@ Required properties:
|
|||
the firmware event log
|
||||
- linux,sml-size : size of the memory allocated for the firmware event log
|
||||
|
||||
Optional properties:
|
||||
|
||||
- powered-while-suspended: present when the TPM is left powered on between
|
||||
suspend and resume (makes the suspend/resume
|
||||
callbacks do nothing).
|
||||
|
||||
Example (for OpenPower Systems with Nuvoton TPM 2.0 on I2C)
|
||||
----------------------------------------------------------
|
||||
|
||||
|
|
|
@ -3,8 +3,8 @@ Device tree binding vendor prefix registry. Keep list in alphabetical order.
|
|||
This isn't an exhaustive list, but you should add new prefixes to it before
|
||||
using them to avoid name-space collisions.
|
||||
|
||||
abcn Abracon Corporation
|
||||
abilis Abilis Systems
|
||||
abracon Abracon Corporation
|
||||
actions Actions Semiconductor Co., Ltd.
|
||||
active-semi Active-Semi International Inc
|
||||
ad Avionic Design GmbH
|
||||
|
|
|
@ -675,7 +675,7 @@ sub-domain of the parent domain.
|
|||
|
||||
Support for power domains is provided through the :c:member:`pm_domain` field of
|
||||
|struct device|. This field is a pointer to an object of type
|
||||
|struct dev_pm_domain|, defined in :file:`include/linux/pm.h``, providing a set
|
||||
|struct dev_pm_domain|, defined in :file:`include/linux/pm.h`, providing a set
|
||||
of power management callbacks analogous to the subsystem-level and device driver
|
||||
callbacks that are executed for the given device during all power transitions,
|
||||
instead of the respective subsystem-level callbacks. Specifically, if a
|
||||
|
|
|
@ -41,6 +41,11 @@ Igor Mammedov (DFS support)
|
|||
Jeff Layton (many, many fixes, as well as great work on the cifs Kerberos code)
|
||||
Scott Lovenberg
|
||||
Pavel Shilovsky (for great work adding SMB2 support, and various SMB3 features)
|
||||
Aurelien Aptel (for DFS SMB3 work and some key bug fixes)
|
||||
Ronnie Sahlberg (for SMB3 xattr work and bug fixes)
|
||||
Shirish Pargaonkar (for many ACL patches over the years)
|
||||
Sachin Prabhu (many bug fixes, including for reconnect, copy offload and security)
|
||||
|
||||
|
||||
Test case and Bug Report contributors
|
||||
-------------------------------------
|
||||
|
|
|
@ -1,10 +1,14 @@
|
|||
The CIFS VFS support for Linux supports many advanced network filesystem
|
||||
features such as hierarchical dfs like namespace, hardlinks, locking and more.
|
||||
This module supports the SMB3 family of advanced network protocols (as well
|
||||
as older dialects, originally called "CIFS" or SMB1).
|
||||
|
||||
The CIFS VFS module for Linux supports many advanced network filesystem
|
||||
features such as hierarchical DFS like namespace, hardlinks, locking and more.
|
||||
It was designed to comply with the SNIA CIFS Technical Reference (which
|
||||
supersedes the 1992 X/Open SMB Standard) as well as to perform best practice
|
||||
practical interoperability with Windows 2000, Windows XP, Samba and equivalent
|
||||
servers. This code was developed in participation with the Protocol Freedom
|
||||
Information Foundation.
|
||||
Information Foundation. CIFS and now SMB3 has now become a defacto
|
||||
standard for interoperating between Macs and Windows and major NAS appliances.
|
||||
|
||||
Please see
|
||||
http://protocolfreedom.org/ and
|
||||
|
@ -15,30 +19,11 @@ for more details.
|
|||
For questions or bug reports please contact:
|
||||
sfrench@samba.org (sfrench@us.ibm.com)
|
||||
|
||||
See the project page at: https://wiki.samba.org/index.php/LinuxCIFS_utils
|
||||
|
||||
Build instructions:
|
||||
==================
|
||||
For Linux 2.4:
|
||||
1) Get the kernel source (e.g.from http://www.kernel.org)
|
||||
and download the cifs vfs source (see the project page
|
||||
at http://us1.samba.org/samba/Linux_CIFS_client.html)
|
||||
and change directory into the top of the kernel directory
|
||||
then patch the kernel (e.g. "patch -p1 < cifs_24.patch")
|
||||
to add the cifs vfs to your kernel configure options if
|
||||
it has not already been added (e.g. current SuSE and UL
|
||||
users do not need to apply the cifs_24.patch since the cifs vfs is
|
||||
already in the kernel configure menu) and then
|
||||
mkdir linux/fs/cifs and then copy the current cifs vfs files from
|
||||
the cifs download to your kernel build directory e.g.
|
||||
|
||||
cp <cifs_download_dir>/fs/cifs/* to <kernel_download_dir>/fs/cifs
|
||||
|
||||
2) make menuconfig (or make xconfig)
|
||||
3) select cifs from within the network filesystem choices
|
||||
4) save and exit
|
||||
5) make dep
|
||||
6) make modules (or "make" if CIFS VFS not to be built as a module)
|
||||
|
||||
For Linux 2.6:
|
||||
For Linux:
|
||||
1) Download the kernel (e.g. from http://www.kernel.org)
|
||||
and change directory into the top of the kernel directory tree
|
||||
(e.g. /usr/src/linux-2.5.73)
|
||||
|
@ -61,16 +46,13 @@ would simply type "make install").
|
|||
If you do not have the utility mount.cifs (in the Samba 3.0 source tree and on
|
||||
the CIFS VFS web site) copy it to the same directory in which mount.smbfs and
|
||||
similar files reside (usually /sbin). Although the helper software is not
|
||||
required, mount.cifs is recommended. Eventually the Samba 3.0 utility program
|
||||
"net" may also be helpful since it may someday provide easier mount syntax for
|
||||
users who are used to Windows e.g.
|
||||
net use <mount point> <UNC name or cifs URL>
|
||||
required, mount.cifs is recommended. Most distros include a "cifs-utils"
|
||||
package that includes this utility so it is recommended to install this.
|
||||
|
||||
Note that running the Winbind pam/nss module (logon service) on all of your
|
||||
Linux clients is useful in mapping Uids and Gids consistently across the
|
||||
domain to the proper network user. The mount.cifs mount helper can be
|
||||
trivially built from Samba 3.0 or later source e.g. by executing:
|
||||
|
||||
gcc samba/source/client/mount.cifs.c -o mount.cifs
|
||||
found at cifs-utils.git on git.samba.org
|
||||
|
||||
If cifs is built as a module, then the size and number of network buffers
|
||||
and maximum number of simultaneous requests to one server can be configured.
|
||||
|
@ -79,6 +61,18 @@ Changing these from their defaults is not recommended. By executing modinfo
|
|||
on kernel/fs/cifs/cifs.ko the list of configuration changes that can be made
|
||||
at module initialization time (by running insmod cifs.ko) can be seen.
|
||||
|
||||
Recommendations
|
||||
===============
|
||||
To improve security the SMB2.1 dialect or later (usually will get SMB3) is now
|
||||
the new default. To use old dialects (e.g. to mount Windows XP) use "vers=1.0"
|
||||
on mount (or vers=2.0 for Windows Vista). Note that the CIFS (vers=1.0) is
|
||||
much older and less secure than the default dialect SMB3 which includes
|
||||
many advanced security features such as downgrade attack detection
|
||||
and encrypted shares and stronger signing and authentication algorithms.
|
||||
There are additional mount options that may be helpful for SMB3 to get
|
||||
improved POSIX behavior (NB: can use vers=3.0 to force only SMB3, never 2.1):
|
||||
"mfsymlinks" and "cifsacl" and "idsfromsid"
|
||||
|
||||
Allowing User Mounts
|
||||
====================
|
||||
To permit users to mount and unmount over directories they own is possible
|
||||
|
@ -98,9 +92,7 @@ and execution of suid programs on the remote target would be enabled
|
|||
by default. This can be changed, as with nfs and other filesystems,
|
||||
by simply specifying "nosuid" among the mount options. For user mounts
|
||||
though to be able to pass the suid flag to mount requires rebuilding
|
||||
mount.cifs with the following flag:
|
||||
|
||||
gcc samba/source/client/mount.cifs.c -DCIFS_ALLOW_USR_SUID -o mount.cifs
|
||||
mount.cifs with the following flag: CIFS_ALLOW_USR_SUID
|
||||
|
||||
There is a corresponding manual page for cifs mounting in the Samba 3.0 and
|
||||
later source tree in docs/manpages/mount.cifs.8
|
||||
|
@ -189,18 +181,18 @@ applications running on the same server as Samba.
|
|||
Use instructions:
|
||||
================
|
||||
Once the CIFS VFS support is built into the kernel or installed as a module
|
||||
(cifs.o), you can use mount syntax like the following to access Samba or Windows
|
||||
servers:
|
||||
(cifs.ko), you can use mount syntax like the following to access Samba or
|
||||
Mac or Windows servers:
|
||||
|
||||
mount -t cifs //9.53.216.11/e$ /mnt -o user=myname,pass=mypassword
|
||||
mount -t cifs //9.53.216.11/e$ /mnt -o username=myname,password=mypassword
|
||||
|
||||
Before -o the option -v may be specified to make the mount.cifs
|
||||
mount helper display the mount steps more verbosely.
|
||||
After -o the following commonly used cifs vfs specific options
|
||||
are supported:
|
||||
|
||||
user=<username>
|
||||
pass=<password>
|
||||
username=<username>
|
||||
password=<password>
|
||||
domain=<domain name>
|
||||
|
||||
Other cifs mount options are described below. Use of TCP names (in addition to
|
||||
|
@ -246,13 +238,16 @@ the Server's registry. Samba starting with version 3.10 will allow such
|
|||
filenames (ie those which contain valid Linux characters, which normally
|
||||
would be forbidden for Windows/CIFS semantics) as long as the server is
|
||||
configured for Unix Extensions (and the client has not disabled
|
||||
/proc/fs/cifs/LinuxExtensionsEnabled).
|
||||
|
||||
/proc/fs/cifs/LinuxExtensionsEnabled). In addition the mount option
|
||||
"mapposix" can be used on CIFS (vers=1.0) to force the mapping of
|
||||
illegal Windows/NTFS/SMB characters to a remap range (this mount parm
|
||||
is the default for SMB3). This remap ("mapposix") range is also
|
||||
compatible with Mac (and "Services for Mac" on some older Windows).
|
||||
|
||||
CIFS VFS Mount Options
|
||||
======================
|
||||
A partial list of the supported mount options follows:
|
||||
user The user name to use when trying to establish
|
||||
username The user name to use when trying to establish
|
||||
the CIFS session.
|
||||
password The user password. If the mount helper is
|
||||
installed, the user will be prompted for password
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
Version 2.03 August 1, 2014
|
||||
Version 2.04 September 13, 2017
|
||||
|
||||
A Partial List of Missing Features
|
||||
==================================
|
||||
|
@ -8,73 +8,69 @@ for visible, important contributions to this module. Here
|
|||
is a partial list of the known problems and missing features:
|
||||
|
||||
a) SMB3 (and SMB3.02) missing optional features:
|
||||
- RDMA
|
||||
- RDMA (started)
|
||||
- multichannel (started)
|
||||
- directory leases (improved metadata caching)
|
||||
- T10 copy offload (copy chunk is only mechanism supported)
|
||||
- encrypted shares
|
||||
|
||||
b) improved sparse file support
|
||||
|
||||
c) Directory entry caching relies on a 1 second timer, rather than
|
||||
using FindNotify or equivalent. - (started)
|
||||
using Directory Leases
|
||||
|
||||
d) quota support (needs minor kernel change since quota calls
|
||||
to make it to network filesystems or deviceless filesystems)
|
||||
|
||||
e) improve support for very old servers (OS/2 and Win9x for example)
|
||||
Including support for changing the time remotely (utimes command).
|
||||
e) Better optimize open to reduce redundant opens (using reference
|
||||
counts more) and to improve use of compounding in SMB3 to reduce
|
||||
number of roundtrips.
|
||||
|
||||
f) hook lower into the sockets api (as NFS/SunRPC does) to avoid the
|
||||
extra copy in/out of the socket buffers in some cases.
|
||||
|
||||
g) Better optimize open (and pathbased setfilesize) to reduce the
|
||||
oplock breaks coming from windows srv. Piggyback identical file
|
||||
opens on top of each other by incrementing reference count rather
|
||||
than resending (helps reduce server resource utilization and avoid
|
||||
spurious oplock breaks).
|
||||
|
||||
h) Add support for storing symlink info to Windows servers
|
||||
in the Extended Attribute format their SFU clients would recognize.
|
||||
|
||||
i) Finish inotify support so kde and gnome file list windows
|
||||
f) Finish inotify support so kde and gnome file list windows
|
||||
will autorefresh (partially complete by Asser). Needs minor kernel
|
||||
vfs change to support removing D_NOTIFY on a file.
|
||||
|
||||
j) Add GUI tool to configure /proc/fs/cifs settings and for display of
|
||||
g) Add GUI tool to configure /proc/fs/cifs settings and for display of
|
||||
the CIFS statistics (started)
|
||||
|
||||
k) implement support for security and trusted categories of xattrs
|
||||
h) implement support for security and trusted categories of xattrs
|
||||
(requires minor protocol extension) to enable better support for SELINUX
|
||||
|
||||
l) Implement O_DIRECT flag on open (already supported on mount)
|
||||
i) Implement O_DIRECT flag on open (already supported on mount)
|
||||
|
||||
m) Create UID mapping facility so server UIDs can be mapped on a per
|
||||
j) Create UID mapping facility so server UIDs can be mapped on a per
|
||||
mount or a per server basis to client UIDs or nobody if no mapping
|
||||
exists. This is helpful when Unix extensions are negotiated to
|
||||
allow better permission checking when UIDs differ on the server
|
||||
and client. Add new protocol request to the CIFS protocol
|
||||
standard for asking the server for the corresponding name of a
|
||||
particular uid.
|
||||
exists. Also better integration with winbind for resolving SID owners
|
||||
|
||||
n) DOS attrs - returned as pseudo-xattr in Samba format (check VFAT and NTFS for this too)
|
||||
k) Add tools to take advantage of more smb3 specific ioctls and features
|
||||
|
||||
o) mount check for unmatched uids
|
||||
l) encrypted file support
|
||||
|
||||
p) Add support for new vfs entry point for fallocate
|
||||
m) improved stats gathering, tools (perhaps integration with nfsometer?)
|
||||
|
||||
q) Add tools to take advantage of cifs/smb3 specific ioctls and features
|
||||
such as "CopyChunk" (fast server side file copy)
|
||||
n) allow setting more NTFS/SMB3 file attributes remotely (currently limited to compressed
|
||||
file attribute via chflags) and improve user space tools for managing and
|
||||
viewing them.
|
||||
|
||||
r) encrypted file support
|
||||
o) mount helper GUI (to simplify the various configuration options on mount)
|
||||
|
||||
s) improved stats gathering, tools (perhaps integration with nfsometer?)
|
||||
p) autonegotiation of dialects (offering more than one dialect ie SMB3.02,
|
||||
SMB3, SMB2.1 not just SMB3).
|
||||
|
||||
t) allow setting more NTFS/SMB3 file attributes remotely (currently limited to compressed
|
||||
file attribute via chflags)
|
||||
q) Allow mount.cifs to be more verbose in reporting errors with dialect
|
||||
or unsupported feature errors.
|
||||
|
||||
u) mount helper GUI (to simplify the various configuration options on mount)
|
||||
r) updating cifs documentation, and user guid.
|
||||
|
||||
s) Addressing bugs found by running a broader set of xfstests in standard
|
||||
file system xfstest suite.
|
||||
|
||||
t) split cifs and smb3 support into separate modules so legacy (and less
|
||||
secure) CIFS dialect can be disabled in environments that don't need it
|
||||
and simplify the code.
|
||||
|
||||
u) Finish up SMB3.1.1 dialect support
|
||||
|
||||
v) POSIX Extensions for SMB3.1.1
|
||||
|
||||
KNOWN BUGS
|
||||
====================================
|
||||
|
|
|
@ -1,24 +1,28 @@
|
|||
This is the client VFS module for the Common Internet File System
|
||||
(CIFS) protocol which is the successor to the Server Message Block
|
||||
This is the client VFS module for the SMB3 NAS protocol as well
|
||||
older dialects such as the Common Internet File System (CIFS)
|
||||
protocol which was the successor to the Server Message Block
|
||||
(SMB) protocol, the native file sharing mechanism for most early
|
||||
PC operating systems. New and improved versions of CIFS are now
|
||||
called SMB2 and SMB3. These dialects are also supported by the
|
||||
CIFS VFS module. CIFS is fully supported by network
|
||||
file servers such as Windows 2000, 2003, 2008 and 2012
|
||||
file servers such as Windows 2000, 2003, 2008, 2012 and 2016
|
||||
as well by Samba (which provides excellent CIFS
|
||||
server support for Linux and many other operating systems), so
|
||||
server support for Linux and many other operating systems), Apple
|
||||
systems, as well as most Network Attached Storage vendors, so
|
||||
this network filesystem client can mount to a wide variety of
|
||||
servers.
|
||||
|
||||
The intent of this module is to provide the most advanced network
|
||||
file system function for CIFS compliant servers, including better
|
||||
POSIX compliance, secure per-user session establishment, high
|
||||
performance safe distributed caching (oplock), optional packet
|
||||
file system function for SMB3 compliant servers, including advanced
|
||||
security features, excellent parallelized high performance i/o, better
|
||||
POSIX compliance, secure per-user session establishment, encryption,
|
||||
high performance safe distributed caching (leases/oplocks), optional packet
|
||||
signing, large files, Unicode support and other internationalization
|
||||
improvements. Since both Samba server and this filesystem client support
|
||||
the CIFS Unix extensions, the combination can provide a reasonable
|
||||
alternative to NFSv4 for fileserving in some Linux to Linux environments,
|
||||
not just in Linux to Windows environments.
|
||||
the CIFS Unix extensions (and in the future SMB3 POSIX extensions),
|
||||
the combination can provide a reasonable alternative to other network and
|
||||
cluster file systems for fileserving in some Linux to Linux environments,
|
||||
not just in Linux to Windows (or Linux to Mac) environments.
|
||||
|
||||
This filesystem has an mount utility (mount.cifs) that can be obtained from
|
||||
|
||||
|
|
|
@ -337,7 +337,7 @@ Examples for low-level BPF:
|
|||
jeq #14, good /* __NR_rt_sigprocmask */
|
||||
jeq #13, good /* __NR_rt_sigaction */
|
||||
jeq #35, good /* __NR_nanosleep */
|
||||
bad: ret #0 /* SECCOMP_RET_KILL */
|
||||
bad: ret #0 /* SECCOMP_RET_KILL_THREAD */
|
||||
good: ret #0x7fff0000 /* SECCOMP_RET_ALLOW */
|
||||
|
||||
The above example code can be placed into a file (here called "foo"), and
|
||||
|
|
|
@ -1680,6 +1680,9 @@ accept_dad - INTEGER
|
|||
2: Enable DAD, and disable IPv6 operation if MAC-based duplicate
|
||||
link-local address has been found.
|
||||
|
||||
DAD operation and mode on a given interface will be selected according
|
||||
to the maximum value of conf/{all,interface}/accept_dad.
|
||||
|
||||
force_tllao - BOOLEAN
|
||||
Enable sending the target link-layer address option even when
|
||||
responding to a unicast neighbor solicitation.
|
||||
|
@ -1727,16 +1730,23 @@ suppress_frag_ndisc - INTEGER
|
|||
|
||||
optimistic_dad - BOOLEAN
|
||||
Whether to perform Optimistic Duplicate Address Detection (RFC 4429).
|
||||
0: disabled (default)
|
||||
1: enabled
|
||||
0: disabled (default)
|
||||
1: enabled
|
||||
|
||||
Optimistic Duplicate Address Detection for the interface will be enabled
|
||||
if at least one of conf/{all,interface}/optimistic_dad is set to 1,
|
||||
it will be disabled otherwise.
|
||||
|
||||
use_optimistic - BOOLEAN
|
||||
If enabled, do not classify optimistic addresses as deprecated during
|
||||
source address selection. Preferred addresses will still be chosen
|
||||
before optimistic addresses, subject to other ranking in the source
|
||||
address selection algorithm.
|
||||
0: disabled (default)
|
||||
1: enabled
|
||||
0: disabled (default)
|
||||
1: enabled
|
||||
|
||||
This will be enabled if at least one of
|
||||
conf/{all,interface}/use_optimistic is set to 1, disabled otherwise.
|
||||
|
||||
stable_secret - IPv6 address
|
||||
This IPv6 address will be used as a secret to generate IPv6
|
||||
|
|
|
@ -13,42 +13,42 @@ an example setup using a data-center-class switch ASIC chip. Other setups
|
|||
with SR-IOV or soft switches, such as OVS, are possible.
|
||||
|
||||
|
||||
User-space tools
|
||||
User-space tools
|
||||
|
||||
user space |
|
||||
+-------------------------------------------------------------------+
|
||||
kernel | Netlink
|
||||
|
|
||||
+--------------+-------------------------------+
|
||||
| Network stack |
|
||||
| (Linux) |
|
||||
| |
|
||||
+----------------------------------------------+
|
||||
user space |
|
||||
+-------------------------------------------------------------------+
|
||||
kernel | Netlink
|
||||
|
|
||||
+--------------+-------------------------------+
|
||||
| Network stack |
|
||||
| (Linux) |
|
||||
| |
|
||||
+----------------------------------------------+
|
||||
|
||||
sw1p2 sw1p4 sw1p6
|
||||
sw1p1 + sw1p3 + sw1p5 + eth1
|
||||
+ | + | + | +
|
||||
| | | | | | |
|
||||
+--+----+----+----+-+--+----+---+ +-----+-----+
|
||||
| Switch driver | | mgmt |
|
||||
| (this document) | | driver |
|
||||
| | | |
|
||||
+--------------+----------------+ +-----------+
|
||||
|
|
||||
kernel | HW bus (eg PCI)
|
||||
+-------------------------------------------------------------------+
|
||||
hardware |
|
||||
+--------------+---+------------+
|
||||
| Switch device (sw1) |
|
||||
| +----+ +--------+
|
||||
| | v offloaded data path | mgmt port
|
||||
| | | |
|
||||
+--|----|----+----+----+----+---+
|
||||
| | | | | |
|
||||
+ + + + + +
|
||||
p1 p2 p3 p4 p5 p6
|
||||
sw1p1 + sw1p3 + sw1p5 + eth1
|
||||
+ | + | + | +
|
||||
| | | | | | |
|
||||
+--+----+----+----+----+----+---+ +-----+-----+
|
||||
| Switch driver | | mgmt |
|
||||
| (this document) | | driver |
|
||||
| | | |
|
||||
+--------------+----------------+ +-----------+
|
||||
|
|
||||
kernel | HW bus (eg PCI)
|
||||
+-------------------------------------------------------------------+
|
||||
hardware |
|
||||
+--------------+----------------+
|
||||
| Switch device (sw1) |
|
||||
| +----+ +--------+
|
||||
| | v offloaded data path | mgmt port
|
||||
| | | |
|
||||
+--|----|----+----+----+----+---+
|
||||
| | | | | |
|
||||
+ + + + + +
|
||||
p1 p2 p3 p4 p5 p6
|
||||
|
||||
front-panel ports
|
||||
front-panel ports
|
||||
|
||||
|
||||
Fig 1.
|
||||
|
|
|
@ -75,6 +75,7 @@ show up in /proc/sys/kernel:
|
|||
- reboot-cmd [ SPARC only ]
|
||||
- rtsig-max
|
||||
- rtsig-nr
|
||||
- seccomp/ ==> Documentation/userspace-api/seccomp_filter.rst
|
||||
- sem
|
||||
- sem_next_id [ sysv ipc ]
|
||||
- sg-big-buff [ generic SCSI device (sg) ]
|
||||
|
|
|
@ -87,11 +87,16 @@ Return values
|
|||
A seccomp filter may return any of the following values. If multiple
|
||||
filters exist, the return value for the evaluation of a given system
|
||||
call will always use the highest precedent value. (For example,
|
||||
``SECCOMP_RET_KILL`` will always take precedence.)
|
||||
``SECCOMP_RET_KILL_PROCESS`` will always take precedence.)
|
||||
|
||||
In precedence order, they are:
|
||||
|
||||
``SECCOMP_RET_KILL``:
|
||||
``SECCOMP_RET_KILL_PROCESS``:
|
||||
Results in the entire process exiting immediately without executing
|
||||
the system call. The exit status of the task (``status & 0x7f``)
|
||||
will be ``SIGSYS``, not ``SIGKILL``.
|
||||
|
||||
``SECCOMP_RET_KILL_THREAD``:
|
||||
Results in the task exiting immediately without executing the
|
||||
system call. The exit status of the task (``status & 0x7f``) will
|
||||
be ``SIGSYS``, not ``SIGKILL``.
|
||||
|
@ -141,6 +146,15 @@ In precedence order, they are:
|
|||
allow use of ptrace, even of other sandboxed processes, without
|
||||
extreme care; ptracers can use this mechanism to escape.)
|
||||
|
||||
``SECCOMP_RET_LOG``:
|
||||
Results in the system call being executed after it is logged. This
|
||||
should be used by application developers to learn which syscalls their
|
||||
application needs without having to iterate through multiple test and
|
||||
development cycles to build the list.
|
||||
|
||||
This action will only be logged if "log" is present in the
|
||||
actions_logged sysctl string.
|
||||
|
||||
``SECCOMP_RET_ALLOW``:
|
||||
Results in the system call being executed.
|
||||
|
||||
|
@ -169,7 +183,41 @@ The ``samples/seccomp/`` directory contains both an x86-specific example
|
|||
and a more generic example of a higher level macro interface for BPF
|
||||
program generation.
|
||||
|
||||
Sysctls
|
||||
=======
|
||||
|
||||
Seccomp's sysctl files can be found in the ``/proc/sys/kernel/seccomp/``
|
||||
directory. Here's a description of each file in that directory:
|
||||
|
||||
``actions_avail``:
|
||||
A read-only ordered list of seccomp return values (refer to the
|
||||
``SECCOMP_RET_*`` macros above) in string form. The ordering, from
|
||||
left-to-right, is the least permissive return value to the most
|
||||
permissive return value.
|
||||
|
||||
The list represents the set of seccomp return values supported
|
||||
by the kernel. A userspace program may use this list to
|
||||
determine if the actions found in the ``seccomp.h``, when the
|
||||
program was built, differs from the set of actions actually
|
||||
supported in the current running kernel.
|
||||
|
||||
``actions_logged``:
|
||||
A read-write ordered list of seccomp return values (refer to the
|
||||
``SECCOMP_RET_*`` macros above) that are allowed to be logged. Writes
|
||||
to the file do not need to be in ordered form but reads from the file
|
||||
will be ordered in the same way as the actions_avail sysctl.
|
||||
|
||||
It is important to note that the value of ``actions_logged`` does not
|
||||
prevent certain actions from being logged when the audit subsystem is
|
||||
configured to audit a task. If the action is not found in
|
||||
``actions_logged`` list, the final decision on whether to audit the
|
||||
action for that task is ultimately left up to the audit subsystem to
|
||||
decide for all seccomp return values other than ``SECCOMP_RET_ALLOW``.
|
||||
|
||||
The ``allow`` string is not accepted in the ``actions_logged`` sysctl
|
||||
as it is not possible to log ``SECCOMP_RET_ALLOW`` actions. Attempting
|
||||
to write ``allow`` to the sysctl will result in an EINVAL being
|
||||
returned.
|
||||
|
||||
Adding architecture support
|
||||
===========================
|
||||
|
|
24
MAINTAINERS
24
MAINTAINERS
|
@ -352,6 +352,18 @@ L: linux-acpi@vger.kernel.org
|
|||
S: Maintained
|
||||
F: drivers/acpi/arm64
|
||||
|
||||
ACPI PMIC DRIVERS
|
||||
M: "Rafael J. Wysocki" <rjw@rjwysocki.net>
|
||||
M: Len Brown <lenb@kernel.org>
|
||||
R: Andy Shevchenko <andy@infradead.org>
|
||||
R: Mika Westerberg <mika.westerberg@linux.intel.com>
|
||||
L: linux-acpi@vger.kernel.org
|
||||
Q: https://patchwork.kernel.org/project/linux-acpi/list/
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
|
||||
B: https://bugzilla.kernel.org
|
||||
S: Supported
|
||||
F: drivers/acpi/pmic/
|
||||
|
||||
ACPI THERMAL DRIVER
|
||||
M: Zhang Rui <rui.zhang@intel.com>
|
||||
L: linux-acpi@vger.kernel.org
|
||||
|
@ -2853,7 +2865,6 @@ S: Supported
|
|||
F: drivers/scsi/bnx2i/
|
||||
|
||||
BROADCOM BNX2X 10 GIGABIT ETHERNET DRIVER
|
||||
M: Yuval Mintz <Yuval.Mintz@cavium.com>
|
||||
M: Ariel Elior <ariel.elior@cavium.com>
|
||||
M: everest-linux-l2@cavium.com
|
||||
L: netdev@vger.kernel.org
|
||||
|
@ -6643,8 +6654,8 @@ M: Alexander Aring <alex.aring@gmail.com>
|
|||
M: Stefan Schmidt <stefan@osg.samsung.com>
|
||||
L: linux-wpan@vger.kernel.org
|
||||
W: http://wpan.cakelab.org/
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth.git
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/sschmidt/wpan.git
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/sschmidt/wpan-next.git
|
||||
S: Maintained
|
||||
F: net/ieee802154/
|
||||
F: net/mac802154/
|
||||
|
@ -8586,6 +8597,12 @@ M: Sean Wang <sean.wang@mediatek.com>
|
|||
S: Maintained
|
||||
F: drivers/media/rc/mtk-cir.c
|
||||
|
||||
MEDIATEK PMIC LED DRIVER
|
||||
M: Sean Wang <sean.wang@mediatek.com>
|
||||
S: Maintained
|
||||
F: drivers/leds/leds-mt6323.c
|
||||
F: Documentation/devicetree/bindings/leds/leds-mt6323.txt
|
||||
|
||||
MEDIATEK ETHERNET DRIVER
|
||||
M: Felix Fietkau <nbd@openwrt.org>
|
||||
M: John Crispin <john@phrozen.org>
|
||||
|
@ -11047,7 +11064,6 @@ S: Supported
|
|||
F: drivers/scsi/qedi/
|
||||
|
||||
QLOGIC QL4xxx ETHERNET DRIVER
|
||||
M: Yuval Mintz <Yuval.Mintz@cavium.com>
|
||||
M: Ariel Elior <Ariel.Elior@cavium.com>
|
||||
M: everest-linux-l2@cavium.com
|
||||
L: netdev@vger.kernel.org
|
||||
|
|
6
Makefile
6
Makefile
|
@ -1,7 +1,7 @@
|
|||
VERSION = 4
|
||||
PATCHLEVEL = 14
|
||||
SUBLEVEL = 0
|
||||
EXTRAVERSION = -rc1
|
||||
EXTRAVERSION = -rc3
|
||||
NAME = Fearless Coyote
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
@ -1172,11 +1172,11 @@ headers_check: headers_install
|
|||
|
||||
PHONY += kselftest
|
||||
kselftest:
|
||||
$(Q)$(MAKE) -C tools/testing/selftests run_tests
|
||||
$(Q)$(MAKE) -C $(srctree)/tools/testing/selftests run_tests
|
||||
|
||||
PHONY += kselftest-clean
|
||||
kselftest-clean:
|
||||
$(Q)$(MAKE) -C tools/testing/selftests clean
|
||||
$(Q)$(MAKE) -C $(srctree)/tools/testing/selftests clean
|
||||
|
||||
PHONY += kselftest-merge
|
||||
kselftest-merge:
|
||||
|
|
|
@ -78,9 +78,6 @@ struct task_struct;
|
|||
|
||||
#endif
|
||||
|
||||
#define copy_segments(tsk, mm) do { } while (0)
|
||||
#define release_segments(mm) do { } while (0)
|
||||
|
||||
#define KSTK_EIP(tsk) (task_pt_regs(tsk)->ret)
|
||||
#define KSTK_ESP(tsk) (task_pt_regs(tsk)->sp)
|
||||
|
||||
|
|
|
@ -267,15 +267,19 @@ &i2c2 {
|
|||
clock-frequency = <400000>;
|
||||
|
||||
as3645a@30 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
reg = <0x30>;
|
||||
compatible = "ams,as3645a";
|
||||
flash {
|
||||
flash@0 {
|
||||
reg = <0x0>;
|
||||
flash-timeout-us = <150000>;
|
||||
flash-max-microamp = <320000>;
|
||||
led-max-microamp = <60000>;
|
||||
peak-current-limit = <1750000>;
|
||||
ams,input-max-microamp = <1750000>;
|
||||
};
|
||||
indicator {
|
||||
indicator@1 {
|
||||
reg = <0x1>;
|
||||
led-max-microamp = <10000>;
|
||||
};
|
||||
};
|
||||
|
|
|
@ -139,11 +139,10 @@ extern int vfp_restore_user_hwstate(struct user_vfp __user *,
|
|||
#define TIF_NEED_RESCHED 1 /* rescheduling necessary */
|
||||
#define TIF_NOTIFY_RESUME 2 /* callback before returning to user */
|
||||
#define TIF_UPROBE 3 /* breakpointed or singlestepping */
|
||||
#define TIF_FSCHECK 4 /* Check FS is USER_DS on return */
|
||||
#define TIF_SYSCALL_TRACE 5 /* syscall trace active */
|
||||
#define TIF_SYSCALL_AUDIT 6 /* syscall auditing active */
|
||||
#define TIF_SYSCALL_TRACEPOINT 7 /* syscall tracepoint instrumentation */
|
||||
#define TIF_SECCOMP 8 /* seccomp syscall filtering active */
|
||||
#define TIF_SYSCALL_TRACE 4 /* syscall trace active */
|
||||
#define TIF_SYSCALL_AUDIT 5 /* syscall auditing active */
|
||||
#define TIF_SYSCALL_TRACEPOINT 6 /* syscall tracepoint instrumentation */
|
||||
#define TIF_SECCOMP 7 /* seccomp syscall filtering active */
|
||||
|
||||
#define TIF_NOHZ 12 /* in adaptive nohz mode */
|
||||
#define TIF_USING_IWMMXT 17
|
||||
|
@ -154,7 +153,6 @@ extern int vfp_restore_user_hwstate(struct user_vfp __user *,
|
|||
#define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED)
|
||||
#define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME)
|
||||
#define _TIF_UPROBE (1 << TIF_UPROBE)
|
||||
#define _TIF_FSCHECK (1 << TIF_FSCHECK)
|
||||
#define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE)
|
||||
#define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT)
|
||||
#define _TIF_SYSCALL_TRACEPOINT (1 << TIF_SYSCALL_TRACEPOINT)
|
||||
|
@ -168,9 +166,8 @@ extern int vfp_restore_user_hwstate(struct user_vfp __user *,
|
|||
/*
|
||||
* Change these and you break ASM code in entry-common.S
|
||||
*/
|
||||
#define _TIF_WORK_MASK (_TIF_NEED_RESCHED | _TIF_SIGPENDING | \
|
||||
_TIF_NOTIFY_RESUME | _TIF_UPROBE | \
|
||||
_TIF_FSCHECK)
|
||||
#define _TIF_WORK_MASK (_TIF_NEED_RESCHED | _TIF_SIGPENDING | \
|
||||
_TIF_NOTIFY_RESUME | _TIF_UPROBE)
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* __ASM_ARM_THREAD_INFO_H */
|
||||
|
|
|
@ -70,8 +70,6 @@ static inline void set_fs(mm_segment_t fs)
|
|||
{
|
||||
current_thread_info()->addr_limit = fs;
|
||||
modify_domain(DOMAIN_KERNEL, fs ? DOMAIN_CLIENT : DOMAIN_MANAGER);
|
||||
/* On user-mode return, check fs is correct */
|
||||
set_thread_flag(TIF_FSCHECK);
|
||||
}
|
||||
|
||||
#define segment_eq(a, b) ((a) == (b))
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
#include <asm/unistd.h>
|
||||
#include <asm/ftrace.h>
|
||||
#include <asm/unwind.h>
|
||||
#include <asm/memory.h>
|
||||
#ifdef CONFIG_AEABI
|
||||
#include <asm/unistd-oabi.h>
|
||||
#endif
|
||||
|
@ -48,12 +49,14 @@ ret_fast_syscall:
|
|||
UNWIND(.fnstart )
|
||||
UNWIND(.cantunwind )
|
||||
disable_irq_notrace @ disable interrupts
|
||||
ldr r2, [tsk, #TI_ADDR_LIMIT]
|
||||
cmp r2, #TASK_SIZE
|
||||
blne addr_limit_check_failed
|
||||
ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing
|
||||
tst r1, #_TIF_SYSCALL_WORK
|
||||
bne fast_work_pending
|
||||
tst r1, #_TIF_WORK_MASK
|
||||
tst r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK
|
||||
bne fast_work_pending
|
||||
|
||||
|
||||
/* perform architecture specific actions before user return */
|
||||
arch_ret_to_user r1, lr
|
||||
|
||||
|
@ -76,16 +79,16 @@ ret_fast_syscall:
|
|||
UNWIND(.cantunwind )
|
||||
str r0, [sp, #S_R0 + S_OFF]! @ save returned r0
|
||||
disable_irq_notrace @ disable interrupts
|
||||
ldr r2, [tsk, #TI_ADDR_LIMIT]
|
||||
cmp r2, #TASK_SIZE
|
||||
blne addr_limit_check_failed
|
||||
ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing
|
||||
tst r1, #_TIF_SYSCALL_WORK
|
||||
bne fast_work_pending
|
||||
tst r1, #_TIF_WORK_MASK
|
||||
tst r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK
|
||||
beq no_work_pending
|
||||
UNWIND(.fnend )
|
||||
ENDPROC(ret_fast_syscall)
|
||||
|
||||
/* Slower path - fall through to work_pending */
|
||||
fast_work_pending:
|
||||
#endif
|
||||
|
||||
tst r1, #_TIF_SYSCALL_WORK
|
||||
|
@ -111,6 +114,9 @@ ENTRY(ret_to_user)
|
|||
ret_slow_syscall:
|
||||
disable_irq_notrace @ disable interrupts
|
||||
ENTRY(ret_to_user_from_irq)
|
||||
ldr r2, [tsk, #TI_ADDR_LIMIT]
|
||||
cmp r2, #TASK_SIZE
|
||||
blne addr_limit_check_failed
|
||||
ldr r1, [tsk, #TI_FLAGS]
|
||||
tst r1, #_TIF_WORK_MASK
|
||||
bne slow_work_pending
|
||||
|
|
|
@ -614,10 +614,6 @@ do_work_pending(struct pt_regs *regs, unsigned int thread_flags, int syscall)
|
|||
* Update the trace code with the current status.
|
||||
*/
|
||||
trace_hardirqs_off();
|
||||
|
||||
/* Check valid user FS if needed */
|
||||
addr_limit_user_check();
|
||||
|
||||
do {
|
||||
if (likely(thread_flags & _TIF_NEED_RESCHED)) {
|
||||
schedule();
|
||||
|
@ -678,3 +674,9 @@ struct page *get_signal_page(void)
|
|||
|
||||
return page;
|
||||
}
|
||||
|
||||
/* Defer to generic check */
|
||||
asmlinkage void addr_limit_check_failed(void)
|
||||
{
|
||||
addr_limit_user_check();
|
||||
}
|
||||
|
|
|
@ -50,17 +50,22 @@ KBUILD_CFLAGS += -fno-asynchronous-unwind-tables
|
|||
KBUILD_CFLAGS += $(call cc-option, -mpc-relative-literal-loads)
|
||||
KBUILD_AFLAGS += $(lseinstr) $(brokengasinst)
|
||||
|
||||
KBUILD_CFLAGS += $(call cc-option,-mabi=lp64)
|
||||
KBUILD_AFLAGS += $(call cc-option,-mabi=lp64)
|
||||
|
||||
ifeq ($(CONFIG_CPU_BIG_ENDIAN), y)
|
||||
KBUILD_CPPFLAGS += -mbig-endian
|
||||
CHECKFLAGS += -D__AARCH64EB__
|
||||
AS += -EB
|
||||
LD += -EB
|
||||
LDFLAGS += -maarch64linuxb
|
||||
UTS_MACHINE := aarch64_be
|
||||
else
|
||||
KBUILD_CPPFLAGS += -mlittle-endian
|
||||
CHECKFLAGS += -D__AARCH64EL__
|
||||
AS += -EL
|
||||
LD += -EL
|
||||
LDFLAGS += -maarch64linux
|
||||
UTS_MACHINE := aarch64
|
||||
endif
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef __ASM_LINKAGE_H
|
||||
#define __ASM_LINKAGE_H
|
||||
|
||||
#define __ALIGN .align 4
|
||||
#define __ALIGN_STR ".align 4"
|
||||
#define __ALIGN .align 2
|
||||
#define __ALIGN_STR ".align 2"
|
||||
|
||||
#endif
|
||||
|
|
|
@ -401,7 +401,7 @@ static inline phys_addr_t pmd_page_paddr(pmd_t pmd)
|
|||
/* Find an entry in the third-level page table. */
|
||||
#define pte_index(addr) (((addr) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))
|
||||
|
||||
#define pte_offset_phys(dir,addr) (pmd_page_paddr(*(dir)) + pte_index(addr) * sizeof(pte_t))
|
||||
#define pte_offset_phys(dir,addr) (pmd_page_paddr(READ_ONCE(*(dir))) + pte_index(addr) * sizeof(pte_t))
|
||||
#define pte_offset_kernel(dir,addr) ((pte_t *)__va(pte_offset_phys((dir), (addr))))
|
||||
|
||||
#define pte_offset_map(dir,addr) pte_offset_kernel((dir), (addr))
|
||||
|
|
|
@ -321,6 +321,8 @@ void kernel_neon_end(void)
|
|||
}
|
||||
EXPORT_SYMBOL(kernel_neon_end);
|
||||
|
||||
#ifdef CONFIG_EFI
|
||||
|
||||
static DEFINE_PER_CPU(struct fpsimd_state, efi_fpsimd_state);
|
||||
static DEFINE_PER_CPU(bool, efi_fpsimd_state_used);
|
||||
|
||||
|
@ -370,6 +372,8 @@ void __efi_fpsimd_end(void)
|
|||
kernel_neon_end();
|
||||
}
|
||||
|
||||
#endif /* CONFIG_EFI */
|
||||
|
||||
#endif /* CONFIG_KERNEL_MODE_NEON */
|
||||
|
||||
#ifdef CONFIG_CPU_PM
|
||||
|
|
|
@ -384,6 +384,7 @@ ENTRY(kimage_vaddr)
|
|||
* booted in EL1 or EL2 respectively.
|
||||
*/
|
||||
ENTRY(el2_setup)
|
||||
msr SPsel, #1 // We want to use SP_EL{1,2}
|
||||
mrs x0, CurrentEL
|
||||
cmp x0, #CurrentEL_EL2
|
||||
b.eq 1f
|
||||
|
|
|
@ -751,10 +751,10 @@ asmlinkage void do_notify_resume(struct pt_regs *regs,
|
|||
*/
|
||||
trace_hardirqs_off();
|
||||
|
||||
/* Check valid user FS if needed */
|
||||
addr_limit_user_check();
|
||||
|
||||
do {
|
||||
/* Check valid user FS if needed */
|
||||
addr_limit_user_check();
|
||||
|
||||
if (thread_flags & _TIF_NEED_RESCHED) {
|
||||
schedule();
|
||||
} else {
|
||||
|
|
|
@ -651,7 +651,7 @@ static const struct fault_info fault_info[] = {
|
|||
{ do_translation_fault, SIGSEGV, SEGV_MAPERR, "level 0 translation fault" },
|
||||
{ do_translation_fault, SIGSEGV, SEGV_MAPERR, "level 1 translation fault" },
|
||||
{ do_translation_fault, SIGSEGV, SEGV_MAPERR, "level 2 translation fault" },
|
||||
{ do_page_fault, SIGSEGV, SEGV_MAPERR, "level 3 translation fault" },
|
||||
{ do_translation_fault, SIGSEGV, SEGV_MAPERR, "level 3 translation fault" },
|
||||
{ do_bad, SIGBUS, 0, "unknown 8" },
|
||||
{ do_page_fault, SIGSEGV, SEGV_ACCERR, "level 1 access flag fault" },
|
||||
{ do_page_fault, SIGSEGV, SEGV_ACCERR, "level 2 access flag fault" },
|
||||
|
|
|
@ -92,9 +92,6 @@ static inline void release_thread(struct task_struct *dead_task)
|
|||
{
|
||||
}
|
||||
|
||||
#define copy_segments(tsk, mm) do { } while (0)
|
||||
#define release_segments(mm) do { } while (0)
|
||||
|
||||
/*
|
||||
* saved kernel SP and DP of a blocked thread.
|
||||
*/
|
||||
|
|
|
@ -92,10 +92,6 @@ static inline void release_thread(struct task_struct *dead_task)
|
|||
extern asmlinkage void save_user_regs(struct user_context *target);
|
||||
extern asmlinkage void *restore_user_regs(const struct user_context *target, ...);
|
||||
|
||||
#define copy_segments(tsk, mm) do { } while (0)
|
||||
#define release_segments(mm) do { } while (0)
|
||||
#define forget_segments() do { } while (0)
|
||||
|
||||
unsigned long get_wchan(struct task_struct *p);
|
||||
|
||||
#define KSTK_EIP(tsk) ((tsk)->thread.frame0->pc)
|
||||
|
|
|
@ -118,14 +118,6 @@ struct mm_struct;
|
|||
/* Free all resources held by a thread. */
|
||||
extern void release_thread(struct task_struct *);
|
||||
|
||||
/* Copy and release all segment info associated with a VM */
|
||||
extern void copy_segments(struct task_struct *p, struct mm_struct * mm);
|
||||
extern void release_segments(struct mm_struct * mm);
|
||||
|
||||
/* Copy and release all segment info associated with a VM */
|
||||
#define copy_segments(p, mm) do { } while (0)
|
||||
#define release_segments(mm) do { } while (0)
|
||||
|
||||
unsigned long get_wchan(struct task_struct *p);
|
||||
#define KSTK_EIP(tsk) ((tsk)->thread.lr)
|
||||
#define KSTK_ESP(tsk) ((tsk)->thread.sp)
|
||||
|
|
|
@ -131,9 +131,6 @@ static inline void release_thread(struct task_struct *dead_task)
|
|||
{
|
||||
}
|
||||
|
||||
#define copy_segments(tsk, mm) do { } while (0)
|
||||
#define release_segments(mm) do { } while (0)
|
||||
|
||||
/*
|
||||
* Return saved PC of a blocked thread.
|
||||
*/
|
||||
|
|
|
@ -39,7 +39,7 @@ config MICROBLAZE
|
|||
# Endianness selection
|
||||
choice
|
||||
prompt "Endianness selection"
|
||||
default CPU_BIG_ENDIAN
|
||||
default CPU_LITTLE_ENDIAN
|
||||
help
|
||||
microblaze architectures can be configured for either little or
|
||||
big endian formats. Be sure to select the appropriate mode.
|
||||
|
|
|
@ -7,6 +7,7 @@ generic-y += fcntl.h
|
|||
generic-y += ioctl.h
|
||||
generic-y += ioctls.h
|
||||
generic-y += ipcbuf.h
|
||||
generic-y += kvm_para.h
|
||||
generic-y += mman.h
|
||||
generic-y += msgbuf.h
|
||||
generic-y += param.h
|
||||
|
|
|
@ -165,7 +165,7 @@ int dma_direct_mmap_coherent(struct device *dev, struct vm_area_struct *vma,
|
|||
unsigned long attrs)
|
||||
{
|
||||
#ifdef CONFIG_MMU
|
||||
unsigned long user_count = (vma->vm_end - vma->vm_start) >> PAGE_SHIFT;
|
||||
unsigned long user_count = vma_pages(vma);
|
||||
unsigned long count = PAGE_ALIGN(size) >> PAGE_SHIFT;
|
||||
unsigned long off = vma->vm_pgoff;
|
||||
unsigned long pfn;
|
||||
|
|
|
@ -22,10 +22,10 @@
|
|||
#include "pci.h"
|
||||
|
||||
static int (*ath79_pci_plat_dev_init)(struct pci_dev *dev);
|
||||
static const struct ath79_pci_irq *ath79_pci_irq_map __initdata;
|
||||
static unsigned ath79_pci_nr_irqs __initdata;
|
||||
static const struct ath79_pci_irq *ath79_pci_irq_map;
|
||||
static unsigned ath79_pci_nr_irqs;
|
||||
|
||||
static const struct ath79_pci_irq ar71xx_pci_irq_map[] __initconst = {
|
||||
static const struct ath79_pci_irq ar71xx_pci_irq_map[] = {
|
||||
{
|
||||
.slot = 17,
|
||||
.pin = 1,
|
||||
|
@ -41,7 +41,7 @@ static const struct ath79_pci_irq ar71xx_pci_irq_map[] __initconst = {
|
|||
}
|
||||
};
|
||||
|
||||
static const struct ath79_pci_irq ar724x_pci_irq_map[] __initconst = {
|
||||
static const struct ath79_pci_irq ar724x_pci_irq_map[] = {
|
||||
{
|
||||
.slot = 0,
|
||||
.pin = 1,
|
||||
|
@ -49,7 +49,7 @@ static const struct ath79_pci_irq ar724x_pci_irq_map[] __initconst = {
|
|||
}
|
||||
};
|
||||
|
||||
static const struct ath79_pci_irq qca955x_pci_irq_map[] __initconst = {
|
||||
static const struct ath79_pci_irq qca955x_pci_irq_map[] = {
|
||||
{
|
||||
.bus = 0,
|
||||
.slot = 0,
|
||||
|
@ -64,7 +64,7 @@ static const struct ath79_pci_irq qca955x_pci_irq_map[] __initconst = {
|
|||
},
|
||||
};
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, uint8_t slot, uint8_t pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, uint8_t slot, uint8_t pin)
|
||||
{
|
||||
int irq = -1;
|
||||
int i;
|
||||
|
|
|
@ -1377,29 +1377,32 @@ do { \
|
|||
|
||||
#define __write_64bit_c0_split(source, sel, val) \
|
||||
do { \
|
||||
unsigned long long __tmp; \
|
||||
unsigned long __flags; \
|
||||
\
|
||||
local_irq_save(__flags); \
|
||||
if (sel == 0) \
|
||||
__asm__ __volatile__( \
|
||||
".set\tmips64\n\t" \
|
||||
"dsll\t%L0, %L0, 32\n\t" \
|
||||
"dsll\t%L0, %L1, 32\n\t" \
|
||||
"dsrl\t%L0, %L0, 32\n\t" \
|
||||
"dsll\t%M0, %M0, 32\n\t" \
|
||||
"dsll\t%M0, %M1, 32\n\t" \
|
||||
"or\t%L0, %L0, %M0\n\t" \
|
||||
"dmtc0\t%L0, " #source "\n\t" \
|
||||
".set\tmips0" \
|
||||
: : "r" (val)); \
|
||||
: "=&r,r" (__tmp) \
|
||||
: "r,0" (val)); \
|
||||
else \
|
||||
__asm__ __volatile__( \
|
||||
".set\tmips64\n\t" \
|
||||
"dsll\t%L0, %L0, 32\n\t" \
|
||||
"dsll\t%L0, %L1, 32\n\t" \
|
||||
"dsrl\t%L0, %L0, 32\n\t" \
|
||||
"dsll\t%M0, %M0, 32\n\t" \
|
||||
"dsll\t%M0, %M1, 32\n\t" \
|
||||
"or\t%L0, %L0, %M0\n\t" \
|
||||
"dmtc0\t%L0, " #source ", " #sel "\n\t" \
|
||||
".set\tmips0" \
|
||||
: : "r" (val)); \
|
||||
: "=&r,r" (__tmp) \
|
||||
: "r,0" (val)); \
|
||||
local_irq_restore(__flags); \
|
||||
} while (0)
|
||||
|
||||
|
|
|
@ -618,8 +618,7 @@ static int mipspmu_event_init(struct perf_event *event)
|
|||
return -ENOENT;
|
||||
}
|
||||
|
||||
if ((unsigned int)event->cpu >= nr_cpumask_bits ||
|
||||
(event->cpu >= 0 && !cpu_online(event->cpu)))
|
||||
if (event->cpu >= 0 && !cpu_online(event->cpu))
|
||||
return -ENODEV;
|
||||
|
||||
if (!atomic_inc_not_zero(&active_events)) {
|
||||
|
|
|
@ -32,13 +32,13 @@
|
|||
#define INTC PC104PLUS_INTC_IRQ
|
||||
#define INTD PC104PLUS_INTD_IRQ
|
||||
|
||||
static char irq_tab_capcella[][5] __initdata = {
|
||||
static char irq_tab_capcella[][5] = {
|
||||
[11] = { -1, INT1, INT1, INT1, INT1 },
|
||||
[12] = { -1, INT2, INT2, INT2, INT2 },
|
||||
[14] = { -1, INTA, INTB, INTC, INTD }
|
||||
};
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
return irq_tab_capcella[slot][pin];
|
||||
}
|
||||
|
|
|
@ -147,7 +147,7 @@ static void qube_raq_via_board_id_fixup(struct pci_dev *dev)
|
|||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_0,
|
||||
qube_raq_via_board_id_fixup);
|
||||
|
||||
static char irq_tab_qube1[] __initdata = {
|
||||
static char irq_tab_qube1[] = {
|
||||
[COBALT_PCICONF_CPU] = 0,
|
||||
[COBALT_PCICONF_ETH0] = QUBE1_ETH0_IRQ,
|
||||
[COBALT_PCICONF_RAQSCSI] = SCSI_IRQ,
|
||||
|
@ -156,7 +156,7 @@ static char irq_tab_qube1[] __initdata = {
|
|||
[COBALT_PCICONF_ETH1] = 0
|
||||
};
|
||||
|
||||
static char irq_tab_cobalt[] __initdata = {
|
||||
static char irq_tab_cobalt[] = {
|
||||
[COBALT_PCICONF_CPU] = 0,
|
||||
[COBALT_PCICONF_ETH0] = ETH0_IRQ,
|
||||
[COBALT_PCICONF_RAQSCSI] = SCSI_IRQ,
|
||||
|
@ -165,7 +165,7 @@ static char irq_tab_cobalt[] __initdata = {
|
|||
[COBALT_PCICONF_ETH1] = ETH1_IRQ
|
||||
};
|
||||
|
||||
static char irq_tab_raq2[] __initdata = {
|
||||
static char irq_tab_raq2[] = {
|
||||
[COBALT_PCICONF_CPU] = 0,
|
||||
[COBALT_PCICONF_ETH0] = ETH0_IRQ,
|
||||
[COBALT_PCICONF_RAQSCSI] = RAQ2_SCSI_IRQ,
|
||||
|
@ -174,7 +174,7 @@ static char irq_tab_raq2[] __initdata = {
|
|||
[COBALT_PCICONF_ETH1] = ETH1_IRQ
|
||||
};
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
if (cobalt_board_id <= COBALT_BRD_ID_QUBE1)
|
||||
return irq_tab_qube1[slot];
|
||||
|
|
|
@ -43,7 +43,7 @@
|
|||
*/
|
||||
|
||||
#define MAX_SLOT_NUM 10
|
||||
static unsigned char irq_map[][5] __initdata = {
|
||||
static unsigned char irq_map[][5] = {
|
||||
[3] = {0, MARKEINS_PCI_IRQ_INTB, MARKEINS_PCI_IRQ_INTC,
|
||||
MARKEINS_PCI_IRQ_INTD, 0,},
|
||||
[4] = {0, MARKEINS_PCI_IRQ_INTA, 0, 0, 0,},
|
||||
|
@ -85,7 +85,7 @@ static void emma2rh_pci_host_fixup(struct pci_dev *dev)
|
|||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NEC, PCI_DEVICE_ID_NEC_EMMA2RH,
|
||||
emma2rh_pci_host_fixup);
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
return irq_map[slot][pin];
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
/* South bridge slot number is set by the pci probe process */
|
||||
static u8 sb_slot = 5;
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
int irq = 0;
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
#define INTB MACEPCI_SHARED0_IRQ
|
||||
#define INTC MACEPCI_SHARED1_IRQ
|
||||
#define INTD MACEPCI_SHARED2_IRQ
|
||||
static char irq_tab_mace[][5] __initdata = {
|
||||
static char irq_tab_mace[][5] = {
|
||||
/* Dummy INT#A INT#B INT#C INT#D */
|
||||
{0, 0, 0, 0, 0}, /* This is placeholder row - never used */
|
||||
{0, SCSI0, SCSI0, SCSI0, SCSI0},
|
||||
|
@ -39,7 +39,7 @@ static char irq_tab_mace[][5] __initdata = {
|
|||
* irqs. I suppose a device without a pin A will thank us for doing it
|
||||
* right if there exists such a broken piece of crap.
|
||||
*/
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
return irq_tab_mace[slot][pin];
|
||||
}
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
#include <asm/txx9/pci.h>
|
||||
#include <asm/txx9/jmr3927.h>
|
||||
|
||||
int __init jmr3927_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int jmr3927_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
unsigned char irq = pin;
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@ int pcibios_plat_dev_init(struct pci_dev *dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
return of_irq_parse_and_map_pci(dev, slot, pin);
|
||||
}
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
#define PCID 7
|
||||
|
||||
/* all the pci device has the PCIA pin, check the datasheet. */
|
||||
static char irq_tab[][5] __initdata = {
|
||||
static char irq_tab[][5] = {
|
||||
/* INTA INTB INTC INTD */
|
||||
{0, 0, 0, 0, 0}, /* 11: Unused */
|
||||
{0, 0, 0, 0, 0}, /* 12: Unused */
|
||||
|
@ -51,7 +51,7 @@ static char irq_tab[][5] __initdata = {
|
|||
{0, 0, 0, 0, 0}, /* 27: Unused */
|
||||
};
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
int virq;
|
||||
|
||||
|
|
|
@ -32,7 +32,7 @@ static void print_fixup_info(const struct pci_dev *pdev)
|
|||
pdev->vendor, pdev->device, pdev->irq);
|
||||
}
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
print_fixup_info(dev);
|
||||
return dev->irq;
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
static char pci_irq[5] = {
|
||||
};
|
||||
|
||||
static char irq_tab[][5] __initdata = {
|
||||
static char irq_tab[][5] = {
|
||||
/* INTA INTB INTC INTD */
|
||||
{0, 0, 0, 0, 0 }, /* 0: GT64120 PCI bridge */
|
||||
{0, 0, 0, 0, 0 }, /* 1: Unused */
|
||||
|
@ -38,7 +38,7 @@ static char irq_tab[][5] __initdata = {
|
|||
{0, PCID, PCIA, PCIB, PCIC } /* 21: PCI Slot 4 */
|
||||
};
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
int virq;
|
||||
virq = irq_tab[slot][pin];
|
||||
|
|
|
@ -22,19 +22,19 @@
|
|||
|
||||
#include <asm/vr41xx/mpc30x.h>
|
||||
|
||||
static const int internal_func_irqs[] __initconst = {
|
||||
static const int internal_func_irqs[] = {
|
||||
VRC4173_CASCADE_IRQ,
|
||||
VRC4173_AC97_IRQ,
|
||||
VRC4173_USB_IRQ,
|
||||
};
|
||||
|
||||
static const int irq_tab_mpc30x[] __initconst = {
|
||||
static const int irq_tab_mpc30x[] = {
|
||||
[12] = VRC4173_PCMCIA1_IRQ,
|
||||
[13] = VRC4173_PCMCIA2_IRQ,
|
||||
[29] = MQ200_IRQ,
|
||||
};
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
if (slot == 30)
|
||||
return internal_func_irqs[PCI_FUNC(dev->devfn)];
|
||||
|
|
|
@ -47,7 +47,7 @@
|
|||
|
||||
#if defined(CONFIG_PMC_MSP7120_GW)
|
||||
/* Garibaldi Board IRQ wiring to PCI slots */
|
||||
static char irq_tab[][5] __initdata = {
|
||||
static char irq_tab[][5] = {
|
||||
/* INTA INTB INTC INTD */
|
||||
{0, 0, 0, 0, 0 }, /* (AD[0]): Unused */
|
||||
{0, 0, 0, 0, 0 }, /* (AD[1]): Unused */
|
||||
|
@ -86,7 +86,7 @@ static char irq_tab[][5] __initdata = {
|
|||
#elif defined(CONFIG_PMC_MSP7120_EVAL)
|
||||
|
||||
/* MSP7120 Eval Board IRQ wiring to PCI slots */
|
||||
static char irq_tab[][5] __initdata = {
|
||||
static char irq_tab[][5] = {
|
||||
/* INTA INTB INTC INTD */
|
||||
{0, 0, 0, 0, 0 }, /* (AD[0]): Unused */
|
||||
{0, 0, 0, 0, 0 }, /* (AD[1]): Unused */
|
||||
|
@ -125,7 +125,7 @@ static char irq_tab[][5] __initdata = {
|
|||
#else
|
||||
|
||||
/* Unknown board -- don't assign any IRQs */
|
||||
static char irq_tab[][5] __initdata = {
|
||||
static char irq_tab[][5] = {
|
||||
/* INTA INTB INTC INTD */
|
||||
{0, 0, 0, 0, 0 }, /* (AD[0]): Unused */
|
||||
{0, 0, 0, 0, 0 }, /* (AD[1]): Unused */
|
||||
|
@ -202,7 +202,7 @@ int pcibios_plat_dev_init(struct pci_dev *dev)
|
|||
* RETURNS: IRQ number
|
||||
*
|
||||
****************************************************************************/
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
#if !defined(CONFIG_PMC_MSP7120_GW) && !defined(CONFIG_PMC_MSP7120_EVAL)
|
||||
printk(KERN_WARNING "PCI: unknown board, no PCI IRQs assigned.\n");
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
#include <asm/txx9/pci.h>
|
||||
#include <asm/txx9/rbtx4927.h>
|
||||
|
||||
int __init rbtx4927_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int rbtx4927_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
unsigned char irq = pin;
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
#include <asm/txx9/pci.h>
|
||||
#include <asm/txx9/rbtx4938.h>
|
||||
|
||||
int __init rbtx4938_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int rbtx4938_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
int irq = tx4938_pcic1_map_irq(dev, slot);
|
||||
|
||||
|
|
|
@ -40,7 +40,7 @@
|
|||
* seem to be a documentation error. At least on my RM200C the Cirrus
|
||||
* Logic CL-GD5434 VGA is device 3.
|
||||
*/
|
||||
static char irq_tab_rm200[8][5] __initdata = {
|
||||
static char irq_tab_rm200[8][5] = {
|
||||
/* INTA INTB INTC INTD */
|
||||
{ 0, 0, 0, 0, 0 }, /* EISA bridge */
|
||||
{ SCSI, SCSI, SCSI, SCSI, SCSI }, /* SCSI */
|
||||
|
@ -57,7 +57,7 @@ static char irq_tab_rm200[8][5] __initdata = {
|
|||
*
|
||||
* The VGA card is optional for RM300 systems.
|
||||
*/
|
||||
static char irq_tab_rm300d[8][5] __initdata = {
|
||||
static char irq_tab_rm300d[8][5] = {
|
||||
/* INTA INTB INTC INTD */
|
||||
{ 0, 0, 0, 0, 0 }, /* EISA bridge */
|
||||
{ SCSI, SCSI, SCSI, SCSI, SCSI }, /* SCSI */
|
||||
|
@ -69,7 +69,7 @@ static char irq_tab_rm300d[8][5] __initdata = {
|
|||
{ 0, INTD, INTA, INTB, INTC }, /* Slot 4 */
|
||||
};
|
||||
|
||||
static char irq_tab_rm300e[5][5] __initdata = {
|
||||
static char irq_tab_rm300e[5][5] = {
|
||||
/* INTA INTB INTC INTD */
|
||||
{ 0, 0, 0, 0, 0 }, /* HOST bridge */
|
||||
{ SCSI, SCSI, SCSI, SCSI, SCSI }, /* SCSI */
|
||||
|
@ -96,7 +96,7 @@ static char irq_tab_rm300e[5][5] __initdata = {
|
|||
#define INTC PCIT_IRQ_INTC
|
||||
#define INTD PCIT_IRQ_INTD
|
||||
|
||||
static char irq_tab_pcit[13][5] __initdata = {
|
||||
static char irq_tab_pcit[13][5] = {
|
||||
/* INTA INTB INTC INTD */
|
||||
{ 0, 0, 0, 0, 0 }, /* HOST bridge */
|
||||
{ SCSI0, SCSI0, SCSI0, SCSI0, SCSI0 }, /* SCSI */
|
||||
|
@ -113,7 +113,7 @@ static char irq_tab_pcit[13][5] __initdata = {
|
|||
{ 0, INTA, INTB, INTC, INTD }, /* Slot 5 */
|
||||
};
|
||||
|
||||
static char irq_tab_pcit_cplus[13][5] __initdata = {
|
||||
static char irq_tab_pcit_cplus[13][5] = {
|
||||
/* INTA INTB INTC INTD */
|
||||
{ 0, 0, 0, 0, 0 }, /* HOST bridge */
|
||||
{ 0, INTB, INTC, INTD, INTA }, /* PCI Slot 9 */
|
||||
|
@ -130,7 +130,7 @@ static inline int is_rm300_revd(void)
|
|||
return (csmsr & 0xa0) == 0x20;
|
||||
}
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
switch (sni_brd_type) {
|
||||
case SNI_BRD_PCI_TOWER_CPLUS:
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
|
||||
#include <asm/vr41xx/tb0219.h>
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
int irq = -1;
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
#include <asm/vr41xx/giu.h>
|
||||
#include <asm/vr41xx/tb0226.h>
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
int irq = -1;
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
|
||||
#include <asm/vr41xx/tb0287.h>
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
unsigned char bus;
|
||||
int irq = -1;
|
||||
|
|
|
@ -522,7 +522,7 @@ static int __init alchemy_pci_init(void)
|
|||
arch_initcall(alchemy_pci_init);
|
||||
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
struct alchemy_pci_context *ctx = dev->sysdata;
|
||||
if (ctx && ctx->board_map_irq)
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
#include <linux/bcma/bcma.h>
|
||||
#include <bcm47xx.h>
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -61,7 +61,7 @@ arch_initcall(lasat_pci_setup);
|
|||
#define LASAT_IRQ_PCIC (LASAT_IRQ_BASE + 7)
|
||||
#define LASAT_IRQ_PCID (LASAT_IRQ_BASE + 8)
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
switch (slot) {
|
||||
case 1:
|
||||
|
|
|
@ -361,7 +361,7 @@ static int mt7620_pci_probe(struct platform_device *pdev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
u16 cmd;
|
||||
u32 val;
|
||||
|
|
|
@ -59,8 +59,7 @@ union octeon_pci_address {
|
|||
} s;
|
||||
};
|
||||
|
||||
int __initconst (*octeon_pcibios_map_irq)(const struct pci_dev *dev,
|
||||
u8 slot, u8 pin);
|
||||
int (*octeon_pcibios_map_irq)(const struct pci_dev *dev, u8 slot, u8 pin);
|
||||
enum octeon_dma_bar_type octeon_dma_bar_type = OCTEON_DMA_BAR_TYPE_INVALID;
|
||||
|
||||
/**
|
||||
|
@ -74,7 +73,7 @@ enum octeon_dma_bar_type octeon_dma_bar_type = OCTEON_DMA_BAR_TYPE_INVALID;
|
|||
* as it goes through each bridge.
|
||||
* Returns Interrupt number for the device
|
||||
*/
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
if (octeon_pcibios_map_irq)
|
||||
return octeon_pcibios_map_irq(dev, slot, pin);
|
||||
|
|
|
@ -181,7 +181,7 @@ static inline void rt2880_pci_write_u32(unsigned long reg, u32 val)
|
|||
spin_unlock_irqrestore(&rt2880_pci_lock, flags);
|
||||
}
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
u16 cmd;
|
||||
int irq = -1;
|
||||
|
|
|
@ -564,7 +564,7 @@ static int rt3883_pci_probe(struct platform_device *pdev)
|
|||
return err;
|
||||
}
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
return of_irq_parse_and_map_pci(dev, slot, pin);
|
||||
}
|
||||
|
|
|
@ -112,7 +112,7 @@ int __init tx4938_pciclk66_setup(void)
|
|||
return pciclk;
|
||||
}
|
||||
|
||||
int __init tx4938_pcic1_map_irq(const struct pci_dev *dev, u8 slot)
|
||||
int tx4938_pcic1_map_irq(const struct pci_dev *dev, u8 slot)
|
||||
{
|
||||
if (get_tx4927_pcicptr(dev->bus->sysdata) == tx4938_pcic1ptr) {
|
||||
switch (slot) {
|
||||
|
|
|
@ -48,7 +48,7 @@ void __init tx4939_report_pci1clk(void)
|
|||
((pciclk + 50000) / 100000) % 10);
|
||||
}
|
||||
|
||||
int __init tx4939_pcic1_map_irq(const struct pci_dev *dev, u8 slot)
|
||||
int tx4939_pcic1_map_irq(const struct pci_dev *dev, u8 slot)
|
||||
{
|
||||
if (get_tx4927_pcicptr(dev->bus->sysdata) == tx4939_pcic1ptr) {
|
||||
switch (slot) {
|
||||
|
@ -68,7 +68,7 @@ int __init tx4939_pcic1_map_irq(const struct pci_dev *dev, u8 slot)
|
|||
return -1;
|
||||
}
|
||||
|
||||
int __init tx4939_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int tx4939_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
int irq = tx4939_pcic1_map_irq(dev, slot);
|
||||
|
||||
|
|
|
@ -205,7 +205,7 @@ int xlp_socdev_to_node(const struct pci_dev *lnkdev)
|
|||
return PCI_SLOT(lnkdev->devfn) / 8;
|
||||
}
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
struct pci_dev *lnkdev;
|
||||
int lnkfunc, node;
|
||||
|
|
|
@ -315,7 +315,7 @@ static void xls_pcie_ack_b(struct irq_data *d)
|
|||
}
|
||||
}
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
return get_irq_vector(dev);
|
||||
}
|
||||
|
|
|
@ -1464,8 +1464,7 @@ static int cvmx_pcie_rc_initialize(int pcie_port)
|
|||
* as it goes through each bridge.
|
||||
* Returns Interrupt number for the device
|
||||
*/
|
||||
int __init octeon_pcie_pcibios_map_irq(const struct pci_dev *dev,
|
||||
u8 slot, u8 pin)
|
||||
int octeon_pcie_pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
/*
|
||||
* The EBH5600 board with the PCI to PCIe bridge mistakenly
|
||||
|
|
|
@ -22,6 +22,8 @@
|
|||
#include <linux/smp.h>
|
||||
#include <linux/interrupt.h>
|
||||
|
||||
#include <asm/setup.h>
|
||||
|
||||
#ifdef CONFIG_MIPS_MT_SMP
|
||||
#define MIPS_CPU_IPI_RESCHED_IRQ 0 /* SW int 0 for resched */
|
||||
#define MIPS_CPU_IPI_CALL_IRQ 1 /* SW int 1 for call */
|
||||
|
|
|
@ -386,9 +386,10 @@ int pcibios_plat_dev_init(struct pci_dev *dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
static int (*txx9_pci_map_irq)(const struct pci_dev *dev, u8 slot, u8 pin);
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
return txx9_board_vec->pci_map_irq(dev, slot, pin);
|
||||
return txx9_pci_map_irq(dev, slot, pin);
|
||||
}
|
||||
|
||||
char * (*txx9_board_pcibios_setup)(char *str) __initdata;
|
||||
|
@ -424,5 +425,8 @@ char *__init txx9_pcibios_setup(char *str)
|
|||
txx9_pci_err_action = TXX9_PCI_ERR_IGNORE;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
txx9_pci_map_irq = txx9_board_vec->pci_map_irq;
|
||||
|
||||
return str;
|
||||
}
|
||||
|
|
|
@ -59,10 +59,6 @@ void arch_cpu_idle(void)
|
|||
}
|
||||
#endif
|
||||
|
||||
void release_segments(struct mm_struct *mm)
|
||||
{
|
||||
}
|
||||
|
||||
void machine_restart(char *cmd)
|
||||
{
|
||||
#ifdef CONFIG_KERNEL_DEBUGGER
|
||||
|
@ -112,14 +108,6 @@ void release_thread(struct task_struct *dead_task)
|
|||
{
|
||||
}
|
||||
|
||||
/*
|
||||
* we do not have to muck with descriptors here, that is
|
||||
* done in switch_mm() as needed.
|
||||
*/
|
||||
void copy_segments(struct task_struct *p, struct mm_struct *new_mm)
|
||||
{
|
||||
}
|
||||
|
||||
/*
|
||||
* this gets called so that we can store lazy state into memory and copy the
|
||||
* current task into the new thread.
|
||||
|
|
|
@ -257,6 +257,18 @@ config PARISC_PAGE_SIZE_64KB
|
|||
|
||||
endchoice
|
||||
|
||||
config PARISC_SELF_EXTRACT
|
||||
bool "Build kernel as self-extracting executable"
|
||||
default y
|
||||
help
|
||||
Say Y if you want to build the parisc kernel as a kind of
|
||||
self-extracting executable.
|
||||
|
||||
If you say N here, the kernel will be compressed with gzip
|
||||
which can be loaded by the palo bootloader directly too.
|
||||
|
||||
If you don't know what to do here, say Y.
|
||||
|
||||
config SMP
|
||||
bool "Symmetric multi-processing support"
|
||||
---help---
|
||||
|
|
|
@ -129,8 +129,13 @@ Image: vmlinux
|
|||
bzImage: vmlinux
|
||||
$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
|
||||
|
||||
ifdef CONFIG_PARISC_SELF_EXTRACT
|
||||
vmlinuz: bzImage
|
||||
$(OBJCOPY) $(boot)/bzImage $@
|
||||
else
|
||||
vmlinuz: vmlinux
|
||||
@gzip -cf -9 $< > $@
|
||||
endif
|
||||
|
||||
install:
|
||||
$(CONFIG_SHELL) $(src)/arch/parisc/install.sh \
|
||||
|
|
|
@ -15,7 +15,7 @@ targets += misc.o piggy.o sizes.h head.o real2.o firmware.o
|
|||
KBUILD_CFLAGS := -D__KERNEL__ -O2 -DBOOTLOADER
|
||||
KBUILD_CFLAGS += -DDISABLE_BRANCH_PROFILING
|
||||
KBUILD_CFLAGS += $(cflags-y) -fno-delete-null-pointer-checks
|
||||
KBUILD_CFLAGS += -fno-PIE -mno-space-regs -mdisable-fpregs
|
||||
KBUILD_CFLAGS += -fno-PIE -mno-space-regs -mdisable-fpregs -Os
|
||||
ifndef CONFIG_64BIT
|
||||
KBUILD_CFLAGS += -mfast-indirect-calls
|
||||
endif
|
||||
|
|
|
@ -24,7 +24,8 @@
|
|||
/* Symbols defined by linker scripts */
|
||||
extern char input_data[];
|
||||
extern int input_len;
|
||||
extern __le32 output_len; /* at unaligned address, little-endian */
|
||||
/* output_len is inserted by the linker possibly at an unaligned address */
|
||||
extern __le32 output_len __aligned(1);
|
||||
extern char _text, _end;
|
||||
extern char _bss, _ebss;
|
||||
extern char _startcode_end;
|
||||
|
|
|
@ -280,6 +280,7 @@ void setup_pdc(void); /* in inventory.c */
|
|||
/* wrapper-functions from pdc.c */
|
||||
|
||||
int pdc_add_valid(unsigned long address);
|
||||
int pdc_instr(unsigned int *instr);
|
||||
int pdc_chassis_info(struct pdc_chassis_info *chassis_info, void *led_info, unsigned long len);
|
||||
int pdc_chassis_disp(unsigned long disp);
|
||||
int pdc_chassis_warn(unsigned long *warn);
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#ifndef __ASM_SMP_H
|
||||
#define __ASM_SMP_H
|
||||
|
||||
extern int init_per_cpu(int cpuid);
|
||||
|
||||
#if defined(CONFIG_SMP)
|
||||
|
||||
|
|
|
@ -232,6 +232,26 @@ int pdc_add_valid(unsigned long address)
|
|||
}
|
||||
EXPORT_SYMBOL(pdc_add_valid);
|
||||
|
||||
/**
|
||||
* pdc_instr - Get instruction that invokes PDCE_CHECK in HPMC handler.
|
||||
* @instr: Pointer to variable which will get instruction opcode.
|
||||
*
|
||||
* The return value is PDC_OK (0) in case call succeeded.
|
||||
*/
|
||||
int __init pdc_instr(unsigned int *instr)
|
||||
{
|
||||
int retval;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&pdc_lock, flags);
|
||||
retval = mem_pdc_call(PDC_INSTR, 0UL, __pa(pdc_result));
|
||||
convert_to_wide(pdc_result);
|
||||
*instr = pdc_result[0];
|
||||
spin_unlock_irqrestore(&pdc_lock, flags);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
/**
|
||||
* pdc_chassis_info - Return chassis information.
|
||||
* @result: The return buffer.
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#include <linux/memblock.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/kthread.h>
|
||||
#include <linux/initrd.h>
|
||||
|
||||
#include <asm/pdc.h>
|
||||
#include <asm/pdcpat.h>
|
||||
|
@ -216,8 +217,16 @@ void __init pdc_pdt_init(void)
|
|||
}
|
||||
|
||||
for (i = 0; i < pdt_status.pdt_entries; i++) {
|
||||
unsigned long addr;
|
||||
|
||||
report_mem_err(pdt_entry[i]);
|
||||
|
||||
addr = pdt_entry[i] & PDT_ADDR_PHYS_MASK;
|
||||
if (IS_ENABLED(CONFIG_BLK_DEV_INITRD) &&
|
||||
addr >= initrd_start && addr < initrd_end)
|
||||
pr_crit("CRITICAL: initrd possibly broken "
|
||||
"due to bad memory!\n");
|
||||
|
||||
/* mark memory page bad */
|
||||
memblock_reserve(pdt_entry[i] & PAGE_MASK, PAGE_SIZE);
|
||||
}
|
||||
|
|
|
@ -317,7 +317,7 @@ void __init collect_boot_cpu_data(void)
|
|||
*
|
||||
* o Enable CPU profiling hooks.
|
||||
*/
|
||||
int init_per_cpu(int cpunum)
|
||||
int __init init_per_cpu(int cpunum)
|
||||
{
|
||||
int ret;
|
||||
struct pdc_coproc_cfg coproc_cfg;
|
||||
|
|
|
@ -38,6 +38,7 @@
|
|||
#include <linux/export.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/sched/clock.h>
|
||||
#include <linux/start_kernel.h>
|
||||
|
||||
#include <asm/processor.h>
|
||||
#include <asm/sections.h>
|
||||
|
@ -48,6 +49,7 @@
|
|||
#include <asm/io.h>
|
||||
#include <asm/setup.h>
|
||||
#include <asm/unwind.h>
|
||||
#include <asm/smp.h>
|
||||
|
||||
static char __initdata command_line[COMMAND_LINE_SIZE];
|
||||
|
||||
|
@ -115,7 +117,6 @@ void __init dma_ops_init(void)
|
|||
}
|
||||
#endif
|
||||
|
||||
extern int init_per_cpu(int cpuid);
|
||||
extern void collect_boot_cpu_data(void);
|
||||
|
||||
void __init setup_arch(char **cmdline_p)
|
||||
|
@ -398,9 +399,8 @@ static int __init parisc_init(void)
|
|||
}
|
||||
arch_initcall(parisc_init);
|
||||
|
||||
void start_parisc(void)
|
||||
void __init start_parisc(void)
|
||||
{
|
||||
extern void start_kernel(void);
|
||||
extern void early_trap_init(void);
|
||||
|
||||
int ret, cpunum;
|
||||
|
|
|
@ -255,12 +255,11 @@ void arch_send_call_function_single_ipi(int cpu)
|
|||
static void __init
|
||||
smp_cpu_init(int cpunum)
|
||||
{
|
||||
extern int init_per_cpu(int); /* arch/parisc/kernel/processor.c */
|
||||
extern void init_IRQ(void); /* arch/parisc/kernel/irq.c */
|
||||
extern void start_cpu_itimer(void); /* arch/parisc/kernel/time.c */
|
||||
|
||||
/* Set modes and Enable floating point coprocessor */
|
||||
(void) init_per_cpu(cpunum);
|
||||
init_per_cpu(cpunum);
|
||||
|
||||
disable_sr_hashing();
|
||||
|
||||
|
|
|
@ -817,7 +817,7 @@ void __init initialize_ivt(const void *iva)
|
|||
u32 check = 0;
|
||||
u32 *ivap;
|
||||
u32 *hpmcp;
|
||||
u32 length;
|
||||
u32 length, instr;
|
||||
|
||||
if (strcmp((const char *)iva, "cows can fly"))
|
||||
panic("IVT invalid");
|
||||
|
@ -827,6 +827,14 @@ void __init initialize_ivt(const void *iva)
|
|||
for (i = 0; i < 8; i++)
|
||||
*ivap++ = 0;
|
||||
|
||||
/*
|
||||
* Use PDC_INSTR firmware function to get instruction that invokes
|
||||
* PDCE_CHECK in HPMC handler. See programming note at page 1-31 of
|
||||
* the PA 1.1 Firmware Architecture document.
|
||||
*/
|
||||
if (pdc_instr(&instr) == PDC_OK)
|
||||
ivap[0] = instr;
|
||||
|
||||
/* Compute Checksum for HPMC handler */
|
||||
length = os_hpmc_size;
|
||||
ivap[7] = length;
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
#include <linux/slab.h>
|
||||
#include <linux/kallsyms.h>
|
||||
#include <linux/sort.h>
|
||||
#include <linux/sched.h>
|
||||
|
||||
#include <linux/uaccess.h>
|
||||
#include <asm/assembly.h>
|
||||
|
@ -279,6 +280,17 @@ static void unwind_frame_regs(struct unwind_frame_info *info)
|
|||
|
||||
info->prev_sp = sp - 64;
|
||||
info->prev_ip = 0;
|
||||
|
||||
/* The stack is at the end inside the thread_union
|
||||
* struct. If we reach data, we have reached the
|
||||
* beginning of the stack and should stop unwinding. */
|
||||
if (info->prev_sp >= (unsigned long) task_thread_info(info->t) &&
|
||||
info->prev_sp < ((unsigned long) task_thread_info(info->t)
|
||||
+ THREAD_SZ_ALGN)) {
|
||||
info->prev_sp = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
if (get_user(tmp, (unsigned long *)(info->prev_sp - RP_OFFSET)))
|
||||
break;
|
||||
info->prev_ip = tmp;
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
#include <linux/interrupt.h>
|
||||
#include <linux/extable.h>
|
||||
#include <linux/uaccess.h>
|
||||
#include <linux/hugetlb.h>
|
||||
|
||||
#include <asm/traps.h>
|
||||
|
||||
|
@ -261,7 +262,7 @@ void do_page_fault(struct pt_regs *regs, unsigned long code,
|
|||
struct task_struct *tsk;
|
||||
struct mm_struct *mm;
|
||||
unsigned long acc_type;
|
||||
int fault;
|
||||
int fault = 0;
|
||||
unsigned int flags;
|
||||
|
||||
if (faulthandler_disabled())
|
||||
|
@ -315,7 +316,8 @@ void do_page_fault(struct pt_regs *regs, unsigned long code,
|
|||
goto out_of_memory;
|
||||
else if (fault & VM_FAULT_SIGSEGV)
|
||||
goto bad_area;
|
||||
else if (fault & VM_FAULT_SIGBUS)
|
||||
else if (fault & (VM_FAULT_SIGBUS|VM_FAULT_HWPOISON|
|
||||
VM_FAULT_HWPOISON_LARGE))
|
||||
goto bad_area;
|
||||
BUG();
|
||||
}
|
||||
|
@ -352,8 +354,7 @@ void do_page_fault(struct pt_regs *regs, unsigned long code,
|
|||
|
||||
if (user_mode(regs)) {
|
||||
struct siginfo si;
|
||||
|
||||
show_signal_msg(regs, code, address, tsk, vma);
|
||||
unsigned int lsb = 0;
|
||||
|
||||
switch (code) {
|
||||
case 15: /* Data TLB miss fault/Data page fault */
|
||||
|
@ -386,6 +387,30 @@ void do_page_fault(struct pt_regs *regs, unsigned long code,
|
|||
si.si_code = (code == 26) ? SEGV_ACCERR : SEGV_MAPERR;
|
||||
break;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MEMORY_FAILURE
|
||||
if (fault & (VM_FAULT_HWPOISON|VM_FAULT_HWPOISON_LARGE)) {
|
||||
printk(KERN_ERR
|
||||
"MCE: Killing %s:%d due to hardware memory corruption fault at %08lx\n",
|
||||
tsk->comm, tsk->pid, address);
|
||||
si.si_signo = SIGBUS;
|
||||
si.si_code = BUS_MCEERR_AR;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Either small page or large page may be poisoned.
|
||||
* In other words, VM_FAULT_HWPOISON_LARGE and
|
||||
* VM_FAULT_HWPOISON are mutually exclusive.
|
||||
*/
|
||||
if (fault & VM_FAULT_HWPOISON_LARGE)
|
||||
lsb = hstate_index_to_shift(VM_FAULT_GET_HINDEX(fault));
|
||||
else if (fault & VM_FAULT_HWPOISON)
|
||||
lsb = PAGE_SHIFT;
|
||||
else
|
||||
show_signal_msg(regs, code, address, tsk, vma);
|
||||
si.si_addr_lsb = lsb;
|
||||
|
||||
si.si_errno = 0;
|
||||
si.si_addr = (void __user *) address;
|
||||
force_sig_info(si.si_signo, &si, current);
|
||||
|
|
|
@ -138,10 +138,11 @@ CONFIG_FRAMEBUFFER_CONSOLE=y
|
|||
CONFIG_LOGO=y
|
||||
CONFIG_SOUND=m
|
||||
CONFIG_SND=m
|
||||
CONFIG_SND_SEQUENCER=m
|
||||
CONFIG_SND_OSSEMUL=y
|
||||
CONFIG_SND_MIXER_OSS=m
|
||||
CONFIG_SND_PCM_OSS=m
|
||||
CONFIG_SND_SEQUENCER_OSS=y
|
||||
CONFIG_SND_SEQUENCER=m
|
||||
CONFIG_SND_SEQUENCER_OSS=m
|
||||
CONFIG_SND_POWERMAC=m
|
||||
CONFIG_SND_AOA=m
|
||||
CONFIG_SND_AOA_FABRIC_LAYOUT=m
|
||||
|
|
|
@ -64,11 +64,12 @@ CONFIG_LOGO=y
|
|||
# CONFIG_LOGO_LINUX_CLUT224 is not set
|
||||
CONFIG_SOUND=y
|
||||
CONFIG_SND=y
|
||||
CONFIG_SND_SEQUENCER=y
|
||||
CONFIG_SND_OSSEMUL=y
|
||||
CONFIG_SND_MIXER_OSS=y
|
||||
CONFIG_SND_PCM_OSS=y
|
||||
CONFIG_SND_SEQUENCER_OSS=y
|
||||
# CONFIG_SND_VERBOSE_PROCFS is not set
|
||||
CONFIG_SND_SEQUENCER=y
|
||||
CONFIG_SND_SEQUENCER_OSS=y
|
||||
# CONFIG_USB_SUPPORT is not set
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_DRV_GENERIC=y
|
||||
|
|
|
@ -115,9 +115,10 @@ CONFIG_VGACON_SOFT_SCROLLBACK=y
|
|||
CONFIG_LOGO=y
|
||||
CONFIG_SOUND=y
|
||||
CONFIG_SND=y
|
||||
CONFIG_SND_SEQUENCER=y
|
||||
CONFIG_SND_OSSEMUL=y
|
||||
CONFIG_SND_MIXER_OSS=y
|
||||
CONFIG_SND_PCM_OSS=y
|
||||
CONFIG_SND_SEQUENCER=y
|
||||
CONFIG_SND_SEQUENCER_OSS=y
|
||||
CONFIG_SND_USB_AUDIO=y
|
||||
CONFIG_SND_USB_USX2Y=y
|
||||
|
|
|
@ -227,11 +227,12 @@ CONFIG_FRAMEBUFFER_CONSOLE=y
|
|||
CONFIG_LOGO=y
|
||||
CONFIG_SOUND=m
|
||||
CONFIG_SND=m
|
||||
CONFIG_SND_SEQUENCER=m
|
||||
CONFIG_SND_SEQ_DUMMY=m
|
||||
CONFIG_SND_OSSEMUL=y
|
||||
CONFIG_SND_MIXER_OSS=m
|
||||
CONFIG_SND_PCM_OSS=m
|
||||
CONFIG_SND_SEQUENCER_OSS=y
|
||||
CONFIG_SND_SEQUENCER=m
|
||||
CONFIG_SND_SEQ_DUMMY=m
|
||||
CONFIG_SND_SEQUENCER_OSS=m
|
||||
CONFIG_SND_DUMMY=m
|
||||
CONFIG_SND_POWERMAC=m
|
||||
CONFIG_SND_AOA=m
|
||||
|
|
|
@ -222,11 +222,12 @@ CONFIG_FRAMEBUFFER_CONSOLE=y
|
|||
CONFIG_LOGO=y
|
||||
CONFIG_SOUND=m
|
||||
CONFIG_SND=m
|
||||
CONFIG_SND_SEQUENCER=m
|
||||
CONFIG_SND_SEQ_DUMMY=m
|
||||
CONFIG_SND_OSSEMUL=y
|
||||
CONFIG_SND_MIXER_OSS=m
|
||||
CONFIG_SND_PCM_OSS=m
|
||||
CONFIG_SND_SEQUENCER_OSS=y
|
||||
CONFIG_SND_SEQUENCER=m
|
||||
CONFIG_SND_SEQ_DUMMY=m
|
||||
CONFIG_SND_SEQUENCER_OSS=m
|
||||
CONFIG_SND_POWERMAC=m
|
||||
CONFIG_SND_AOA=m
|
||||
CONFIG_SND_AOA_FABRIC_LAYOUT=m
|
||||
|
|
|
@ -141,11 +141,12 @@ CONFIG_FRAMEBUFFER_CONSOLE=y
|
|||
CONFIG_LOGO=y
|
||||
CONFIG_SOUND=m
|
||||
CONFIG_SND=m
|
||||
CONFIG_SND_SEQUENCER=m
|
||||
CONFIG_SND_SEQ_DUMMY=m
|
||||
CONFIG_SND_OSSEMUL=y
|
||||
CONFIG_SND_MIXER_OSS=m
|
||||
CONFIG_SND_PCM_OSS=m
|
||||
CONFIG_SND_SEQUENCER_OSS=y
|
||||
CONFIG_SND_SEQUENCER=m
|
||||
CONFIG_SND_SEQ_DUMMY=m
|
||||
CONFIG_SND_SEQUENCER_OSS=m
|
||||
CONFIG_HID_DRAGONRISE=y
|
||||
CONFIG_HID_GYRATION=y
|
||||
CONFIG_HID_TWINHAN=y
|
||||
|
|
|
@ -789,17 +789,18 @@ CONFIG_LOGO=y
|
|||
# CONFIG_LOGO_LINUX_VGA16 is not set
|
||||
CONFIG_SOUND=m
|
||||
CONFIG_SND=m
|
||||
CONFIG_SND_SEQUENCER=m
|
||||
CONFIG_SND_SEQ_DUMMY=m
|
||||
CONFIG_SND_OSSEMUL=y
|
||||
CONFIG_SND_MIXER_OSS=m
|
||||
CONFIG_SND_PCM_OSS=m
|
||||
CONFIG_SND_SEQUENCER_OSS=y
|
||||
CONFIG_SND_DYNAMIC_MINORS=y
|
||||
# CONFIG_SND_SUPPORT_OLD_API is not set
|
||||
CONFIG_SND_VERBOSE_PRINTK=y
|
||||
CONFIG_SND_DEBUG=y
|
||||
CONFIG_SND_DEBUG_VERBOSE=y
|
||||
CONFIG_SND_PCM_XRUN_DEBUG=y
|
||||
CONFIG_SND_SEQUENCER=m
|
||||
CONFIG_SND_SEQ_DUMMY=m
|
||||
CONFIG_SND_SEQUENCER_OSS=m
|
||||
CONFIG_SND_DUMMY=m
|
||||
CONFIG_SND_VIRMIDI=m
|
||||
CONFIG_SND_MTPAV=m
|
||||
|
|
|
@ -79,11 +79,12 @@ CONFIG_FB=y
|
|||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
CONFIG_SOUND=y
|
||||
CONFIG_SND=y
|
||||
CONFIG_SND_SEQUENCER=y
|
||||
CONFIG_SND_OSSEMUL=y
|
||||
CONFIG_SND_MIXER_OSS=y
|
||||
CONFIG_SND_PCM_OSS=y
|
||||
CONFIG_SND_SEQUENCER_OSS=y
|
||||
# CONFIG_SND_VERBOSE_PROCFS is not set
|
||||
CONFIG_SND_SEQUENCER=y
|
||||
CONFIG_SND_SEQUENCER_OSS=y
|
||||
CONFIG_HID_APPLE=m
|
||||
CONFIG_HID_WACOM=m
|
||||
CONFIG_MMC=y
|
||||
|
|
|
@ -1019,6 +1019,10 @@ int eeh_init(void)
|
|||
} else if ((ret = eeh_ops->init()))
|
||||
return ret;
|
||||
|
||||
/* Initialize PHB PEs */
|
||||
list_for_each_entry_safe(hose, tmp, &hose_list, list_node)
|
||||
eeh_dev_phb_init_dynamic(hose);
|
||||
|
||||
/* Initialize EEH event */
|
||||
ret = eeh_event_init();
|
||||
if (ret)
|
||||
|
|
|
@ -78,21 +78,3 @@ void eeh_dev_phb_init_dynamic(struct pci_controller *phb)
|
|||
/* EEH PE for PHB */
|
||||
eeh_phb_pe_create(phb);
|
||||
}
|
||||
|
||||
/**
|
||||
* eeh_dev_phb_init - Create EEH devices for devices included in existing PHBs
|
||||
*
|
||||
* Scan all the existing PHBs and create EEH devices for their OF
|
||||
* nodes and their children OF nodes
|
||||
*/
|
||||
static int __init eeh_dev_phb_init(void)
|
||||
{
|
||||
struct pci_controller *phb, *tmp;
|
||||
|
||||
list_for_each_entry_safe(phb, tmp, &hose_list, list_node)
|
||||
eeh_dev_phb_init_dynamic(phb);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
core_initcall(eeh_dev_phb_init);
|
||||
|
|
|
@ -104,8 +104,10 @@ static unsigned long can_optimize(struct kprobe *p)
|
|||
* and that can be emulated.
|
||||
*/
|
||||
if (!is_conditional_branch(*p->ainsn.insn) &&
|
||||
analyse_instr(&op, ®s, *p->ainsn.insn))
|
||||
analyse_instr(&op, ®s, *p->ainsn.insn) == 1) {
|
||||
emulate_update_regs(®s, &op);
|
||||
nip = regs.nip;
|
||||
}
|
||||
|
||||
return nip;
|
||||
}
|
||||
|
|
|
@ -131,7 +131,7 @@ static void flush_tmregs_to_thread(struct task_struct *tsk)
|
|||
* in the appropriate thread structures from live.
|
||||
*/
|
||||
|
||||
if (tsk != current)
|
||||
if ((!cpu_has_feature(CPU_FTR_TM)) || (tsk != current))
|
||||
return;
|
||||
|
||||
if (MSR_TM_SUSPENDED(mfmsr())) {
|
||||
|
|
|
@ -437,6 +437,7 @@ static inline int check_io_access(struct pt_regs *regs)
|
|||
int machine_check_e500mc(struct pt_regs *regs)
|
||||
{
|
||||
unsigned long mcsr = mfspr(SPRN_MCSR);
|
||||
unsigned long pvr = mfspr(SPRN_PVR);
|
||||
unsigned long reason = mcsr;
|
||||
int recoverable = 1;
|
||||
|
||||
|
@ -478,8 +479,15 @@ int machine_check_e500mc(struct pt_regs *regs)
|
|||
* may still get logged and cause a machine check. We should
|
||||
* only treat the non-write shadow case as non-recoverable.
|
||||
*/
|
||||
if (!(mfspr(SPRN_L1CSR2) & L1CSR2_DCWS))
|
||||
recoverable = 0;
|
||||
/* On e6500 core, L1 DCWS (Data cache write shadow mode) bit
|
||||
* is not implemented but L1 data cache always runs in write
|
||||
* shadow mode. Hence on data cache parity errors HW will
|
||||
* automatically invalidate the L1 Data Cache.
|
||||
*/
|
||||
if (PVR_VER(pvr) != PVR_VER_E6500) {
|
||||
if (!(mfspr(SPRN_L1CSR2) & L1CSR2_DCWS))
|
||||
recoverable = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (reason & MCSR_L2MMU_MHIT) {
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue