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)
|
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.
|
pcc-cpufreq.txt - PCC cpufreq driver specific file.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,7 @@ Example:
|
||||||
compatible = "st,stm32h743-rcc", "st,stm32-rcc";
|
compatible = "st,stm32h743-rcc", "st,stm32-rcc";
|
||||||
reg = <0x58024400 0x400>;
|
reg = <0x58024400 0x400>;
|
||||||
#reset-cells = <1>;
|
#reset-cells = <1>;
|
||||||
#clock-cells = <2>;
|
#clock-cells = <1>;
|
||||||
clocks = <&clk_hse>, <&clk_lse>, <&clk_i2s_ckin>;
|
clocks = <&clk_hse>, <&clk_lse>, <&clk_i2s_ckin>;
|
||||||
|
|
||||||
st,syscfg = <&pwrcfg>;
|
st,syscfg = <&pwrcfg>;
|
||||||
|
|
|
@ -15,11 +15,14 @@ Required properties
|
||||||
|
|
||||||
compatible : Must be "ams,as3645a".
|
compatible : Must be "ams,as3645a".
|
||||||
reg : The I2C address of the device. Typically 0x30.
|
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
|
flash-timeout-us: Flash timeout in microseconds. The value must be in
|
||||||
the range [100000, 850000] and divisible by 50000.
|
the range [100000, 850000] and divisible by 50000.
|
||||||
flash-max-microamp: Maximum flash current in microamperes. Has to be
|
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.
|
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.
|
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
|
led-max-microamp: Maximum indicator current. The allowed values are
|
||||||
2500, 5000, 7500 and 10000.
|
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.
|
label : The label of the indicator LED.
|
||||||
|
|
||||||
|
@ -55,16 +59,20 @@ Example
|
||||||
=======
|
=======
|
||||||
|
|
||||||
as3645a@30 {
|
as3645a@30 {
|
||||||
|
#address-cells: 1
|
||||||
|
#size-cells: 0
|
||||||
reg = <0x30>;
|
reg = <0x30>;
|
||||||
compatible = "ams,as3645a";
|
compatible = "ams,as3645a";
|
||||||
flash {
|
flash@0 {
|
||||||
|
reg = <0x0>;
|
||||||
flash-timeout-us = <150000>;
|
flash-timeout-us = <150000>;
|
||||||
flash-max-microamp = <320000>;
|
flash-max-microamp = <320000>;
|
||||||
led-max-microamp = <60000>;
|
led-max-microamp = <60000>;
|
||||||
ams,input-max-microamp = <1750000>;
|
ams,input-max-microamp = <1750000>;
|
||||||
label = "as3645a:flash";
|
label = "as3645a:flash";
|
||||||
};
|
};
|
||||||
indicator {
|
indicator@1 {
|
||||||
|
reg = <0x1>;
|
||||||
led-max-microamp = <10000>;
|
led-max-microamp = <10000>;
|
||||||
label = "as3645a:indicator";
|
label = "as3645a:indicator";
|
||||||
};
|
};
|
||||||
|
|
|
@ -8,6 +8,12 @@ Required properties:
|
||||||
the firmware event log
|
the firmware event log
|
||||||
- linux,sml-size : size of the memory allocated for 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)
|
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
|
This isn't an exhaustive list, but you should add new prefixes to it before
|
||||||
using them to avoid name-space collisions.
|
using them to avoid name-space collisions.
|
||||||
|
|
||||||
abcn Abracon Corporation
|
|
||||||
abilis Abilis Systems
|
abilis Abilis Systems
|
||||||
|
abracon Abracon Corporation
|
||||||
actions Actions Semiconductor Co., Ltd.
|
actions Actions Semiconductor Co., Ltd.
|
||||||
active-semi Active-Semi International Inc
|
active-semi Active-Semi International Inc
|
||||||
ad Avionic Design GmbH
|
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
|
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 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
|
of power management callbacks analogous to the subsystem-level and device driver
|
||||||
callbacks that are executed for the given device during all power transitions,
|
callbacks that are executed for the given device during all power transitions,
|
||||||
instead of the respective subsystem-level callbacks. Specifically, if a
|
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)
|
Jeff Layton (many, many fixes, as well as great work on the cifs Kerberos code)
|
||||||
Scott Lovenberg
|
Scott Lovenberg
|
||||||
Pavel Shilovsky (for great work adding SMB2 support, and various SMB3 features)
|
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
|
Test case and Bug Report contributors
|
||||||
-------------------------------------
|
-------------------------------------
|
||||||
|
|
|
@ -1,10 +1,14 @@
|
||||||
The CIFS VFS support for Linux supports many advanced network filesystem
|
This module supports the SMB3 family of advanced network protocols (as well
|
||||||
features such as hierarchical dfs like namespace, hardlinks, locking and more.
|
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
|
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
|
supersedes the 1992 X/Open SMB Standard) as well as to perform best practice
|
||||||
practical interoperability with Windows 2000, Windows XP, Samba and equivalent
|
practical interoperability with Windows 2000, Windows XP, Samba and equivalent
|
||||||
servers. This code was developed in participation with the Protocol Freedom
|
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
|
Please see
|
||||||
http://protocolfreedom.org/ and
|
http://protocolfreedom.org/ and
|
||||||
|
@ -15,30 +19,11 @@ for more details.
|
||||||
For questions or bug reports please contact:
|
For questions or bug reports please contact:
|
||||||
sfrench@samba.org (sfrench@us.ibm.com)
|
sfrench@samba.org (sfrench@us.ibm.com)
|
||||||
|
|
||||||
|
See the project page at: https://wiki.samba.org/index.php/LinuxCIFS_utils
|
||||||
|
|
||||||
Build instructions:
|
Build instructions:
|
||||||
==================
|
==================
|
||||||
For Linux 2.4:
|
For Linux:
|
||||||
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:
|
|
||||||
1) Download the kernel (e.g. from http://www.kernel.org)
|
1) Download the kernel (e.g. from http://www.kernel.org)
|
||||||
and change directory into the top of the kernel directory tree
|
and change directory into the top of the kernel directory tree
|
||||||
(e.g. /usr/src/linux-2.5.73)
|
(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
|
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
|
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
|
similar files reside (usually /sbin). Although the helper software is not
|
||||||
required, mount.cifs is recommended. Eventually the Samba 3.0 utility program
|
required, mount.cifs is recommended. Most distros include a "cifs-utils"
|
||||||
"net" may also be helpful since it may someday provide easier mount syntax for
|
package that includes this utility so it is recommended to install this.
|
||||||
users who are used to Windows e.g.
|
|
||||||
net use <mount point> <UNC name or cifs URL>
|
|
||||||
Note that running the Winbind pam/nss module (logon service) on all of your
|
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
|
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
|
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:
|
found at cifs-utils.git on git.samba.org
|
||||||
|
|
||||||
gcc samba/source/client/mount.cifs.c -o mount.cifs
|
|
||||||
|
|
||||||
If cifs is built as a module, then the size and number of network buffers
|
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.
|
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
|
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.
|
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
|
Allowing User Mounts
|
||||||
====================
|
====================
|
||||||
To permit users to mount and unmount over directories they own is possible
|
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 default. This can be changed, as with nfs and other filesystems,
|
||||||
by simply specifying "nosuid" among the mount options. For user mounts
|
by simply specifying "nosuid" among the mount options. For user mounts
|
||||||
though to be able to pass the suid flag to mount requires rebuilding
|
though to be able to pass the suid flag to mount requires rebuilding
|
||||||
mount.cifs with the following flag:
|
mount.cifs with the following flag: CIFS_ALLOW_USR_SUID
|
||||||
|
|
||||||
gcc samba/source/client/mount.cifs.c -DCIFS_ALLOW_USR_SUID -o mount.cifs
|
|
||||||
|
|
||||||
There is a corresponding manual page for cifs mounting in the Samba 3.0 and
|
There is a corresponding manual page for cifs mounting in the Samba 3.0 and
|
||||||
later source tree in docs/manpages/mount.cifs.8
|
later source tree in docs/manpages/mount.cifs.8
|
||||||
|
@ -189,18 +181,18 @@ applications running on the same server as Samba.
|
||||||
Use instructions:
|
Use instructions:
|
||||||
================
|
================
|
||||||
Once the CIFS VFS support is built into the kernel or installed as a module
|
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
|
(cifs.ko), you can use mount syntax like the following to access Samba or
|
||||||
servers:
|
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
|
Before -o the option -v may be specified to make the mount.cifs
|
||||||
mount helper display the mount steps more verbosely.
|
mount helper display the mount steps more verbosely.
|
||||||
After -o the following commonly used cifs vfs specific options
|
After -o the following commonly used cifs vfs specific options
|
||||||
are supported:
|
are supported:
|
||||||
|
|
||||||
user=<username>
|
username=<username>
|
||||||
pass=<password>
|
password=<password>
|
||||||
domain=<domain name>
|
domain=<domain name>
|
||||||
|
|
||||||
Other cifs mount options are described below. Use of TCP names (in addition to
|
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
|
filenames (ie those which contain valid Linux characters, which normally
|
||||||
would be forbidden for Windows/CIFS semantics) as long as the server is
|
would be forbidden for Windows/CIFS semantics) as long as the server is
|
||||||
configured for Unix Extensions (and the client has not disabled
|
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
|
CIFS VFS Mount Options
|
||||||
======================
|
======================
|
||||||
A partial list of the supported mount options follows:
|
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.
|
the CIFS session.
|
||||||
password The user password. If the mount helper is
|
password The user password. If the mount helper is
|
||||||
installed, the user will be prompted for password
|
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
|
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:
|
is a partial list of the known problems and missing features:
|
||||||
|
|
||||||
a) SMB3 (and SMB3.02) missing optional features:
|
a) SMB3 (and SMB3.02) missing optional features:
|
||||||
- RDMA
|
- RDMA (started)
|
||||||
- multichannel (started)
|
- multichannel (started)
|
||||||
- directory leases (improved metadata caching)
|
- directory leases (improved metadata caching)
|
||||||
- T10 copy offload (copy chunk is only mechanism supported)
|
- T10 copy offload (copy chunk is only mechanism supported)
|
||||||
- encrypted shares
|
|
||||||
|
|
||||||
b) improved sparse file support
|
b) improved sparse file support
|
||||||
|
|
||||||
c) Directory entry caching relies on a 1 second timer, rather than
|
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
|
d) quota support (needs minor kernel change since quota calls
|
||||||
to make it to network filesystems or deviceless filesystems)
|
to make it to network filesystems or deviceless filesystems)
|
||||||
|
|
||||||
e) improve support for very old servers (OS/2 and Win9x for example)
|
e) Better optimize open to reduce redundant opens (using reference
|
||||||
Including support for changing the time remotely (utimes command).
|
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
|
f) Finish inotify support so kde and gnome file list windows
|
||||||
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
|
|
||||||
will autorefresh (partially complete by Asser). Needs minor kernel
|
will autorefresh (partially complete by Asser). Needs minor kernel
|
||||||
vfs change to support removing D_NOTIFY on a file.
|
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)
|
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
|
(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
|
mount or a per server basis to client UIDs or nobody if no mapping
|
||||||
exists. This is helpful when Unix extensions are negotiated to
|
exists. Also better integration with winbind for resolving SID owners
|
||||||
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.
|
|
||||||
|
|
||||||
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
|
n) allow setting more NTFS/SMB3 file attributes remotely (currently limited to compressed
|
||||||
such as "CopyChunk" (fast server side file copy)
|
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
|
q) Allow mount.cifs to be more verbose in reporting errors with dialect
|
||||||
file attribute via chflags)
|
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
|
KNOWN BUGS
|
||||||
====================================
|
====================================
|
||||||
|
|
|
@ -1,24 +1,28 @@
|
||||||
This is the client VFS module for the Common Internet File System
|
This is the client VFS module for the SMB3 NAS protocol as well
|
||||||
(CIFS) protocol which is the successor to the Server Message Block
|
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
|
(SMB) protocol, the native file sharing mechanism for most early
|
||||||
PC operating systems. New and improved versions of CIFS are now
|
PC operating systems. New and improved versions of CIFS are now
|
||||||
called SMB2 and SMB3. These dialects are also supported by the
|
called SMB2 and SMB3. These dialects are also supported by the
|
||||||
CIFS VFS module. CIFS is fully supported by network
|
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
|
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
|
this network filesystem client can mount to a wide variety of
|
||||||
servers.
|
servers.
|
||||||
|
|
||||||
The intent of this module is to provide the most advanced network
|
The intent of this module is to provide the most advanced network
|
||||||
file system function for CIFS compliant servers, including better
|
file system function for SMB3 compliant servers, including advanced
|
||||||
POSIX compliance, secure per-user session establishment, high
|
security features, excellent parallelized high performance i/o, better
|
||||||
performance safe distributed caching (oplock), optional packet
|
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
|
signing, large files, Unicode support and other internationalization
|
||||||
improvements. Since both Samba server and this filesystem client support
|
improvements. Since both Samba server and this filesystem client support
|
||||||
the CIFS Unix extensions, the combination can provide a reasonable
|
the CIFS Unix extensions (and in the future SMB3 POSIX extensions),
|
||||||
alternative to NFSv4 for fileserving in some Linux to Linux environments,
|
the combination can provide a reasonable alternative to other network and
|
||||||
not just in Linux to Windows environments.
|
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
|
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 #14, good /* __NR_rt_sigprocmask */
|
||||||
jeq #13, good /* __NR_rt_sigaction */
|
jeq #13, good /* __NR_rt_sigaction */
|
||||||
jeq #35, good /* __NR_nanosleep */
|
jeq #35, good /* __NR_nanosleep */
|
||||||
bad: ret #0 /* SECCOMP_RET_KILL */
|
bad: ret #0 /* SECCOMP_RET_KILL_THREAD */
|
||||||
good: ret #0x7fff0000 /* SECCOMP_RET_ALLOW */
|
good: ret #0x7fff0000 /* SECCOMP_RET_ALLOW */
|
||||||
|
|
||||||
The above example code can be placed into a file (here called "foo"), and
|
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
|
2: Enable DAD, and disable IPv6 operation if MAC-based duplicate
|
||||||
link-local address has been found.
|
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
|
force_tllao - BOOLEAN
|
||||||
Enable sending the target link-layer address option even when
|
Enable sending the target link-layer address option even when
|
||||||
responding to a unicast neighbor solicitation.
|
responding to a unicast neighbor solicitation.
|
||||||
|
@ -1730,6 +1733,10 @@ optimistic_dad - BOOLEAN
|
||||||
0: disabled (default)
|
0: disabled (default)
|
||||||
1: enabled
|
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
|
use_optimistic - BOOLEAN
|
||||||
If enabled, do not classify optimistic addresses as deprecated during
|
If enabled, do not classify optimistic addresses as deprecated during
|
||||||
source address selection. Preferred addresses will still be chosen
|
source address selection. Preferred addresses will still be chosen
|
||||||
|
@ -1738,6 +1745,9 @@ use_optimistic - BOOLEAN
|
||||||
0: disabled (default)
|
0: disabled (default)
|
||||||
1: enabled
|
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
|
stable_secret - IPv6 address
|
||||||
This IPv6 address will be used as a secret to generate IPv6
|
This IPv6 address will be used as a secret to generate IPv6
|
||||||
addresses for link-local addresses and autoconfigured
|
addresses for link-local addresses and autoconfigured
|
||||||
|
|
|
@ -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.
|
with SR-IOV or soft switches, such as OVS, are possible.
|
||||||
|
|
||||||
|
|
||||||
User-space tools
|
User-space tools
|
||||||
|
|
||||||
user space |
|
user space |
|
||||||
+-------------------------------------------------------------------+
|
+-------------------------------------------------------------------+
|
||||||
kernel | Netlink
|
kernel | Netlink
|
||||||
|
|
|
|
||||||
+--------------+-------------------------------+
|
+--------------+-------------------------------+
|
||||||
| Network stack |
|
| Network stack |
|
||||||
| (Linux) |
|
| (Linux) |
|
||||||
| |
|
| |
|
||||||
+----------------------------------------------+
|
+----------------------------------------------+
|
||||||
|
|
||||||
sw1p2 sw1p4 sw1p6
|
sw1p2 sw1p4 sw1p6
|
||||||
sw1p1 + sw1p3 + sw1p5 + eth1
|
sw1p1 + sw1p3 + sw1p5 + eth1
|
||||||
+ | + | + | +
|
+ | + | + | +
|
||||||
| | | | | | |
|
| | | | | | |
|
||||||
+--+----+----+----+-+--+----+---+ +-----+-----+
|
+--+----+----+----+----+----+---+ +-----+-----+
|
||||||
| Switch driver | | mgmt |
|
| Switch driver | | mgmt |
|
||||||
| (this document) | | driver |
|
| (this document) | | driver |
|
||||||
| | | |
|
| | | |
|
||||||
+--------------+----------------+ +-----------+
|
+--------------+----------------+ +-----------+
|
||||||
|
|
|
|
||||||
kernel | HW bus (eg PCI)
|
kernel | HW bus (eg PCI)
|
||||||
+-------------------------------------------------------------------+
|
+-------------------------------------------------------------------+
|
||||||
hardware |
|
hardware |
|
||||||
+--------------+---+------------+
|
+--------------+----------------+
|
||||||
| Switch device (sw1) |
|
| Switch device (sw1) |
|
||||||
| +----+ +--------+
|
| +----+ +--------+
|
||||||
| | v offloaded data path | mgmt port
|
| | v offloaded data path | mgmt port
|
||||||
| | | |
|
| | | |
|
||||||
+--|----|----+----+----+----+---+
|
+--|----|----+----+----+----+---+
|
||||||
| | | | | |
|
| | | | | |
|
||||||
+ + + + + +
|
+ + + + + +
|
||||||
p1 p2 p3 p4 p5 p6
|
p1 p2 p3 p4 p5 p6
|
||||||
|
|
||||||
front-panel ports
|
front-panel ports
|
||||||
|
|
||||||
|
|
||||||
Fig 1.
|
Fig 1.
|
||||||
|
|
|
@ -75,6 +75,7 @@ show up in /proc/sys/kernel:
|
||||||
- reboot-cmd [ SPARC only ]
|
- reboot-cmd [ SPARC only ]
|
||||||
- rtsig-max
|
- rtsig-max
|
||||||
- rtsig-nr
|
- rtsig-nr
|
||||||
|
- seccomp/ ==> Documentation/userspace-api/seccomp_filter.rst
|
||||||
- sem
|
- sem
|
||||||
- sem_next_id [ sysv ipc ]
|
- sem_next_id [ sysv ipc ]
|
||||||
- sg-big-buff [ generic SCSI device (sg) ]
|
- 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
|
A seccomp filter may return any of the following values. If multiple
|
||||||
filters exist, the return value for the evaluation of a given system
|
filters exist, the return value for the evaluation of a given system
|
||||||
call will always use the highest precedent value. (For example,
|
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:
|
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
|
Results in the task exiting immediately without executing the
|
||||||
system call. The exit status of the task (``status & 0x7f``) will
|
system call. The exit status of the task (``status & 0x7f``) will
|
||||||
be ``SIGSYS``, not ``SIGKILL``.
|
be ``SIGSYS``, not ``SIGKILL``.
|
||||||
|
@ -141,6 +146,15 @@ In precedence order, they are:
|
||||||
allow use of ptrace, even of other sandboxed processes, without
|
allow use of ptrace, even of other sandboxed processes, without
|
||||||
extreme care; ptracers can use this mechanism to escape.)
|
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``:
|
``SECCOMP_RET_ALLOW``:
|
||||||
Results in the system call being executed.
|
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
|
and a more generic example of a higher level macro interface for BPF
|
||||||
program generation.
|
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
|
Adding architecture support
|
||||||
===========================
|
===========================
|
||||||
|
|
24
MAINTAINERS
24
MAINTAINERS
|
@ -352,6 +352,18 @@ L: linux-acpi@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/acpi/arm64
|
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
|
ACPI THERMAL DRIVER
|
||||||
M: Zhang Rui <rui.zhang@intel.com>
|
M: Zhang Rui <rui.zhang@intel.com>
|
||||||
L: linux-acpi@vger.kernel.org
|
L: linux-acpi@vger.kernel.org
|
||||||
|
@ -2853,7 +2865,6 @@ S: Supported
|
||||||
F: drivers/scsi/bnx2i/
|
F: drivers/scsi/bnx2i/
|
||||||
|
|
||||||
BROADCOM BNX2X 10 GIGABIT ETHERNET DRIVER
|
BROADCOM BNX2X 10 GIGABIT ETHERNET DRIVER
|
||||||
M: Yuval Mintz <Yuval.Mintz@cavium.com>
|
|
||||||
M: Ariel Elior <ariel.elior@cavium.com>
|
M: Ariel Elior <ariel.elior@cavium.com>
|
||||||
M: everest-linux-l2@cavium.com
|
M: everest-linux-l2@cavium.com
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
|
@ -6643,8 +6654,8 @@ M: Alexander Aring <alex.aring@gmail.com>
|
||||||
M: Stefan Schmidt <stefan@osg.samsung.com>
|
M: Stefan Schmidt <stefan@osg.samsung.com>
|
||||||
L: linux-wpan@vger.kernel.org
|
L: linux-wpan@vger.kernel.org
|
||||||
W: http://wpan.cakelab.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/sschmidt/wpan.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-next.git
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: net/ieee802154/
|
F: net/ieee802154/
|
||||||
F: net/mac802154/
|
F: net/mac802154/
|
||||||
|
@ -8586,6 +8597,12 @@ M: Sean Wang <sean.wang@mediatek.com>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/media/rc/mtk-cir.c
|
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
|
MEDIATEK ETHERNET DRIVER
|
||||||
M: Felix Fietkau <nbd@openwrt.org>
|
M: Felix Fietkau <nbd@openwrt.org>
|
||||||
M: John Crispin <john@phrozen.org>
|
M: John Crispin <john@phrozen.org>
|
||||||
|
@ -11047,7 +11064,6 @@ S: Supported
|
||||||
F: drivers/scsi/qedi/
|
F: drivers/scsi/qedi/
|
||||||
|
|
||||||
QLOGIC QL4xxx ETHERNET DRIVER
|
QLOGIC QL4xxx ETHERNET DRIVER
|
||||||
M: Yuval Mintz <Yuval.Mintz@cavium.com>
|
|
||||||
M: Ariel Elior <Ariel.Elior@cavium.com>
|
M: Ariel Elior <Ariel.Elior@cavium.com>
|
||||||
M: everest-linux-l2@cavium.com
|
M: everest-linux-l2@cavium.com
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
|
|
6
Makefile
6
Makefile
|
@ -1,7 +1,7 @@
|
||||||
VERSION = 4
|
VERSION = 4
|
||||||
PATCHLEVEL = 14
|
PATCHLEVEL = 14
|
||||||
SUBLEVEL = 0
|
SUBLEVEL = 0
|
||||||
EXTRAVERSION = -rc1
|
EXTRAVERSION = -rc3
|
||||||
NAME = Fearless Coyote
|
NAME = Fearless Coyote
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
|
@ -1172,11 +1172,11 @@ headers_check: headers_install
|
||||||
|
|
||||||
PHONY += kselftest
|
PHONY += kselftest
|
||||||
kselftest:
|
kselftest:
|
||||||
$(Q)$(MAKE) -C tools/testing/selftests run_tests
|
$(Q)$(MAKE) -C $(srctree)/tools/testing/selftests run_tests
|
||||||
|
|
||||||
PHONY += kselftest-clean
|
PHONY += kselftest-clean
|
||||||
kselftest-clean:
|
kselftest-clean:
|
||||||
$(Q)$(MAKE) -C tools/testing/selftests clean
|
$(Q)$(MAKE) -C $(srctree)/tools/testing/selftests clean
|
||||||
|
|
||||||
PHONY += kselftest-merge
|
PHONY += kselftest-merge
|
||||||
kselftest-merge:
|
kselftest-merge:
|
||||||
|
|
|
@ -78,9 +78,6 @@ struct task_struct;
|
||||||
|
|
||||||
#endif
|
#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_EIP(tsk) (task_pt_regs(tsk)->ret)
|
||||||
#define KSTK_ESP(tsk) (task_pt_regs(tsk)->sp)
|
#define KSTK_ESP(tsk) (task_pt_regs(tsk)->sp)
|
||||||
|
|
||||||
|
|
|
@ -267,15 +267,19 @@ &i2c2 {
|
||||||
clock-frequency = <400000>;
|
clock-frequency = <400000>;
|
||||||
|
|
||||||
as3645a@30 {
|
as3645a@30 {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
reg = <0x30>;
|
reg = <0x30>;
|
||||||
compatible = "ams,as3645a";
|
compatible = "ams,as3645a";
|
||||||
flash {
|
flash@0 {
|
||||||
|
reg = <0x0>;
|
||||||
flash-timeout-us = <150000>;
|
flash-timeout-us = <150000>;
|
||||||
flash-max-microamp = <320000>;
|
flash-max-microamp = <320000>;
|
||||||
led-max-microamp = <60000>;
|
led-max-microamp = <60000>;
|
||||||
peak-current-limit = <1750000>;
|
ams,input-max-microamp = <1750000>;
|
||||||
};
|
};
|
||||||
indicator {
|
indicator@1 {
|
||||||
|
reg = <0x1>;
|
||||||
led-max-microamp = <10000>;
|
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_NEED_RESCHED 1 /* rescheduling necessary */
|
||||||
#define TIF_NOTIFY_RESUME 2 /* callback before returning to user */
|
#define TIF_NOTIFY_RESUME 2 /* callback before returning to user */
|
||||||
#define TIF_UPROBE 3 /* breakpointed or singlestepping */
|
#define TIF_UPROBE 3 /* breakpointed or singlestepping */
|
||||||
#define TIF_FSCHECK 4 /* Check FS is USER_DS on return */
|
#define TIF_SYSCALL_TRACE 4 /* syscall trace active */
|
||||||
#define TIF_SYSCALL_TRACE 5 /* syscall trace active */
|
#define TIF_SYSCALL_AUDIT 5 /* syscall auditing active */
|
||||||
#define TIF_SYSCALL_AUDIT 6 /* syscall auditing active */
|
#define TIF_SYSCALL_TRACEPOINT 6 /* syscall tracepoint instrumentation */
|
||||||
#define TIF_SYSCALL_TRACEPOINT 7 /* syscall tracepoint instrumentation */
|
#define TIF_SECCOMP 7 /* seccomp syscall filtering active */
|
||||||
#define TIF_SECCOMP 8 /* seccomp syscall filtering active */
|
|
||||||
|
|
||||||
#define TIF_NOHZ 12 /* in adaptive nohz mode */
|
#define TIF_NOHZ 12 /* in adaptive nohz mode */
|
||||||
#define TIF_USING_IWMMXT 17
|
#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_NEED_RESCHED (1 << TIF_NEED_RESCHED)
|
||||||
#define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME)
|
#define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME)
|
||||||
#define _TIF_UPROBE (1 << TIF_UPROBE)
|
#define _TIF_UPROBE (1 << TIF_UPROBE)
|
||||||
#define _TIF_FSCHECK (1 << TIF_FSCHECK)
|
|
||||||
#define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE)
|
#define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE)
|
||||||
#define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT)
|
#define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT)
|
||||||
#define _TIF_SYSCALL_TRACEPOINT (1 << TIF_SYSCALL_TRACEPOINT)
|
#define _TIF_SYSCALL_TRACEPOINT (1 << TIF_SYSCALL_TRACEPOINT)
|
||||||
|
@ -169,8 +167,7 @@ extern int vfp_restore_user_hwstate(struct user_vfp __user *,
|
||||||
* Change these and you break ASM code in entry-common.S
|
* Change these and you break ASM code in entry-common.S
|
||||||
*/
|
*/
|
||||||
#define _TIF_WORK_MASK (_TIF_NEED_RESCHED | _TIF_SIGPENDING | \
|
#define _TIF_WORK_MASK (_TIF_NEED_RESCHED | _TIF_SIGPENDING | \
|
||||||
_TIF_NOTIFY_RESUME | _TIF_UPROBE | \
|
_TIF_NOTIFY_RESUME | _TIF_UPROBE)
|
||||||
_TIF_FSCHECK)
|
|
||||||
|
|
||||||
#endif /* __KERNEL__ */
|
#endif /* __KERNEL__ */
|
||||||
#endif /* __ASM_ARM_THREAD_INFO_H */
|
#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;
|
current_thread_info()->addr_limit = fs;
|
||||||
modify_domain(DOMAIN_KERNEL, fs ? DOMAIN_CLIENT : DOMAIN_MANAGER);
|
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))
|
#define segment_eq(a, b) ((a) == (b))
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include <asm/unistd.h>
|
#include <asm/unistd.h>
|
||||||
#include <asm/ftrace.h>
|
#include <asm/ftrace.h>
|
||||||
#include <asm/unwind.h>
|
#include <asm/unwind.h>
|
||||||
|
#include <asm/memory.h>
|
||||||
#ifdef CONFIG_AEABI
|
#ifdef CONFIG_AEABI
|
||||||
#include <asm/unistd-oabi.h>
|
#include <asm/unistd-oabi.h>
|
||||||
#endif
|
#endif
|
||||||
|
@ -48,12 +49,14 @@ ret_fast_syscall:
|
||||||
UNWIND(.fnstart )
|
UNWIND(.fnstart )
|
||||||
UNWIND(.cantunwind )
|
UNWIND(.cantunwind )
|
||||||
disable_irq_notrace @ disable interrupts
|
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
|
ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing
|
||||||
tst r1, #_TIF_SYSCALL_WORK
|
tst r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK
|
||||||
bne fast_work_pending
|
|
||||||
tst r1, #_TIF_WORK_MASK
|
|
||||||
bne fast_work_pending
|
bne fast_work_pending
|
||||||
|
|
||||||
|
|
||||||
/* perform architecture specific actions before user return */
|
/* perform architecture specific actions before user return */
|
||||||
arch_ret_to_user r1, lr
|
arch_ret_to_user r1, lr
|
||||||
|
|
||||||
|
@ -76,16 +79,16 @@ ret_fast_syscall:
|
||||||
UNWIND(.cantunwind )
|
UNWIND(.cantunwind )
|
||||||
str r0, [sp, #S_R0 + S_OFF]! @ save returned r0
|
str r0, [sp, #S_R0 + S_OFF]! @ save returned r0
|
||||||
disable_irq_notrace @ disable interrupts
|
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
|
ldr r1, [tsk, #TI_FLAGS] @ re-check for syscall tracing
|
||||||
tst r1, #_TIF_SYSCALL_WORK
|
tst r1, #_TIF_SYSCALL_WORK | _TIF_WORK_MASK
|
||||||
bne fast_work_pending
|
|
||||||
tst r1, #_TIF_WORK_MASK
|
|
||||||
beq no_work_pending
|
beq no_work_pending
|
||||||
UNWIND(.fnend )
|
UNWIND(.fnend )
|
||||||
ENDPROC(ret_fast_syscall)
|
ENDPROC(ret_fast_syscall)
|
||||||
|
|
||||||
/* Slower path - fall through to work_pending */
|
/* Slower path - fall through to work_pending */
|
||||||
fast_work_pending:
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
tst r1, #_TIF_SYSCALL_WORK
|
tst r1, #_TIF_SYSCALL_WORK
|
||||||
|
@ -111,6 +114,9 @@ ENTRY(ret_to_user)
|
||||||
ret_slow_syscall:
|
ret_slow_syscall:
|
||||||
disable_irq_notrace @ disable interrupts
|
disable_irq_notrace @ disable interrupts
|
||||||
ENTRY(ret_to_user_from_irq)
|
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]
|
ldr r1, [tsk, #TI_FLAGS]
|
||||||
tst r1, #_TIF_WORK_MASK
|
tst r1, #_TIF_WORK_MASK
|
||||||
bne slow_work_pending
|
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.
|
* Update the trace code with the current status.
|
||||||
*/
|
*/
|
||||||
trace_hardirqs_off();
|
trace_hardirqs_off();
|
||||||
|
|
||||||
/* Check valid user FS if needed */
|
|
||||||
addr_limit_user_check();
|
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if (likely(thread_flags & _TIF_NEED_RESCHED)) {
|
if (likely(thread_flags & _TIF_NEED_RESCHED)) {
|
||||||
schedule();
|
schedule();
|
||||||
|
@ -678,3 +674,9 @@ struct page *get_signal_page(void)
|
||||||
|
|
||||||
return page;
|
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_CFLAGS += $(call cc-option, -mpc-relative-literal-loads)
|
||||||
KBUILD_AFLAGS += $(lseinstr) $(brokengasinst)
|
KBUILD_AFLAGS += $(lseinstr) $(brokengasinst)
|
||||||
|
|
||||||
|
KBUILD_CFLAGS += $(call cc-option,-mabi=lp64)
|
||||||
|
KBUILD_AFLAGS += $(call cc-option,-mabi=lp64)
|
||||||
|
|
||||||
ifeq ($(CONFIG_CPU_BIG_ENDIAN), y)
|
ifeq ($(CONFIG_CPU_BIG_ENDIAN), y)
|
||||||
KBUILD_CPPFLAGS += -mbig-endian
|
KBUILD_CPPFLAGS += -mbig-endian
|
||||||
CHECKFLAGS += -D__AARCH64EB__
|
CHECKFLAGS += -D__AARCH64EB__
|
||||||
AS += -EB
|
AS += -EB
|
||||||
LD += -EB
|
LD += -EB
|
||||||
|
LDFLAGS += -maarch64linuxb
|
||||||
UTS_MACHINE := aarch64_be
|
UTS_MACHINE := aarch64_be
|
||||||
else
|
else
|
||||||
KBUILD_CPPFLAGS += -mlittle-endian
|
KBUILD_CPPFLAGS += -mlittle-endian
|
||||||
CHECKFLAGS += -D__AARCH64EL__
|
CHECKFLAGS += -D__AARCH64EL__
|
||||||
AS += -EL
|
AS += -EL
|
||||||
LD += -EL
|
LD += -EL
|
||||||
|
LDFLAGS += -maarch64linux
|
||||||
UTS_MACHINE := aarch64
|
UTS_MACHINE := aarch64
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#ifndef __ASM_LINKAGE_H
|
#ifndef __ASM_LINKAGE_H
|
||||||
#define __ASM_LINKAGE_H
|
#define __ASM_LINKAGE_H
|
||||||
|
|
||||||
#define __ALIGN .align 4
|
#define __ALIGN .align 2
|
||||||
#define __ALIGN_STR ".align 4"
|
#define __ALIGN_STR ".align 2"
|
||||||
|
|
||||||
#endif
|
#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. */
|
/* Find an entry in the third-level page table. */
|
||||||
#define pte_index(addr) (((addr) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))
|
#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_kernel(dir,addr) ((pte_t *)__va(pte_offset_phys((dir), (addr))))
|
||||||
|
|
||||||
#define pte_offset_map(dir,addr) pte_offset_kernel((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);
|
EXPORT_SYMBOL(kernel_neon_end);
|
||||||
|
|
||||||
|
#ifdef CONFIG_EFI
|
||||||
|
|
||||||
static DEFINE_PER_CPU(struct fpsimd_state, efi_fpsimd_state);
|
static DEFINE_PER_CPU(struct fpsimd_state, efi_fpsimd_state);
|
||||||
static DEFINE_PER_CPU(bool, efi_fpsimd_state_used);
|
static DEFINE_PER_CPU(bool, efi_fpsimd_state_used);
|
||||||
|
|
||||||
|
@ -370,6 +372,8 @@ void __efi_fpsimd_end(void)
|
||||||
kernel_neon_end();
|
kernel_neon_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* CONFIG_EFI */
|
||||||
|
|
||||||
#endif /* CONFIG_KERNEL_MODE_NEON */
|
#endif /* CONFIG_KERNEL_MODE_NEON */
|
||||||
|
|
||||||
#ifdef CONFIG_CPU_PM
|
#ifdef CONFIG_CPU_PM
|
||||||
|
|
|
@ -384,6 +384,7 @@ ENTRY(kimage_vaddr)
|
||||||
* booted in EL1 or EL2 respectively.
|
* booted in EL1 or EL2 respectively.
|
||||||
*/
|
*/
|
||||||
ENTRY(el2_setup)
|
ENTRY(el2_setup)
|
||||||
|
msr SPsel, #1 // We want to use SP_EL{1,2}
|
||||||
mrs x0, CurrentEL
|
mrs x0, CurrentEL
|
||||||
cmp x0, #CurrentEL_EL2
|
cmp x0, #CurrentEL_EL2
|
||||||
b.eq 1f
|
b.eq 1f
|
||||||
|
|
|
@ -751,10 +751,10 @@ asmlinkage void do_notify_resume(struct pt_regs *regs,
|
||||||
*/
|
*/
|
||||||
trace_hardirqs_off();
|
trace_hardirqs_off();
|
||||||
|
|
||||||
|
do {
|
||||||
/* Check valid user FS if needed */
|
/* Check valid user FS if needed */
|
||||||
addr_limit_user_check();
|
addr_limit_user_check();
|
||||||
|
|
||||||
do {
|
|
||||||
if (thread_flags & _TIF_NEED_RESCHED) {
|
if (thread_flags & _TIF_NEED_RESCHED) {
|
||||||
schedule();
|
schedule();
|
||||||
} else {
|
} 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 0 translation fault" },
|
||||||
{ do_translation_fault, SIGSEGV, SEGV_MAPERR, "level 1 translation fault" },
|
{ do_translation_fault, SIGSEGV, SEGV_MAPERR, "level 1 translation fault" },
|
||||||
{ do_translation_fault, SIGSEGV, SEGV_MAPERR, "level 2 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_bad, SIGBUS, 0, "unknown 8" },
|
||||||
{ do_page_fault, SIGSEGV, SEGV_ACCERR, "level 1 access flag fault" },
|
{ do_page_fault, SIGSEGV, SEGV_ACCERR, "level 1 access flag fault" },
|
||||||
{ do_page_fault, SIGSEGV, SEGV_ACCERR, "level 2 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.
|
* 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 save_user_regs(struct user_context *target);
|
||||||
extern asmlinkage void *restore_user_regs(const 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);
|
unsigned long get_wchan(struct task_struct *p);
|
||||||
|
|
||||||
#define KSTK_EIP(tsk) ((tsk)->thread.frame0->pc)
|
#define KSTK_EIP(tsk) ((tsk)->thread.frame0->pc)
|
||||||
|
|
|
@ -118,14 +118,6 @@ struct mm_struct;
|
||||||
/* Free all resources held by a thread. */
|
/* Free all resources held by a thread. */
|
||||||
extern void release_thread(struct task_struct *);
|
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);
|
unsigned long get_wchan(struct task_struct *p);
|
||||||
#define KSTK_EIP(tsk) ((tsk)->thread.lr)
|
#define KSTK_EIP(tsk) ((tsk)->thread.lr)
|
||||||
#define KSTK_ESP(tsk) ((tsk)->thread.sp)
|
#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.
|
* Return saved PC of a blocked thread.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -39,7 +39,7 @@ config MICROBLAZE
|
||||||
# Endianness selection
|
# Endianness selection
|
||||||
choice
|
choice
|
||||||
prompt "Endianness selection"
|
prompt "Endianness selection"
|
||||||
default CPU_BIG_ENDIAN
|
default CPU_LITTLE_ENDIAN
|
||||||
help
|
help
|
||||||
microblaze architectures can be configured for either little or
|
microblaze architectures can be configured for either little or
|
||||||
big endian formats. Be sure to select the appropriate mode.
|
big endian formats. Be sure to select the appropriate mode.
|
||||||
|
|
|
@ -7,6 +7,7 @@ generic-y += fcntl.h
|
||||||
generic-y += ioctl.h
|
generic-y += ioctl.h
|
||||||
generic-y += ioctls.h
|
generic-y += ioctls.h
|
||||||
generic-y += ipcbuf.h
|
generic-y += ipcbuf.h
|
||||||
|
generic-y += kvm_para.h
|
||||||
generic-y += mman.h
|
generic-y += mman.h
|
||||||
generic-y += msgbuf.h
|
generic-y += msgbuf.h
|
||||||
generic-y += param.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)
|
unsigned long attrs)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_MMU
|
#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 count = PAGE_ALIGN(size) >> PAGE_SHIFT;
|
||||||
unsigned long off = vma->vm_pgoff;
|
unsigned long off = vma->vm_pgoff;
|
||||||
unsigned long pfn;
|
unsigned long pfn;
|
||||||
|
|
|
@ -22,10 +22,10 @@
|
||||||
#include "pci.h"
|
#include "pci.h"
|
||||||
|
|
||||||
static int (*ath79_pci_plat_dev_init)(struct pci_dev *dev);
|
static int (*ath79_pci_plat_dev_init)(struct pci_dev *dev);
|
||||||
static const struct ath79_pci_irq *ath79_pci_irq_map __initdata;
|
static const struct ath79_pci_irq *ath79_pci_irq_map;
|
||||||
static unsigned ath79_pci_nr_irqs __initdata;
|
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,
|
.slot = 17,
|
||||||
.pin = 1,
|
.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,
|
.slot = 0,
|
||||||
.pin = 1,
|
.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,
|
.bus = 0,
|
||||||
.slot = 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 irq = -1;
|
||||||
int i;
|
int i;
|
||||||
|
|
|
@ -1377,29 +1377,32 @@ do { \
|
||||||
|
|
||||||
#define __write_64bit_c0_split(source, sel, val) \
|
#define __write_64bit_c0_split(source, sel, val) \
|
||||||
do { \
|
do { \
|
||||||
|
unsigned long long __tmp; \
|
||||||
unsigned long __flags; \
|
unsigned long __flags; \
|
||||||
\
|
\
|
||||||
local_irq_save(__flags); \
|
local_irq_save(__flags); \
|
||||||
if (sel == 0) \
|
if (sel == 0) \
|
||||||
__asm__ __volatile__( \
|
__asm__ __volatile__( \
|
||||||
".set\tmips64\n\t" \
|
".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" \
|
"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" \
|
"or\t%L0, %L0, %M0\n\t" \
|
||||||
"dmtc0\t%L0, " #source "\n\t" \
|
"dmtc0\t%L0, " #source "\n\t" \
|
||||||
".set\tmips0" \
|
".set\tmips0" \
|
||||||
: : "r" (val)); \
|
: "=&r,r" (__tmp) \
|
||||||
|
: "r,0" (val)); \
|
||||||
else \
|
else \
|
||||||
__asm__ __volatile__( \
|
__asm__ __volatile__( \
|
||||||
".set\tmips64\n\t" \
|
".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" \
|
"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" \
|
"or\t%L0, %L0, %M0\n\t" \
|
||||||
"dmtc0\t%L0, " #source ", " #sel "\n\t" \
|
"dmtc0\t%L0, " #source ", " #sel "\n\t" \
|
||||||
".set\tmips0" \
|
".set\tmips0" \
|
||||||
: : "r" (val)); \
|
: "=&r,r" (__tmp) \
|
||||||
|
: "r,0" (val)); \
|
||||||
local_irq_restore(__flags); \
|
local_irq_restore(__flags); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
|
|
@ -618,8 +618,7 @@ static int mipspmu_event_init(struct perf_event *event)
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((unsigned int)event->cpu >= nr_cpumask_bits ||
|
if (event->cpu >= 0 && !cpu_online(event->cpu))
|
||||||
(event->cpu >= 0 && !cpu_online(event->cpu)))
|
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
if (!atomic_inc_not_zero(&active_events)) {
|
if (!atomic_inc_not_zero(&active_events)) {
|
||||||
|
|
|
@ -32,13 +32,13 @@
|
||||||
#define INTC PC104PLUS_INTC_IRQ
|
#define INTC PC104PLUS_INTC_IRQ
|
||||||
#define INTD PC104PLUS_INTD_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 },
|
[11] = { -1, INT1, INT1, INT1, INT1 },
|
||||||
[12] = { -1, INT2, INT2, INT2, INT2 },
|
[12] = { -1, INT2, INT2, INT2, INT2 },
|
||||||
[14] = { -1, INTA, INTB, INTC, INTD }
|
[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];
|
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,
|
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_0,
|
||||||
qube_raq_via_board_id_fixup);
|
qube_raq_via_board_id_fixup);
|
||||||
|
|
||||||
static char irq_tab_qube1[] __initdata = {
|
static char irq_tab_qube1[] = {
|
||||||
[COBALT_PCICONF_CPU] = 0,
|
[COBALT_PCICONF_CPU] = 0,
|
||||||
[COBALT_PCICONF_ETH0] = QUBE1_ETH0_IRQ,
|
[COBALT_PCICONF_ETH0] = QUBE1_ETH0_IRQ,
|
||||||
[COBALT_PCICONF_RAQSCSI] = SCSI_IRQ,
|
[COBALT_PCICONF_RAQSCSI] = SCSI_IRQ,
|
||||||
|
@ -156,7 +156,7 @@ static char irq_tab_qube1[] __initdata = {
|
||||||
[COBALT_PCICONF_ETH1] = 0
|
[COBALT_PCICONF_ETH1] = 0
|
||||||
};
|
};
|
||||||
|
|
||||||
static char irq_tab_cobalt[] __initdata = {
|
static char irq_tab_cobalt[] = {
|
||||||
[COBALT_PCICONF_CPU] = 0,
|
[COBALT_PCICONF_CPU] = 0,
|
||||||
[COBALT_PCICONF_ETH0] = ETH0_IRQ,
|
[COBALT_PCICONF_ETH0] = ETH0_IRQ,
|
||||||
[COBALT_PCICONF_RAQSCSI] = SCSI_IRQ,
|
[COBALT_PCICONF_RAQSCSI] = SCSI_IRQ,
|
||||||
|
@ -165,7 +165,7 @@ static char irq_tab_cobalt[] __initdata = {
|
||||||
[COBALT_PCICONF_ETH1] = ETH1_IRQ
|
[COBALT_PCICONF_ETH1] = ETH1_IRQ
|
||||||
};
|
};
|
||||||
|
|
||||||
static char irq_tab_raq2[] __initdata = {
|
static char irq_tab_raq2[] = {
|
||||||
[COBALT_PCICONF_CPU] = 0,
|
[COBALT_PCICONF_CPU] = 0,
|
||||||
[COBALT_PCICONF_ETH0] = ETH0_IRQ,
|
[COBALT_PCICONF_ETH0] = ETH0_IRQ,
|
||||||
[COBALT_PCICONF_RAQSCSI] = RAQ2_SCSI_IRQ,
|
[COBALT_PCICONF_RAQSCSI] = RAQ2_SCSI_IRQ,
|
||||||
|
@ -174,7 +174,7 @@ static char irq_tab_raq2[] __initdata = {
|
||||||
[COBALT_PCICONF_ETH1] = ETH1_IRQ
|
[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)
|
if (cobalt_board_id <= COBALT_BRD_ID_QUBE1)
|
||||||
return irq_tab_qube1[slot];
|
return irq_tab_qube1[slot];
|
||||||
|
|
|
@ -43,7 +43,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define MAX_SLOT_NUM 10
|
#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,
|
[3] = {0, MARKEINS_PCI_IRQ_INTB, MARKEINS_PCI_IRQ_INTC,
|
||||||
MARKEINS_PCI_IRQ_INTD, 0,},
|
MARKEINS_PCI_IRQ_INTD, 0,},
|
||||||
[4] = {0, MARKEINS_PCI_IRQ_INTA, 0, 0, 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,
|
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NEC, PCI_DEVICE_ID_NEC_EMMA2RH,
|
||||||
emma2rh_pci_host_fixup);
|
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];
|
return irq_map[slot][pin];
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
/* South bridge slot number is set by the pci probe process */
|
/* South bridge slot number is set by the pci probe process */
|
||||||
static u8 sb_slot = 5;
|
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;
|
int irq = 0;
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
#define INTB MACEPCI_SHARED0_IRQ
|
#define INTB MACEPCI_SHARED0_IRQ
|
||||||
#define INTC MACEPCI_SHARED1_IRQ
|
#define INTC MACEPCI_SHARED1_IRQ
|
||||||
#define INTD MACEPCI_SHARED2_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 */
|
/* Dummy INT#A INT#B INT#C INT#D */
|
||||||
{0, 0, 0, 0, 0}, /* This is placeholder row - never used */
|
{0, 0, 0, 0, 0}, /* This is placeholder row - never used */
|
||||||
{0, SCSI0, SCSI0, SCSI0, SCSI0},
|
{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
|
* 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.
|
* 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];
|
return irq_tab_mace[slot][pin];
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
#include <asm/txx9/pci.h>
|
#include <asm/txx9/pci.h>
|
||||||
#include <asm/txx9/jmr3927.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;
|
unsigned char irq = pin;
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@ int pcibios_plat_dev_init(struct pci_dev *dev)
|
||||||
return 0;
|
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);
|
return of_irq_parse_and_map_pci(dev, slot, pin);
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
#define PCID 7
|
#define PCID 7
|
||||||
|
|
||||||
/* all the pci device has the PCIA pin, check the datasheet. */
|
/* 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 */
|
/* INTA INTB INTC INTD */
|
||||||
{0, 0, 0, 0, 0}, /* 11: Unused */
|
{0, 0, 0, 0, 0}, /* 11: Unused */
|
||||||
{0, 0, 0, 0, 0}, /* 12: 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 */
|
{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;
|
int virq;
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,7 @@ static void print_fixup_info(const struct pci_dev *pdev)
|
||||||
pdev->vendor, pdev->device, pdev->irq);
|
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);
|
print_fixup_info(dev);
|
||||||
return dev->irq;
|
return dev->irq;
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
static char pci_irq[5] = {
|
static char pci_irq[5] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static char irq_tab[][5] __initdata = {
|
static char irq_tab[][5] = {
|
||||||
/* INTA INTB INTC INTD */
|
/* INTA INTB INTC INTD */
|
||||||
{0, 0, 0, 0, 0 }, /* 0: GT64120 PCI bridge */
|
{0, 0, 0, 0, 0 }, /* 0: GT64120 PCI bridge */
|
||||||
{0, 0, 0, 0, 0 }, /* 1: Unused */
|
{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 */
|
{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;
|
int virq;
|
||||||
virq = irq_tab[slot][pin];
|
virq = irq_tab[slot][pin];
|
||||||
|
|
|
@ -22,19 +22,19 @@
|
||||||
|
|
||||||
#include <asm/vr41xx/mpc30x.h>
|
#include <asm/vr41xx/mpc30x.h>
|
||||||
|
|
||||||
static const int internal_func_irqs[] __initconst = {
|
static const int internal_func_irqs[] = {
|
||||||
VRC4173_CASCADE_IRQ,
|
VRC4173_CASCADE_IRQ,
|
||||||
VRC4173_AC97_IRQ,
|
VRC4173_AC97_IRQ,
|
||||||
VRC4173_USB_IRQ,
|
VRC4173_USB_IRQ,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const int irq_tab_mpc30x[] __initconst = {
|
static const int irq_tab_mpc30x[] = {
|
||||||
[12] = VRC4173_PCMCIA1_IRQ,
|
[12] = VRC4173_PCMCIA1_IRQ,
|
||||||
[13] = VRC4173_PCMCIA2_IRQ,
|
[13] = VRC4173_PCMCIA2_IRQ,
|
||||||
[29] = MQ200_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)
|
if (slot == 30)
|
||||||
return internal_func_irqs[PCI_FUNC(dev->devfn)];
|
return internal_func_irqs[PCI_FUNC(dev->devfn)];
|
||||||
|
|
|
@ -47,7 +47,7 @@
|
||||||
|
|
||||||
#if defined(CONFIG_PMC_MSP7120_GW)
|
#if defined(CONFIG_PMC_MSP7120_GW)
|
||||||
/* Garibaldi Board IRQ wiring to PCI slots */
|
/* Garibaldi Board IRQ wiring to PCI slots */
|
||||||
static char irq_tab[][5] __initdata = {
|
static char irq_tab[][5] = {
|
||||||
/* INTA INTB INTC INTD */
|
/* INTA INTB INTC INTD */
|
||||||
{0, 0, 0, 0, 0 }, /* (AD[0]): Unused */
|
{0, 0, 0, 0, 0 }, /* (AD[0]): Unused */
|
||||||
{0, 0, 0, 0, 0 }, /* (AD[1]): 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)
|
#elif defined(CONFIG_PMC_MSP7120_EVAL)
|
||||||
|
|
||||||
/* MSP7120 Eval Board IRQ wiring to PCI slots */
|
/* MSP7120 Eval Board IRQ wiring to PCI slots */
|
||||||
static char irq_tab[][5] __initdata = {
|
static char irq_tab[][5] = {
|
||||||
/* INTA INTB INTC INTD */
|
/* INTA INTB INTC INTD */
|
||||||
{0, 0, 0, 0, 0 }, /* (AD[0]): Unused */
|
{0, 0, 0, 0, 0 }, /* (AD[0]): Unused */
|
||||||
{0, 0, 0, 0, 0 }, /* (AD[1]): Unused */
|
{0, 0, 0, 0, 0 }, /* (AD[1]): Unused */
|
||||||
|
@ -125,7 +125,7 @@ static char irq_tab[][5] __initdata = {
|
||||||
#else
|
#else
|
||||||
|
|
||||||
/* Unknown board -- don't assign any IRQs */
|
/* Unknown board -- don't assign any IRQs */
|
||||||
static char irq_tab[][5] __initdata = {
|
static char irq_tab[][5] = {
|
||||||
/* INTA INTB INTC INTD */
|
/* INTA INTB INTC INTD */
|
||||||
{0, 0, 0, 0, 0 }, /* (AD[0]): Unused */
|
{0, 0, 0, 0, 0 }, /* (AD[0]): Unused */
|
||||||
{0, 0, 0, 0, 0 }, /* (AD[1]): 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
|
* 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)
|
#if !defined(CONFIG_PMC_MSP7120_GW) && !defined(CONFIG_PMC_MSP7120_EVAL)
|
||||||
printk(KERN_WARNING "PCI: unknown board, no PCI IRQs assigned.\n");
|
printk(KERN_WARNING "PCI: unknown board, no PCI IRQs assigned.\n");
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
#include <asm/txx9/pci.h>
|
#include <asm/txx9/pci.h>
|
||||||
#include <asm/txx9/rbtx4927.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;
|
unsigned char irq = pin;
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
#include <asm/txx9/pci.h>
|
#include <asm/txx9/pci.h>
|
||||||
#include <asm/txx9/rbtx4938.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);
|
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
|
* seem to be a documentation error. At least on my RM200C the Cirrus
|
||||||
* Logic CL-GD5434 VGA is device 3.
|
* 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 */
|
/* INTA INTB INTC INTD */
|
||||||
{ 0, 0, 0, 0, 0 }, /* EISA bridge */
|
{ 0, 0, 0, 0, 0 }, /* EISA bridge */
|
||||||
{ SCSI, SCSI, SCSI, SCSI, SCSI }, /* SCSI */
|
{ 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.
|
* 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 */
|
/* INTA INTB INTC INTD */
|
||||||
{ 0, 0, 0, 0, 0 }, /* EISA bridge */
|
{ 0, 0, 0, 0, 0 }, /* EISA bridge */
|
||||||
{ SCSI, SCSI, SCSI, SCSI, SCSI }, /* SCSI */
|
{ 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 */
|
{ 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 */
|
/* INTA INTB INTC INTD */
|
||||||
{ 0, 0, 0, 0, 0 }, /* HOST bridge */
|
{ 0, 0, 0, 0, 0 }, /* HOST bridge */
|
||||||
{ SCSI, SCSI, SCSI, SCSI, SCSI }, /* SCSI */
|
{ SCSI, SCSI, SCSI, SCSI, SCSI }, /* SCSI */
|
||||||
|
@ -96,7 +96,7 @@ static char irq_tab_rm300e[5][5] __initdata = {
|
||||||
#define INTC PCIT_IRQ_INTC
|
#define INTC PCIT_IRQ_INTC
|
||||||
#define INTD PCIT_IRQ_INTD
|
#define INTD PCIT_IRQ_INTD
|
||||||
|
|
||||||
static char irq_tab_pcit[13][5] __initdata = {
|
static char irq_tab_pcit[13][5] = {
|
||||||
/* INTA INTB INTC INTD */
|
/* INTA INTB INTC INTD */
|
||||||
{ 0, 0, 0, 0, 0 }, /* HOST bridge */
|
{ 0, 0, 0, 0, 0 }, /* HOST bridge */
|
||||||
{ SCSI0, SCSI0, SCSI0, SCSI0, SCSI0 }, /* SCSI */
|
{ 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 */
|
{ 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 */
|
/* INTA INTB INTC INTD */
|
||||||
{ 0, 0, 0, 0, 0 }, /* HOST bridge */
|
{ 0, 0, 0, 0, 0 }, /* HOST bridge */
|
||||||
{ 0, INTB, INTC, INTD, INTA }, /* PCI Slot 9 */
|
{ 0, INTB, INTC, INTD, INTA }, /* PCI Slot 9 */
|
||||||
|
@ -130,7 +130,7 @@ static inline int is_rm300_revd(void)
|
||||||
return (csmsr & 0xa0) == 0x20;
|
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) {
|
switch (sni_brd_type) {
|
||||||
case SNI_BRD_PCI_TOWER_CPLUS:
|
case SNI_BRD_PCI_TOWER_CPLUS:
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
|
|
||||||
#include <asm/vr41xx/tb0219.h>
|
#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;
|
int irq = -1;
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
#include <asm/vr41xx/giu.h>
|
#include <asm/vr41xx/giu.h>
|
||||||
#include <asm/vr41xx/tb0226.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;
|
int irq = -1;
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
|
|
||||||
#include <asm/vr41xx/tb0287.h>
|
#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;
|
unsigned char bus;
|
||||||
int irq = -1;
|
int irq = -1;
|
||||||
|
|
|
@ -522,7 +522,7 @@ static int __init alchemy_pci_init(void)
|
||||||
arch_initcall(alchemy_pci_init);
|
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;
|
struct alchemy_pci_context *ctx = dev->sysdata;
|
||||||
if (ctx && ctx->board_map_irq)
|
if (ctx && ctx->board_map_irq)
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
#include <linux/bcma/bcma.h>
|
#include <linux/bcma/bcma.h>
|
||||||
#include <bcm47xx.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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,7 +61,7 @@ arch_initcall(lasat_pci_setup);
|
||||||
#define LASAT_IRQ_PCIC (LASAT_IRQ_BASE + 7)
|
#define LASAT_IRQ_PCIC (LASAT_IRQ_BASE + 7)
|
||||||
#define LASAT_IRQ_PCID (LASAT_IRQ_BASE + 8)
|
#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) {
|
switch (slot) {
|
||||||
case 1:
|
case 1:
|
||||||
|
|
|
@ -361,7 +361,7 @@ static int mt7620_pci_probe(struct platform_device *pdev)
|
||||||
return 0;
|
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;
|
u16 cmd;
|
||||||
u32 val;
|
u32 val;
|
||||||
|
|
|
@ -59,8 +59,7 @@ union octeon_pci_address {
|
||||||
} s;
|
} s;
|
||||||
};
|
};
|
||||||
|
|
||||||
int __initconst (*octeon_pcibios_map_irq)(const struct pci_dev *dev,
|
int (*octeon_pcibios_map_irq)(const struct pci_dev *dev, u8 slot, u8 pin);
|
||||||
u8 slot, u8 pin);
|
|
||||||
enum octeon_dma_bar_type octeon_dma_bar_type = OCTEON_DMA_BAR_TYPE_INVALID;
|
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.
|
* as it goes through each bridge.
|
||||||
* Returns Interrupt number for the device
|
* 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)
|
if (octeon_pcibios_map_irq)
|
||||||
return octeon_pcibios_map_irq(dev, slot, pin);
|
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);
|
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;
|
u16 cmd;
|
||||||
int irq = -1;
|
int irq = -1;
|
||||||
|
|
|
@ -564,7 +564,7 @@ static int rt3883_pci_probe(struct platform_device *pdev)
|
||||||
return err;
|
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);
|
return of_irq_parse_and_map_pci(dev, slot, pin);
|
||||||
}
|
}
|
||||||
|
|
|
@ -112,7 +112,7 @@ int __init tx4938_pciclk66_setup(void)
|
||||||
return pciclk;
|
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) {
|
if (get_tx4927_pcicptr(dev->bus->sysdata) == tx4938_pcic1ptr) {
|
||||||
switch (slot) {
|
switch (slot) {
|
||||||
|
|
|
@ -48,7 +48,7 @@ void __init tx4939_report_pci1clk(void)
|
||||||
((pciclk + 50000) / 100000) % 10);
|
((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) {
|
if (get_tx4927_pcicptr(dev->bus->sysdata) == tx4939_pcic1ptr) {
|
||||||
switch (slot) {
|
switch (slot) {
|
||||||
|
@ -68,7 +68,7 @@ int __init tx4939_pcic1_map_irq(const struct pci_dev *dev, u8 slot)
|
||||||
return -1;
|
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);
|
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;
|
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;
|
struct pci_dev *lnkdev;
|
||||||
int lnkfunc, node;
|
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);
|
return get_irq_vector(dev);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1464,8 +1464,7 @@ static int cvmx_pcie_rc_initialize(int pcie_port)
|
||||||
* as it goes through each bridge.
|
* as it goes through each bridge.
|
||||||
* Returns Interrupt number for the device
|
* Returns Interrupt number for the device
|
||||||
*/
|
*/
|
||||||
int __init octeon_pcie_pcibios_map_irq(const struct pci_dev *dev,
|
int octeon_pcie_pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||||
u8 slot, u8 pin)
|
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* The EBH5600 board with the PCI to PCIe bridge mistakenly
|
* The EBH5600 board with the PCI to PCIe bridge mistakenly
|
||||||
|
|
|
@ -22,6 +22,8 @@
|
||||||
#include <linux/smp.h>
|
#include <linux/smp.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
|
|
||||||
|
#include <asm/setup.h>
|
||||||
|
|
||||||
#ifdef CONFIG_MIPS_MT_SMP
|
#ifdef CONFIG_MIPS_MT_SMP
|
||||||
#define MIPS_CPU_IPI_RESCHED_IRQ 0 /* SW int 0 for resched */
|
#define MIPS_CPU_IPI_RESCHED_IRQ 0 /* SW int 0 for resched */
|
||||||
#define MIPS_CPU_IPI_CALL_IRQ 1 /* SW int 1 for call */
|
#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;
|
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;
|
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;
|
txx9_pci_err_action = TXX9_PCI_ERR_IGNORE;
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
txx9_pci_map_irq = txx9_board_vec->pci_map_irq;
|
||||||
|
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,10 +59,6 @@ void arch_cpu_idle(void)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void release_segments(struct mm_struct *mm)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void machine_restart(char *cmd)
|
void machine_restart(char *cmd)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_KERNEL_DEBUGGER
|
#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
|
* this gets called so that we can store lazy state into memory and copy the
|
||||||
* current task into the new thread.
|
* current task into the new thread.
|
||||||
|
|
|
@ -257,6 +257,18 @@ config PARISC_PAGE_SIZE_64KB
|
||||||
|
|
||||||
endchoice
|
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
|
config SMP
|
||||||
bool "Symmetric multi-processing support"
|
bool "Symmetric multi-processing support"
|
||||||
---help---
|
---help---
|
||||||
|
|
|
@ -129,8 +129,13 @@ Image: vmlinux
|
||||||
bzImage: vmlinux
|
bzImage: vmlinux
|
||||||
$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
|
$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
|
||||||
|
|
||||||
|
ifdef CONFIG_PARISC_SELF_EXTRACT
|
||||||
vmlinuz: bzImage
|
vmlinuz: bzImage
|
||||||
$(OBJCOPY) $(boot)/bzImage $@
|
$(OBJCOPY) $(boot)/bzImage $@
|
||||||
|
else
|
||||||
|
vmlinuz: vmlinux
|
||||||
|
@gzip -cf -9 $< > $@
|
||||||
|
endif
|
||||||
|
|
||||||
install:
|
install:
|
||||||
$(CONFIG_SHELL) $(src)/arch/parisc/install.sh \
|
$(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 := -D__KERNEL__ -O2 -DBOOTLOADER
|
||||||
KBUILD_CFLAGS += -DDISABLE_BRANCH_PROFILING
|
KBUILD_CFLAGS += -DDISABLE_BRANCH_PROFILING
|
||||||
KBUILD_CFLAGS += $(cflags-y) -fno-delete-null-pointer-checks
|
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
|
ifndef CONFIG_64BIT
|
||||||
KBUILD_CFLAGS += -mfast-indirect-calls
|
KBUILD_CFLAGS += -mfast-indirect-calls
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -24,7 +24,8 @@
|
||||||
/* Symbols defined by linker scripts */
|
/* Symbols defined by linker scripts */
|
||||||
extern char input_data[];
|
extern char input_data[];
|
||||||
extern int input_len;
|
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 _text, _end;
|
||||||
extern char _bss, _ebss;
|
extern char _bss, _ebss;
|
||||||
extern char _startcode_end;
|
extern char _startcode_end;
|
||||||
|
|
|
@ -280,6 +280,7 @@ void setup_pdc(void); /* in inventory.c */
|
||||||
/* wrapper-functions from pdc.c */
|
/* wrapper-functions from pdc.c */
|
||||||
|
|
||||||
int pdc_add_valid(unsigned long address);
|
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_info(struct pdc_chassis_info *chassis_info, void *led_info, unsigned long len);
|
||||||
int pdc_chassis_disp(unsigned long disp);
|
int pdc_chassis_disp(unsigned long disp);
|
||||||
int pdc_chassis_warn(unsigned long *warn);
|
int pdc_chassis_warn(unsigned long *warn);
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#ifndef __ASM_SMP_H
|
#ifndef __ASM_SMP_H
|
||||||
#define __ASM_SMP_H
|
#define __ASM_SMP_H
|
||||||
|
|
||||||
|
extern int init_per_cpu(int cpuid);
|
||||||
|
|
||||||
#if defined(CONFIG_SMP)
|
#if defined(CONFIG_SMP)
|
||||||
|
|
||||||
|
|
|
@ -232,6 +232,26 @@ int pdc_add_valid(unsigned long address)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(pdc_add_valid);
|
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.
|
* pdc_chassis_info - Return chassis information.
|
||||||
* @result: The return buffer.
|
* @result: The return buffer.
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
#include <linux/memblock.h>
|
#include <linux/memblock.h>
|
||||||
#include <linux/seq_file.h>
|
#include <linux/seq_file.h>
|
||||||
#include <linux/kthread.h>
|
#include <linux/kthread.h>
|
||||||
|
#include <linux/initrd.h>
|
||||||
|
|
||||||
#include <asm/pdc.h>
|
#include <asm/pdc.h>
|
||||||
#include <asm/pdcpat.h>
|
#include <asm/pdcpat.h>
|
||||||
|
@ -216,8 +217,16 @@ void __init pdc_pdt_init(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < pdt_status.pdt_entries; i++) {
|
for (i = 0; i < pdt_status.pdt_entries; i++) {
|
||||||
|
unsigned long addr;
|
||||||
|
|
||||||
report_mem_err(pdt_entry[i]);
|
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 */
|
/* mark memory page bad */
|
||||||
memblock_reserve(pdt_entry[i] & PAGE_MASK, PAGE_SIZE);
|
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.
|
* o Enable CPU profiling hooks.
|
||||||
*/
|
*/
|
||||||
int init_per_cpu(int cpunum)
|
int __init init_per_cpu(int cpunum)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
struct pdc_coproc_cfg coproc_cfg;
|
struct pdc_coproc_cfg coproc_cfg;
|
||||||
|
|
|
@ -38,6 +38,7 @@
|
||||||
#include <linux/export.h>
|
#include <linux/export.h>
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
#include <linux/sched/clock.h>
|
#include <linux/sched/clock.h>
|
||||||
|
#include <linux/start_kernel.h>
|
||||||
|
|
||||||
#include <asm/processor.h>
|
#include <asm/processor.h>
|
||||||
#include <asm/sections.h>
|
#include <asm/sections.h>
|
||||||
|
@ -48,6 +49,7 @@
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <asm/setup.h>
|
#include <asm/setup.h>
|
||||||
#include <asm/unwind.h>
|
#include <asm/unwind.h>
|
||||||
|
#include <asm/smp.h>
|
||||||
|
|
||||||
static char __initdata command_line[COMMAND_LINE_SIZE];
|
static char __initdata command_line[COMMAND_LINE_SIZE];
|
||||||
|
|
||||||
|
@ -115,7 +117,6 @@ void __init dma_ops_init(void)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern int init_per_cpu(int cpuid);
|
|
||||||
extern void collect_boot_cpu_data(void);
|
extern void collect_boot_cpu_data(void);
|
||||||
|
|
||||||
void __init setup_arch(char **cmdline_p)
|
void __init setup_arch(char **cmdline_p)
|
||||||
|
@ -398,9 +399,8 @@ static int __init parisc_init(void)
|
||||||
}
|
}
|
||||||
arch_initcall(parisc_init);
|
arch_initcall(parisc_init);
|
||||||
|
|
||||||
void start_parisc(void)
|
void __init start_parisc(void)
|
||||||
{
|
{
|
||||||
extern void start_kernel(void);
|
|
||||||
extern void early_trap_init(void);
|
extern void early_trap_init(void);
|
||||||
|
|
||||||
int ret, cpunum;
|
int ret, cpunum;
|
||||||
|
|
|
@ -255,12 +255,11 @@ void arch_send_call_function_single_ipi(int cpu)
|
||||||
static void __init
|
static void __init
|
||||||
smp_cpu_init(int cpunum)
|
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 init_IRQ(void); /* arch/parisc/kernel/irq.c */
|
||||||
extern void start_cpu_itimer(void); /* arch/parisc/kernel/time.c */
|
extern void start_cpu_itimer(void); /* arch/parisc/kernel/time.c */
|
||||||
|
|
||||||
/* Set modes and Enable floating point coprocessor */
|
/* Set modes and Enable floating point coprocessor */
|
||||||
(void) init_per_cpu(cpunum);
|
init_per_cpu(cpunum);
|
||||||
|
|
||||||
disable_sr_hashing();
|
disable_sr_hashing();
|
||||||
|
|
||||||
|
|
|
@ -817,7 +817,7 @@ void __init initialize_ivt(const void *iva)
|
||||||
u32 check = 0;
|
u32 check = 0;
|
||||||
u32 *ivap;
|
u32 *ivap;
|
||||||
u32 *hpmcp;
|
u32 *hpmcp;
|
||||||
u32 length;
|
u32 length, instr;
|
||||||
|
|
||||||
if (strcmp((const char *)iva, "cows can fly"))
|
if (strcmp((const char *)iva, "cows can fly"))
|
||||||
panic("IVT invalid");
|
panic("IVT invalid");
|
||||||
|
@ -827,6 +827,14 @@ void __init initialize_ivt(const void *iva)
|
||||||
for (i = 0; i < 8; i++)
|
for (i = 0; i < 8; i++)
|
||||||
*ivap++ = 0;
|
*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 */
|
/* Compute Checksum for HPMC handler */
|
||||||
length = os_hpmc_size;
|
length = os_hpmc_size;
|
||||||
ivap[7] = length;
|
ivap[7] = length;
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/kallsyms.h>
|
#include <linux/kallsyms.h>
|
||||||
#include <linux/sort.h>
|
#include <linux/sort.h>
|
||||||
|
#include <linux/sched.h>
|
||||||
|
|
||||||
#include <linux/uaccess.h>
|
#include <linux/uaccess.h>
|
||||||
#include <asm/assembly.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_sp = sp - 64;
|
||||||
info->prev_ip = 0;
|
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)))
|
if (get_user(tmp, (unsigned long *)(info->prev_sp - RP_OFFSET)))
|
||||||
break;
|
break;
|
||||||
info->prev_ip = tmp;
|
info->prev_ip = tmp;
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/extable.h>
|
#include <linux/extable.h>
|
||||||
#include <linux/uaccess.h>
|
#include <linux/uaccess.h>
|
||||||
|
#include <linux/hugetlb.h>
|
||||||
|
|
||||||
#include <asm/traps.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 task_struct *tsk;
|
||||||
struct mm_struct *mm;
|
struct mm_struct *mm;
|
||||||
unsigned long acc_type;
|
unsigned long acc_type;
|
||||||
int fault;
|
int fault = 0;
|
||||||
unsigned int flags;
|
unsigned int flags;
|
||||||
|
|
||||||
if (faulthandler_disabled())
|
if (faulthandler_disabled())
|
||||||
|
@ -315,7 +316,8 @@ void do_page_fault(struct pt_regs *regs, unsigned long code,
|
||||||
goto out_of_memory;
|
goto out_of_memory;
|
||||||
else if (fault & VM_FAULT_SIGSEGV)
|
else if (fault & VM_FAULT_SIGSEGV)
|
||||||
goto bad_area;
|
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;
|
goto bad_area;
|
||||||
BUG();
|
BUG();
|
||||||
}
|
}
|
||||||
|
@ -352,8 +354,7 @@ void do_page_fault(struct pt_regs *regs, unsigned long code,
|
||||||
|
|
||||||
if (user_mode(regs)) {
|
if (user_mode(regs)) {
|
||||||
struct siginfo si;
|
struct siginfo si;
|
||||||
|
unsigned int lsb = 0;
|
||||||
show_signal_msg(regs, code, address, tsk, vma);
|
|
||||||
|
|
||||||
switch (code) {
|
switch (code) {
|
||||||
case 15: /* Data TLB miss fault/Data page fault */
|
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;
|
si.si_code = (code == 26) ? SEGV_ACCERR : SEGV_MAPERR;
|
||||||
break;
|
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_errno = 0;
|
||||||
si.si_addr = (void __user *) address;
|
si.si_addr = (void __user *) address;
|
||||||
force_sig_info(si.si_signo, &si, current);
|
force_sig_info(si.si_signo, &si, current);
|
||||||
|
|
|
@ -138,10 +138,11 @@ CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||||
CONFIG_LOGO=y
|
CONFIG_LOGO=y
|
||||||
CONFIG_SOUND=m
|
CONFIG_SOUND=m
|
||||||
CONFIG_SND=m
|
CONFIG_SND=m
|
||||||
CONFIG_SND_SEQUENCER=m
|
CONFIG_SND_OSSEMUL=y
|
||||||
CONFIG_SND_MIXER_OSS=m
|
CONFIG_SND_MIXER_OSS=m
|
||||||
CONFIG_SND_PCM_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_POWERMAC=m
|
||||||
CONFIG_SND_AOA=m
|
CONFIG_SND_AOA=m
|
||||||
CONFIG_SND_AOA_FABRIC_LAYOUT=m
|
CONFIG_SND_AOA_FABRIC_LAYOUT=m
|
||||||
|
|
|
@ -64,11 +64,12 @@ CONFIG_LOGO=y
|
||||||
# CONFIG_LOGO_LINUX_CLUT224 is not set
|
# CONFIG_LOGO_LINUX_CLUT224 is not set
|
||||||
CONFIG_SOUND=y
|
CONFIG_SOUND=y
|
||||||
CONFIG_SND=y
|
CONFIG_SND=y
|
||||||
CONFIG_SND_SEQUENCER=y
|
CONFIG_SND_OSSEMUL=y
|
||||||
CONFIG_SND_MIXER_OSS=y
|
CONFIG_SND_MIXER_OSS=y
|
||||||
CONFIG_SND_PCM_OSS=y
|
CONFIG_SND_PCM_OSS=y
|
||||||
CONFIG_SND_SEQUENCER_OSS=y
|
|
||||||
# CONFIG_SND_VERBOSE_PROCFS is not set
|
# CONFIG_SND_VERBOSE_PROCFS is not set
|
||||||
|
CONFIG_SND_SEQUENCER=y
|
||||||
|
CONFIG_SND_SEQUENCER_OSS=y
|
||||||
# CONFIG_USB_SUPPORT is not set
|
# CONFIG_USB_SUPPORT is not set
|
||||||
CONFIG_RTC_CLASS=y
|
CONFIG_RTC_CLASS=y
|
||||||
CONFIG_RTC_DRV_GENERIC=y
|
CONFIG_RTC_DRV_GENERIC=y
|
||||||
|
|
|
@ -115,9 +115,10 @@ CONFIG_VGACON_SOFT_SCROLLBACK=y
|
||||||
CONFIG_LOGO=y
|
CONFIG_LOGO=y
|
||||||
CONFIG_SOUND=y
|
CONFIG_SOUND=y
|
||||||
CONFIG_SND=y
|
CONFIG_SND=y
|
||||||
CONFIG_SND_SEQUENCER=y
|
CONFIG_SND_OSSEMUL=y
|
||||||
CONFIG_SND_MIXER_OSS=y
|
CONFIG_SND_MIXER_OSS=y
|
||||||
CONFIG_SND_PCM_OSS=y
|
CONFIG_SND_PCM_OSS=y
|
||||||
|
CONFIG_SND_SEQUENCER=y
|
||||||
CONFIG_SND_SEQUENCER_OSS=y
|
CONFIG_SND_SEQUENCER_OSS=y
|
||||||
CONFIG_SND_USB_AUDIO=y
|
CONFIG_SND_USB_AUDIO=y
|
||||||
CONFIG_SND_USB_USX2Y=y
|
CONFIG_SND_USB_USX2Y=y
|
||||||
|
|
|
@ -227,11 +227,12 @@ CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||||
CONFIG_LOGO=y
|
CONFIG_LOGO=y
|
||||||
CONFIG_SOUND=m
|
CONFIG_SOUND=m
|
||||||
CONFIG_SND=m
|
CONFIG_SND=m
|
||||||
CONFIG_SND_SEQUENCER=m
|
CONFIG_SND_OSSEMUL=y
|
||||||
CONFIG_SND_SEQ_DUMMY=m
|
|
||||||
CONFIG_SND_MIXER_OSS=m
|
CONFIG_SND_MIXER_OSS=m
|
||||||
CONFIG_SND_PCM_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_DUMMY=m
|
||||||
CONFIG_SND_POWERMAC=m
|
CONFIG_SND_POWERMAC=m
|
||||||
CONFIG_SND_AOA=m
|
CONFIG_SND_AOA=m
|
||||||
|
|
|
@ -222,11 +222,12 @@ CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||||
CONFIG_LOGO=y
|
CONFIG_LOGO=y
|
||||||
CONFIG_SOUND=m
|
CONFIG_SOUND=m
|
||||||
CONFIG_SND=m
|
CONFIG_SND=m
|
||||||
CONFIG_SND_SEQUENCER=m
|
CONFIG_SND_OSSEMUL=y
|
||||||
CONFIG_SND_SEQ_DUMMY=m
|
|
||||||
CONFIG_SND_MIXER_OSS=m
|
CONFIG_SND_MIXER_OSS=m
|
||||||
CONFIG_SND_PCM_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_POWERMAC=m
|
||||||
CONFIG_SND_AOA=m
|
CONFIG_SND_AOA=m
|
||||||
CONFIG_SND_AOA_FABRIC_LAYOUT=m
|
CONFIG_SND_AOA_FABRIC_LAYOUT=m
|
||||||
|
|
|
@ -141,11 +141,12 @@ CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||||
CONFIG_LOGO=y
|
CONFIG_LOGO=y
|
||||||
CONFIG_SOUND=m
|
CONFIG_SOUND=m
|
||||||
CONFIG_SND=m
|
CONFIG_SND=m
|
||||||
CONFIG_SND_SEQUENCER=m
|
CONFIG_SND_OSSEMUL=y
|
||||||
CONFIG_SND_SEQ_DUMMY=m
|
|
||||||
CONFIG_SND_MIXER_OSS=m
|
CONFIG_SND_MIXER_OSS=m
|
||||||
CONFIG_SND_PCM_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_DRAGONRISE=y
|
||||||
CONFIG_HID_GYRATION=y
|
CONFIG_HID_GYRATION=y
|
||||||
CONFIG_HID_TWINHAN=y
|
CONFIG_HID_TWINHAN=y
|
||||||
|
|
|
@ -789,17 +789,18 @@ CONFIG_LOGO=y
|
||||||
# CONFIG_LOGO_LINUX_VGA16 is not set
|
# CONFIG_LOGO_LINUX_VGA16 is not set
|
||||||
CONFIG_SOUND=m
|
CONFIG_SOUND=m
|
||||||
CONFIG_SND=m
|
CONFIG_SND=m
|
||||||
CONFIG_SND_SEQUENCER=m
|
CONFIG_SND_OSSEMUL=y
|
||||||
CONFIG_SND_SEQ_DUMMY=m
|
|
||||||
CONFIG_SND_MIXER_OSS=m
|
CONFIG_SND_MIXER_OSS=m
|
||||||
CONFIG_SND_PCM_OSS=m
|
CONFIG_SND_PCM_OSS=m
|
||||||
CONFIG_SND_SEQUENCER_OSS=y
|
|
||||||
CONFIG_SND_DYNAMIC_MINORS=y
|
CONFIG_SND_DYNAMIC_MINORS=y
|
||||||
# CONFIG_SND_SUPPORT_OLD_API is not set
|
# CONFIG_SND_SUPPORT_OLD_API is not set
|
||||||
CONFIG_SND_VERBOSE_PRINTK=y
|
CONFIG_SND_VERBOSE_PRINTK=y
|
||||||
CONFIG_SND_DEBUG=y
|
CONFIG_SND_DEBUG=y
|
||||||
CONFIG_SND_DEBUG_VERBOSE=y
|
CONFIG_SND_DEBUG_VERBOSE=y
|
||||||
CONFIG_SND_PCM_XRUN_DEBUG=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_DUMMY=m
|
||||||
CONFIG_SND_VIRMIDI=m
|
CONFIG_SND_VIRMIDI=m
|
||||||
CONFIG_SND_MTPAV=m
|
CONFIG_SND_MTPAV=m
|
||||||
|
|
|
@ -79,11 +79,12 @@ CONFIG_FB=y
|
||||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||||
CONFIG_SOUND=y
|
CONFIG_SOUND=y
|
||||||
CONFIG_SND=y
|
CONFIG_SND=y
|
||||||
CONFIG_SND_SEQUENCER=y
|
CONFIG_SND_OSSEMUL=y
|
||||||
CONFIG_SND_MIXER_OSS=y
|
CONFIG_SND_MIXER_OSS=y
|
||||||
CONFIG_SND_PCM_OSS=y
|
CONFIG_SND_PCM_OSS=y
|
||||||
CONFIG_SND_SEQUENCER_OSS=y
|
|
||||||
# CONFIG_SND_VERBOSE_PROCFS is not set
|
# CONFIG_SND_VERBOSE_PROCFS is not set
|
||||||
|
CONFIG_SND_SEQUENCER=y
|
||||||
|
CONFIG_SND_SEQUENCER_OSS=y
|
||||||
CONFIG_HID_APPLE=m
|
CONFIG_HID_APPLE=m
|
||||||
CONFIG_HID_WACOM=m
|
CONFIG_HID_WACOM=m
|
||||||
CONFIG_MMC=y
|
CONFIG_MMC=y
|
||||||
|
|
|
@ -1019,6 +1019,10 @@ int eeh_init(void)
|
||||||
} else if ((ret = eeh_ops->init()))
|
} else if ((ret = eeh_ops->init()))
|
||||||
return ret;
|
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 */
|
/* Initialize EEH event */
|
||||||
ret = eeh_event_init();
|
ret = eeh_event_init();
|
||||||
if (ret)
|
if (ret)
|
||||||
|
|
|
@ -78,21 +78,3 @@ void eeh_dev_phb_init_dynamic(struct pci_controller *phb)
|
||||||
/* EEH PE for PHB */
|
/* EEH PE for PHB */
|
||||||
eeh_phb_pe_create(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.
|
* and that can be emulated.
|
||||||
*/
|
*/
|
||||||
if (!is_conditional_branch(*p->ainsn.insn) &&
|
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;
|
nip = regs.nip;
|
||||||
|
}
|
||||||
|
|
||||||
return nip;
|
return nip;
|
||||||
}
|
}
|
||||||
|
|
|
@ -131,7 +131,7 @@ static void flush_tmregs_to_thread(struct task_struct *tsk)
|
||||||
* in the appropriate thread structures from live.
|
* in the appropriate thread structures from live.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (tsk != current)
|
if ((!cpu_has_feature(CPU_FTR_TM)) || (tsk != current))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (MSR_TM_SUSPENDED(mfmsr())) {
|
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)
|
int machine_check_e500mc(struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
unsigned long mcsr = mfspr(SPRN_MCSR);
|
unsigned long mcsr = mfspr(SPRN_MCSR);
|
||||||
|
unsigned long pvr = mfspr(SPRN_PVR);
|
||||||
unsigned long reason = mcsr;
|
unsigned long reason = mcsr;
|
||||||
int recoverable = 1;
|
int recoverable = 1;
|
||||||
|
|
||||||
|
@ -478,9 +479,16 @@ int machine_check_e500mc(struct pt_regs *regs)
|
||||||
* may still get logged and cause a machine check. We should
|
* may still get logged and cause a machine check. We should
|
||||||
* only treat the non-write shadow case as non-recoverable.
|
* only treat the non-write shadow case as non-recoverable.
|
||||||
*/
|
*/
|
||||||
|
/* 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))
|
if (!(mfspr(SPRN_L1CSR2) & L1CSR2_DCWS))
|
||||||
recoverable = 0;
|
recoverable = 0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (reason & MCSR_L2MMU_MHIT) {
|
if (reason & MCSR_L2MMU_MHIT) {
|
||||||
printk("Hit on multiple TLB entries\n");
|
printk("Hit on multiple TLB entries\n");
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue