Merge branch 'akpm' (patches from Andrew)
Merge more updates from Andrew Morton: - a couple of hotfixes - almost all of the rest of MM - lib/ updates - binfmt_elf updates - autofs updates - quite a lot of misc fixes and updates - reiserfs, fatfs - signals - exec - cpumask - rapidio - sysctl - pids - eventfd - gcov - panic - pps - gdb script updates - ipc updates * emailed patches from Andrew Morton <akpm@linux-foundation.org>: (126 commits) mm: memcontrol: fix NUMA round-robin reclaim at intermediate level mm: memcontrol: fix recursive statistics correctness & scalabilty mm: memcontrol: move stat/event counting functions out-of-line mm: memcontrol: make cgroup stats and events query API explicitly local drivers/virt/fsl_hypervisor.c: prevent integer overflow in ioctl drivers/virt/fsl_hypervisor.c: dereferencing error pointers in ioctl mm, memcg: rename ambiguously named memory.stat counters and functions arch: remove <asm/sizes.h> and <asm-generic/sizes.h> treewide: replace #include <asm/sizes.h> with #include <linux/sizes.h> fs/block_dev.c: Remove duplicate header fs/cachefiles/namei.c: remove duplicate header include/linux/sched/signal.h: replace `tsk' with `task' fs/coda/psdev.c: remove duplicate header ipc: do cyclic id allocation for the ipc object. ipc: conserve sequence numbers in ipcmni_extend mode ipc: allow boot time extension of IPCMNI from 32k to 16M ipc/mqueue: optimize msg_get() ipc/mqueue: remove redundant wq task assignment ipc: prevent lockup on alloc_msg and free_msg scripts/gdb: print cached rate in lx-clk-summary ...
This commit is contained in:
commit
1064d85773
|
@ -63,6 +63,110 @@ as well as medium and long term trends. The total absolute stall time
|
|||
spikes which wouldn't necessarily make a dent in the time averages,
|
||||
or to average trends over custom time frames.
|
||||
|
||||
Monitoring for pressure thresholds
|
||||
==================================
|
||||
|
||||
Users can register triggers and use poll() to be woken up when resource
|
||||
pressure exceeds certain thresholds.
|
||||
|
||||
A trigger describes the maximum cumulative stall time over a specific
|
||||
time window, e.g. 100ms of total stall time within any 500ms window to
|
||||
generate a wakeup event.
|
||||
|
||||
To register a trigger user has to open psi interface file under
|
||||
/proc/pressure/ representing the resource to be monitored and write the
|
||||
desired threshold and time window. The open file descriptor should be
|
||||
used to wait for trigger events using select(), poll() or epoll().
|
||||
The following format is used:
|
||||
|
||||
<some|full> <stall amount in us> <time window in us>
|
||||
|
||||
For example writing "some 150000 1000000" into /proc/pressure/memory
|
||||
would add 150ms threshold for partial memory stall measured within
|
||||
1sec time window. Writing "full 50000 1000000" into /proc/pressure/io
|
||||
would add 50ms threshold for full io stall measured within 1sec time window.
|
||||
|
||||
Triggers can be set on more than one psi metric and more than one trigger
|
||||
for the same psi metric can be specified. However for each trigger a separate
|
||||
file descriptor is required to be able to poll it separately from others,
|
||||
therefore for each trigger a separate open() syscall should be made even
|
||||
when opening the same psi interface file.
|
||||
|
||||
Monitors activate only when system enters stall state for the monitored
|
||||
psi metric and deactivates upon exit from the stall state. While system is
|
||||
in the stall state psi signal growth is monitored at a rate of 10 times per
|
||||
tracking window.
|
||||
|
||||
The kernel accepts window sizes ranging from 500ms to 10s, therefore min
|
||||
monitoring update interval is 50ms and max is 1s. Min limit is set to
|
||||
prevent overly frequent polling. Max limit is chosen as a high enough number
|
||||
after which monitors are most likely not needed and psi averages can be used
|
||||
instead.
|
||||
|
||||
When activated, psi monitor stays active for at least the duration of one
|
||||
tracking window to avoid repeated activations/deactivations when system is
|
||||
bouncing in and out of the stall state.
|
||||
|
||||
Notifications to the userspace are rate-limited to one per tracking window.
|
||||
|
||||
The trigger will de-register when the file descriptor used to define the
|
||||
trigger is closed.
|
||||
|
||||
Userspace monitor usage example
|
||||
===============================
|
||||
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
#include <poll.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
/*
|
||||
* Monitor memory partial stall with 1s tracking window size
|
||||
* and 150ms threshold.
|
||||
*/
|
||||
int main() {
|
||||
const char trig[] = "some 150000 1000000";
|
||||
struct pollfd fds;
|
||||
int n;
|
||||
|
||||
fds.fd = open("/proc/pressure/memory", O_RDWR | O_NONBLOCK);
|
||||
if (fds.fd < 0) {
|
||||
printf("/proc/pressure/memory open error: %s\n",
|
||||
strerror(errno));
|
||||
return 1;
|
||||
}
|
||||
fds.events = POLLPRI;
|
||||
|
||||
if (write(fds.fd, trig, strlen(trig) + 1) < 0) {
|
||||
printf("/proc/pressure/memory write error: %s\n",
|
||||
strerror(errno));
|
||||
return 1;
|
||||
}
|
||||
|
||||
printf("waiting for events...\n");
|
||||
while (1) {
|
||||
n = poll(&fds, 1, -1);
|
||||
if (n < 0) {
|
||||
printf("poll error: %s\n", strerror(errno));
|
||||
return 1;
|
||||
}
|
||||
if (fds.revents & POLLERR) {
|
||||
printf("got POLLERR, event source is gone\n");
|
||||
return 0;
|
||||
}
|
||||
if (fds.revents & POLLPRI) {
|
||||
printf("event triggered!\n");
|
||||
} else {
|
||||
printf("unknown event received: 0x%x\n", fds.revents);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Cgroup2 interface
|
||||
=================
|
||||
|
||||
|
@ -71,3 +175,6 @@ mounted, pressure stall information is also tracked for tasks grouped
|
|||
into cgroups. Each subdirectory in the cgroupfs mountpoint contains
|
||||
cpu.pressure, memory.pressure, and io.pressure files; the format is
|
||||
the same as the /proc/pressure/ files.
|
||||
|
||||
Per-cgroup psi monitors can be specified and used the same way as
|
||||
system-wide ones.
|
||||
|
|
|
@ -1830,6 +1830,9 @@
|
|||
ip= [IP_PNP]
|
||||
See Documentation/filesystems/nfs/nfsroot.txt.
|
||||
|
||||
ipcmni_extend [KNL] Extend the maximum number of unique System V
|
||||
IPC identifiers from 32,768 to 16,777,216.
|
||||
|
||||
irqaffinity= [SMP] Set the default irq affinity mask
|
||||
The argument is a cpu list, as described above.
|
||||
|
||||
|
@ -3174,6 +3177,16 @@
|
|||
This will also cause panics on machine check exceptions.
|
||||
Useful together with panic=30 to trigger a reboot.
|
||||
|
||||
page_alloc.shuffle=
|
||||
[KNL] Boolean flag to control whether the page allocator
|
||||
should randomize its free lists. The randomization may
|
||||
be automatically enabled if the kernel detects it is
|
||||
running on a platform with a direct-mapped memory-side
|
||||
cache, and this parameter can be used to
|
||||
override/disable that behavior. The state of the flag
|
||||
can be read from sysfs at:
|
||||
/sys/module/page_alloc/parameters/shuffle.
|
||||
|
||||
page_owner= [KNL] Boot-time page_owner enabling option.
|
||||
Storage of the information about who allocated
|
||||
each page is disabled in default. With this switch,
|
||||
|
@ -4054,7 +4067,9 @@
|
|||
[[,]s[mp]#### \
|
||||
[[,]b[ios] | a[cpi] | k[bd] | t[riple] | e[fi] | p[ci]] \
|
||||
[[,]f[orce]
|
||||
Where reboot_mode is one of warm (soft) or cold (hard) or gpio,
|
||||
Where reboot_mode is one of warm (soft) or cold (hard) or gpio
|
||||
(prefix with 'panic_' to set mode for panic
|
||||
reboot only),
|
||||
reboot_type is one of bios, acpi, kbd, triple, efi, or pci,
|
||||
reboot_force is either force or not specified,
|
||||
reboot_cpu is s[mp]#### with #### being the processor
|
||||
|
|
|
@ -147,10 +147,10 @@ Division Functions
|
|||
.. kernel-doc:: include/linux/math64.h
|
||||
:internal:
|
||||
|
||||
.. kernel-doc:: lib/div64.c
|
||||
.. kernel-doc:: lib/math/div64.c
|
||||
:functions: div_s64_rem div64_u64_rem div64_u64 div64_s64
|
||||
|
||||
.. kernel-doc:: lib/gcd.c
|
||||
.. kernel-doc:: lib/math/gcd.c
|
||||
:export:
|
||||
|
||||
UUID/GUID
|
||||
|
|
|
@ -34,10 +34,6 @@ Configure the kernel with::
|
|||
CONFIG_DEBUG_FS=y
|
||||
CONFIG_GCOV_KERNEL=y
|
||||
|
||||
select the gcc's gcov format, default is autodetect based on gcc version::
|
||||
|
||||
CONFIG_GCOV_FORMAT_AUTODETECT=y
|
||||
|
||||
and to get coverage data for the entire kernel::
|
||||
|
||||
CONFIG_GCOV_PROFILE_ALL=y
|
||||
|
@ -169,6 +165,20 @@ b) gcov is run on the BUILD machine
|
|||
[user@build] gcov -o /tmp/coverage/tmp/out/init main.c
|
||||
|
||||
|
||||
Note on compilers
|
||||
-----------------
|
||||
|
||||
GCC and LLVM gcov tools are not necessarily compatible. Use gcov_ to work with
|
||||
GCC-generated .gcno and .gcda files, and use llvm-cov_ for Clang.
|
||||
|
||||
.. _gcov: http://gcc.gnu.org/onlinedocs/gcc/Gcov.html
|
||||
.. _llvm-cov: https://llvm.org/docs/CommandGuide/llvm-cov.html
|
||||
|
||||
Build differences between GCC and Clang gcov are handled by Kconfig. It
|
||||
automatically selects the appropriate gcov format depending on the detected
|
||||
toolchain.
|
||||
|
||||
|
||||
Troubleshooting
|
||||
---------------
|
||||
|
||||
|
|
|
@ -7,6 +7,10 @@ Required properties:
|
|||
- compatible: should be "pps-gpio"
|
||||
- gpios: one PPS GPIO in the format described by ../gpio/gpio.txt
|
||||
|
||||
Additional required properties for the PPS ECHO functionality:
|
||||
- echo-gpios: one PPS ECHO GPIO in the format described by ../gpio/gpio.txt
|
||||
- echo-active-ms: duration in ms of the active portion of the echo pulse
|
||||
|
||||
Optional properties:
|
||||
- assert-falling-edge: when present, assert is indicated by a falling edge
|
||||
(instead of by a rising edge)
|
||||
|
@ -19,5 +23,8 @@ Example:
|
|||
gpios = <&gpio1 26 GPIO_ACTIVE_HIGH>;
|
||||
assert-falling-edge;
|
||||
|
||||
echo-gpios = <&gpio1 27 GPIO_ACTIVE_HIGH>;
|
||||
echo-active-ms = <100>;
|
||||
|
||||
compatible = "pps-gpio";
|
||||
};
|
||||
|
|
|
@ -354,8 +354,10 @@ this ioctl is called until no further expire candidates are found.
|
|||
|
||||
The call requires an initialized struct autofs_dev_ioctl with the
|
||||
ioctlfd field set to the descriptor obtained from the open call. In
|
||||
addition an immediate expire, independent of the mount timeout, can be
|
||||
requested by setting the how field of struct args_expire to 1. If no
|
||||
addition an immediate expire that's independent of the mount timeout,
|
||||
and a forced expire that's independent of whether the mount is busy,
|
||||
can be requested by setting the how field of struct args_expire to
|
||||
AUTOFS_EXP_IMMEDIATE or AUTOFS_EXP_FORCED, respectively . If no
|
||||
expire candidates can be found the ioctl returns -1 with errno set to
|
||||
EAGAIN.
|
||||
|
||||
|
|
|
@ -116,7 +116,7 @@ that purpose there is another flag.
|
|||
**DCACHE_MANAGE_TRANSIT**
|
||||
|
||||
If a dentry has DCACHE_MANAGE_TRANSIT set then two very different but
|
||||
related behaviors are invoked, both using the `d_op->d_manage()`
|
||||
related behaviours are invoked, both using the `d_op->d_manage()`
|
||||
dentry operation.
|
||||
|
||||
Firstly, before checking to see if any filesystem is mounted on the
|
||||
|
@ -193,8 +193,8 @@ VFS remain in RCU-walk mode, but can only tell it to get out of
|
|||
RCU-walk mode by returning `-ECHILD`.
|
||||
|
||||
So `d_manage()`, when called with `rcu_walk` set, should either return
|
||||
-ECHILD if there is any reason to believe it is unsafe to end the
|
||||
mounted filesystem, and otherwise should return 0.
|
||||
-ECHILD if there is any reason to believe it is unsafe to enter the
|
||||
mounted filesystem, otherwise it should return 0.
|
||||
|
||||
autofs will return `-ECHILD` if an expiry of the filesystem has been
|
||||
initiated or is being considered, otherwise it returns 0.
|
||||
|
@ -210,7 +210,7 @@ mounts that were created by `d_automount()` returning a filesystem to be
|
|||
mounted. As autofs doesn't return such a filesystem but leaves the
|
||||
mounting to the automount daemon, it must involve the automount daemon
|
||||
in unmounting as well. This also means that autofs has more control
|
||||
of expiry.
|
||||
over expiry.
|
||||
|
||||
The VFS also supports "expiry" of mounts using the MNT_EXPIRE flag to
|
||||
the `umount` system call. Unmounting with MNT_EXPIRE will fail unless
|
||||
|
@ -225,7 +225,7 @@ unmount any filesystems mounted on the autofs filesystem or remove any
|
|||
symbolic links or empty directories any time it likes. If the unmount
|
||||
or removal is successful the filesystem will be returned to the state
|
||||
it was before the mount or creation, so that any access of the name
|
||||
will trigger normal auto-mount processing. In particlar, `rmdir` and
|
||||
will trigger normal auto-mount processing. In particular, `rmdir` and
|
||||
`unlink` do not leave negative entries in the dcache as a normal
|
||||
filesystem would, so an attempt to access a recently-removed object is
|
||||
passed to autofs for handling.
|
||||
|
@ -240,11 +240,18 @@ Normally the daemon only wants to remove entries which haven't been
|
|||
used for a while. For this purpose autofs maintains a "`last_used`"
|
||||
time stamp on each directory or symlink. For symlinks it genuinely
|
||||
does record the last time the symlink was "used" or followed to find
|
||||
out where it points to. For directories the field is a slight
|
||||
misnomer. It actually records the last time that autofs checked if
|
||||
the directory or one of its descendents was busy and found that it
|
||||
was. This is just as useful and doesn't require updating the field so
|
||||
often.
|
||||
out where it points to. For directories the field is used slightly
|
||||
differently. The field is updated at mount time and during expire
|
||||
checks if it is found to be in use (ie. open file descriptor or
|
||||
process working directory) and during path walks. The update done
|
||||
during path walks prevents frequent expire and immediate mount of
|
||||
frequently accessed automounts. But in the case where a GUI continually
|
||||
access or an application frequently scans an autofs directory tree
|
||||
there can be an accumulation of mounts that aren't actually being
|
||||
used. To cater for this case the "`strictexpire`" autofs mount option
|
||||
can be used to avoid the "`last_used`" update on path walk thereby
|
||||
preventing this apparent inability to expire mounts that aren't
|
||||
really in use.
|
||||
|
||||
The daemon is able to ask autofs if anything is due to be expired,
|
||||
using an `ioctl` as discussed later. For a *direct* mount, autofs
|
||||
|
@ -255,8 +262,12 @@ up.
|
|||
|
||||
There is an option with indirect mounts to consider each of the leaves
|
||||
that has been mounted on instead of considering the top-level names.
|
||||
This is intended for compatability with version 4 of autofs and should
|
||||
be considered as deprecated.
|
||||
This was originally intended for compatibility with version 4 of autofs
|
||||
and should be considered as deprecated for Sun Format automount maps.
|
||||
However, it may be used again for amd format mount maps (which are
|
||||
generally indirect maps) because the amd automounter allows for the
|
||||
setting of an expire timeout for individual mounts. But there are
|
||||
some difficulties in making the needed changes for this.
|
||||
|
||||
When autofs considers a directory it checks the `last_used` time and
|
||||
compares it with the "timeout" value set when the filesystem was
|
||||
|
@ -273,7 +284,7 @@ mounts. If it finds something in the root directory to expire it will
|
|||
return the name of that thing. Once a name has been returned the
|
||||
automount daemon needs to unmount any filesystems mounted below the
|
||||
name normally. As described above, this is unsafe for non-toplevel
|
||||
mounts in a version-5 autofs. For this reason the current `automountd`
|
||||
mounts in a version-5 autofs. For this reason the current `automount(8)`
|
||||
does not use this ioctl.
|
||||
|
||||
The second mechanism uses either the **AUTOFS_DEV_IOCTL_EXPIRE_CMD** or
|
||||
|
@ -345,7 +356,7 @@ The `wait_queue_token` is a unique number which can identify a
|
|||
particular request to be acknowledged. When a message is sent over
|
||||
the pipe the affected dentry is marked as either "active" or
|
||||
"expiring" and other accesses to it block until the message is
|
||||
acknowledged using one of the ioctls below and the relevant
|
||||
acknowledged using one of the ioctls below with the relevant
|
||||
`wait_queue_token`.
|
||||
|
||||
Communicating with autofs: root directory ioctls
|
||||
|
@ -367,15 +378,14 @@ The available ioctl commands are:
|
|||
This mode is also entered if a write to the pipe fails.
|
||||
- **AUTOFS_IOC_PROTOVER**: This returns the protocol version in use.
|
||||
- **AUTOFS_IOC_PROTOSUBVER**: Returns the protocol sub-version which
|
||||
is really a version number for the implementation. It is
|
||||
currently 2.
|
||||
is really a version number for the implementation.
|
||||
- **AUTOFS_IOC_SETTIMEOUT**: This passes a pointer to an unsigned
|
||||
long. The value is used to set the timeout for expiry, and
|
||||
the current timeout value is stored back through the pointer.
|
||||
- **AUTOFS_IOC_ASKUMOUNT**: Returns, in the pointed-to `int`, 1 if
|
||||
the filesystem could be unmounted. This is only a hint as
|
||||
the situation could change at any instant. This call can be
|
||||
use to avoid a more expensive full unmount attempt.
|
||||
used to avoid a more expensive full unmount attempt.
|
||||
- **AUTOFS_IOC_EXPIRE**: as described above, this asks if there is
|
||||
anything suitable to expire. A pointer to a packet:
|
||||
|
||||
|
@ -400,6 +410,11 @@ The available ioctl commands are:
|
|||
**AUTOFS_EXP_IMMEDIATE** causes `last_used` time to be ignored
|
||||
and objects are expired if the are not in use.
|
||||
|
||||
**AUTOFS_EXP_FORCED** causes the in use status to be ignored
|
||||
and objects are expired ieven if they are in use. This assumes
|
||||
that the daemon has requested this because it is capable of
|
||||
performing the umount.
|
||||
|
||||
**AUTOFS_EXP_LEAVES** will select a leaf rather than a top-level
|
||||
name to expire. This is only safe when *maxproto* is 4.
|
||||
|
||||
|
@ -415,7 +430,7 @@ which can be used to communicate directly with the autofs filesystem.
|
|||
It requires CAP_SYS_ADMIN for access.
|
||||
|
||||
The `ioctl`s that can be used on this device are described in a separate
|
||||
document `autofs-mount-control.txt`, and are summarized briefly here.
|
||||
document `autofs-mount-control.txt`, and are summarised briefly here.
|
||||
Each ioctl is passed a pointer to an `autofs_dev_ioctl` structure:
|
||||
|
||||
struct autofs_dev_ioctl {
|
||||
|
@ -511,6 +526,21 @@ directories.
|
|||
Catatonic mode can only be left via the
|
||||
**AUTOFS_DEV_IOCTL_OPENMOUNT_CMD** ioctl on the `/dev/autofs`.
|
||||
|
||||
The "ignore" mount option
|
||||
-------------------------
|
||||
|
||||
The "ignore" mount option can be used to provide a generic indicator
|
||||
to applications that the mount entry should be ignored when displaying
|
||||
mount information.
|
||||
|
||||
In other OSes that provide autofs and that provide a mount list to user
|
||||
space based on the kernel mount list a no-op mount option ("ignore" is
|
||||
the one use on the most common OSes) is allowed so that autofs file
|
||||
system users can optionally use it.
|
||||
|
||||
This is intended to be used by user space programs to exclude autofs
|
||||
mounts from consideration when reading the mounts list.
|
||||
|
||||
autofs, name spaces, and shared mounts
|
||||
--------------------------------------
|
||||
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
#include <mach/hardware.h>
|
||||
#include <asm/mach/irq.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
#include <asm/hardware/sa1111.h>
|
||||
|
||||
|
|
|
@ -17,7 +17,6 @@ generic-y += seccomp.h
|
|||
generic-y += segment.h
|
||||
generic-y += serial.h
|
||||
generic-y += simd.h
|
||||
generic-y += sizes.h
|
||||
generic-y += trace_clock.h
|
||||
|
||||
generated-y += mach-types.h
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
#include <linux/threads.h>
|
||||
#include <asm/irq.h>
|
||||
|
||||
/* number of IPIS _not_ including IPI_CPU_BACKTRACE */
|
||||
#define NR_IPI 7
|
||||
|
||||
typedef struct {
|
||||
|
|
|
@ -5,7 +5,7 @@ void convert_to_tag_list(struct tag *tags);
|
|||
const struct machine_desc *setup_machine_tags(phys_addr_t __atags_pointer,
|
||||
unsigned int machine_nr);
|
||||
#else
|
||||
static inline const struct machine_desc *
|
||||
static inline const struct machine_desc * __init __noreturn
|
||||
setup_machine_tags(phys_addr_t __atags_pointer, unsigned int machine_nr)
|
||||
{
|
||||
early_print("no ATAGS support: can't continue\n");
|
||||
|
|
|
@ -70,6 +70,10 @@ enum ipi_msg_type {
|
|||
IPI_CPU_STOP,
|
||||
IPI_IRQ_WORK,
|
||||
IPI_COMPLETION,
|
||||
/*
|
||||
* CPU_BACKTRACE is special and not included in NR_IPI
|
||||
* or tracable with trace_ipi_*
|
||||
*/
|
||||
IPI_CPU_BACKTRACE,
|
||||
/*
|
||||
* SGI8-15 can be reserved by secure firmware, and thus may
|
||||
|
@ -797,7 +801,7 @@ core_initcall(register_cpufreq_notifier);
|
|||
|
||||
static void raise_nmi(cpumask_t *mask)
|
||||
{
|
||||
smp_cross_call(mask, IPI_CPU_BACKTRACE);
|
||||
__smp_cross_call(mask, IPI_CPU_BACKTRACE);
|
||||
}
|
||||
|
||||
void arch_trigger_cpumask_backtrace(const cpumask_t *mask, bool exclude_self)
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
* Free Software Foundation.
|
||||
*/
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
#include "../hardware.h"
|
||||
#include "devices-common.h"
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
* Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
* Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
#include "../hardware.h"
|
||||
#include "devices-common.h"
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
* the terms of the GNU General Public License version 2 as published by the
|
||||
* Free Software Foundation.
|
||||
*/
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
#include "../hardware.h"
|
||||
#include "devices-common.h"
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
* the terms of the GNU General Public License version 2 as published by the
|
||||
* Free Software Foundation.
|
||||
*/
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
#include "../hardware.h"
|
||||
#include "devices-common.h"
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
#include <asm/io.h>
|
||||
#include <soc/imx/revision.h>
|
||||
#endif
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
#define addr_in_module(addr, mod) \
|
||||
((unsigned long)(addr) - mod ## _BASE_ADDR < mod ## _SIZE)
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
#include <linux/irqchip/arm-vic.h>
|
||||
#include <linux/gpio/machine.h>
|
||||
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
#include "lm.h"
|
||||
#include "impd1.h"
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
#include <linux/export.h>
|
||||
#include <asm/irq.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
#include <asm/signal.h>
|
||||
#include <asm/mach/pci.h>
|
||||
#include "pci.h"
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
#include <linux/dma-mapping.h>
|
||||
#include <linux/io.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
#include <mach/irqs.h>
|
||||
|
||||
/* assumes CONTROLLER_ONLY# is never asserted in the ESSR register */
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
|
||||
#include <asm/cputype.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
#include <asm/mach/pci.h>
|
||||
#include <mach/hardware.h>
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
#ifndef __ASM_ARCH_HARDWARE_H
|
||||
#define __ASM_ARCH_HARDWARE_H
|
||||
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
/*
|
||||
* Clocks are derived from MCLK, which is 25MHz
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
#ifndef __ASM_ARCH_OMAP_HARDWARE_H
|
||||
#define __ASM_ARCH_OMAP_HARDWARE_H
|
||||
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
#ifndef __ASSEMBLER__
|
||||
#include <asm/types.h>
|
||||
#include <mach/soc.h>
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
* XXX handle crossbar/shared link difference for L3?
|
||||
* XXX these should be marked initdata for multi-OMAP kernels
|
||||
*/
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
#include "omap_hwmod.h"
|
||||
#include "l3_2xxx.h"
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
#include <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <linux/of.h>
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
#include <asm/setup.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/flash.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
#include <mach/audio.h>
|
||||
#include "colibri.h"
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
#include <linux/interrupt.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/irq.h>
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
#include <linux/usb/gpio_vbus.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/irq.h>
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
#include <linux/etherdevice.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
#include <asm/system_info.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/irq.h>
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
#include <asm/mach-types.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
#include <asm/mach-types.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
#include <asm/mach-types.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
|
|
|
@ -40,7 +40,7 @@
|
|||
#include <asm/mach-types.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
#include <asm/memory.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
|
|
|
@ -58,7 +58,7 @@
|
|||
#include <asm/setup.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
#include <asm/system_info.h>
|
||||
|
||||
#include <asm/mach/arch.h>
|
||||
|
|
|
@ -15,7 +15,7 @@ extern unsigned int s3c2410_modify_misccr(unsigned int clr, unsigned int chg);
|
|||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
#include <mach/map.h>
|
||||
|
||||
#endif /* __ASM_ARCH_HARDWARE_H */
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
#ifndef __ASM_ARCH_MEMORY_H
|
||||
#define __ASM_ARCH_MEMORY_H
|
||||
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
/*
|
||||
* Because of the wide memory address space between physical RAM banks on the
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/map.h>
|
||||
#include <asm/hardware/sa1111.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/assabet.h>
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
#define __MACH_TEGRA_IOMAP_H
|
||||
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
#define TEGRA_IRAM_BASE 0x40000000
|
||||
#define TEGRA_IRAM_SIZE SZ_256K
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
#ifndef __MACH_TEGRA_IRAMMAP_H
|
||||
#define __MACH_TEGRA_IRAMMAP_H
|
||||
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
/* The first 1K of IRAM is permanently reserved for the CPU reset handler */
|
||||
#define TEGRA_IRAM_RESET_HANDLER_OFFSET 0
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
#ifndef __ASM_ARCH_HARDWARE_H
|
||||
#define __ASM_ARCH_HARDWARE_H
|
||||
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
#include <mach/map.h>
|
||||
|
||||
#endif /* __ASM_ARCH_HARDWARE_H */
|
||||
|
|
|
@ -20,7 +20,6 @@ generic-y += qspinlock.h
|
|||
generic-y += segment.h
|
||||
generic-y += serial.h
|
||||
generic-y += set_memory.h
|
||||
generic-y += sizes.h
|
||||
generic-y += switch_to.h
|
||||
generic-y += trace_clock.h
|
||||
generic-y += unaligned.h
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
#ifndef __ASM_BOOT_H
|
||||
#define __ASM_BOOT_H
|
||||
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
/*
|
||||
* arm64 requires the DTB to be 8 byte aligned and
|
||||
|
|
|
@ -401,7 +401,7 @@ unsigned long cpu_get_elf_hwcap2(void);
|
|||
#define cpu_have_named_feature(name) cpu_have_feature(cpu_feature(name))
|
||||
|
||||
/* System capability check for constant caps */
|
||||
static inline bool __cpus_have_const_cap(int num)
|
||||
static __always_inline bool __cpus_have_const_cap(int num)
|
||||
{
|
||||
if (num >= ARM64_NCAPS)
|
||||
return false;
|
||||
|
@ -415,7 +415,7 @@ static inline bool cpus_have_cap(unsigned int num)
|
|||
return test_bit(num, cpu_hwcaps);
|
||||
}
|
||||
|
||||
static inline bool cpus_have_const_cap(int num)
|
||||
static __always_inline bool cpus_have_const_cap(int num)
|
||||
{
|
||||
if (static_branch_likely(&arm64_const_caps_ready))
|
||||
return __cpus_have_const_cap(num);
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
#include <linux/types.h>
|
||||
#include <asm/bug.h>
|
||||
#include <asm/page-def.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
/*
|
||||
* Size of the PCI I/O space. This must remain a power of two so that
|
||||
|
|
|
@ -48,7 +48,7 @@
|
|||
#include <asm/numa.h>
|
||||
#include <asm/sections.h>
|
||||
#include <asm/setup.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
#include <asm/tlb.h>
|
||||
#include <asm/alternative.h>
|
||||
|
||||
|
|
|
@ -40,7 +40,7 @@
|
|||
#include <asm/kernel-pgtable.h>
|
||||
#include <asm/sections.h>
|
||||
#include <asm/setup.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
#include <asm/tlb.h>
|
||||
#include <asm/mmu_context.h>
|
||||
#include <asm/ptdump.h>
|
||||
|
|
|
@ -42,7 +42,6 @@ generic-y += scatterlist.h
|
|||
generic-y += sections.h
|
||||
generic-y += serial.h
|
||||
generic-y += shmparam.h
|
||||
generic-y += sizes.h
|
||||
generic-y += spinlock.h
|
||||
generic-y += timex.h
|
||||
generic-y += tlbflush.h
|
||||
|
|
|
@ -32,7 +32,6 @@ generic-y += sections.h
|
|||
generic-y += segment.h
|
||||
generic-y += serial.h
|
||||
generic-y += shmparam.h
|
||||
generic-y += sizes.h
|
||||
generic-y += topology.h
|
||||
generic-y += trace_clock.h
|
||||
generic-y += unaligned.h
|
||||
|
|
|
@ -482,7 +482,7 @@ static inline void __clear_bit_unlock(unsigned long nr, volatile unsigned long *
|
|||
* Return the bit position (0..63) of the most significant 1 bit in a word
|
||||
* Returns -1 if no 1 bit exists
|
||||
*/
|
||||
static inline unsigned long __fls(unsigned long word)
|
||||
static __always_inline unsigned long __fls(unsigned long word)
|
||||
{
|
||||
int num;
|
||||
|
||||
|
@ -548,7 +548,7 @@ static inline unsigned long __fls(unsigned long word)
|
|||
* Returns 0..SZLONG-1
|
||||
* Undefined if no bit exists, so code should check against 0 first.
|
||||
*/
|
||||
static inline unsigned long __ffs(unsigned long word)
|
||||
static __always_inline unsigned long __ffs(unsigned long word)
|
||||
{
|
||||
return __fls(word & -word);
|
||||
}
|
||||
|
|
|
@ -42,8 +42,8 @@ static inline void align_mod(const int align, const int mod)
|
|||
: "n"(align), "n"(mod));
|
||||
}
|
||||
|
||||
static inline void mult_sh_align_mod(long *v1, long *v2, long *w,
|
||||
const int align, const int mod)
|
||||
static __always_inline void mult_sh_align_mod(long *v1, long *v2, long *w,
|
||||
const int align, const int mod)
|
||||
{
|
||||
unsigned long flags;
|
||||
int m1, m2;
|
||||
|
|
|
@ -39,7 +39,6 @@ generic-y += preempt.h
|
|||
generic-y += sections.h
|
||||
generic-y += segment.h
|
||||
generic-y += serial.h
|
||||
generic-y += sizes.h
|
||||
generic-y += switch_to.h
|
||||
generic-y += timex.h
|
||||
generic-y += topology.h
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
#define __PAGETABLE_PMD_FOLDED 1
|
||||
#include <asm-generic/4level-fixup.h>
|
||||
#include <asm-generic/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
#include <asm/memory.h>
|
||||
#include <asm/nds32.h>
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
#include <asm/asm-offsets.h>
|
||||
#include <asm/page.h>
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
#include <asm/thread_info.h>
|
||||
|
||||
#ifdef CONFIG_CPU_BIG_ENDIAN
|
||||
|
|
|
@ -628,14 +628,14 @@ static int __init prom_next_node(phandle *nodep)
|
|||
}
|
||||
}
|
||||
|
||||
static inline int prom_getprop(phandle node, const char *pname,
|
||||
void *value, size_t valuelen)
|
||||
static inline int __init prom_getprop(phandle node, const char *pname,
|
||||
void *value, size_t valuelen)
|
||||
{
|
||||
return call_prom("getprop", 4, 1, node, ADDR(pname),
|
||||
(u32)(unsigned long) value, (u32) valuelen);
|
||||
}
|
||||
|
||||
static inline int prom_getproplen(phandle node, const char *pname)
|
||||
static inline int __init prom_getproplen(phandle node, const char *pname)
|
||||
{
|
||||
return call_prom("getproplen", 2, 1, node, ADDR(pname));
|
||||
}
|
||||
|
|
|
@ -610,7 +610,7 @@ SYSFS_PMCSETUP(pa6t_pmc2, SPRN_PA6T_PMC2);
|
|||
SYSFS_PMCSETUP(pa6t_pmc3, SPRN_PA6T_PMC3);
|
||||
SYSFS_PMCSETUP(pa6t_pmc4, SPRN_PA6T_PMC4);
|
||||
SYSFS_PMCSETUP(pa6t_pmc5, SPRN_PA6T_PMC5);
|
||||
#ifdef CONFIG_DEBUG_KERNEL
|
||||
#ifdef CONFIG_DEBUG_MISC
|
||||
SYSFS_SPRSETUP(hid0, SPRN_HID0);
|
||||
SYSFS_SPRSETUP(hid1, SPRN_HID1);
|
||||
SYSFS_SPRSETUP(hid4, SPRN_HID4);
|
||||
|
@ -639,7 +639,7 @@ SYSFS_SPRSETUP(tsr0, SPRN_PA6T_TSR0);
|
|||
SYSFS_SPRSETUP(tsr1, SPRN_PA6T_TSR1);
|
||||
SYSFS_SPRSETUP(tsr2, SPRN_PA6T_TSR2);
|
||||
SYSFS_SPRSETUP(tsr3, SPRN_PA6T_TSR3);
|
||||
#endif /* CONFIG_DEBUG_KERNEL */
|
||||
#endif /* CONFIG_DEBUG_MISC */
|
||||
#endif /* HAS_PPC_PMC_PA6T */
|
||||
|
||||
#ifdef HAS_PPC_PMC_IBM
|
||||
|
@ -680,7 +680,7 @@ static struct device_attribute pa6t_attrs[] = {
|
|||
__ATTR(pmc3, 0600, show_pa6t_pmc3, store_pa6t_pmc3),
|
||||
__ATTR(pmc4, 0600, show_pa6t_pmc4, store_pa6t_pmc4),
|
||||
__ATTR(pmc5, 0600, show_pa6t_pmc5, store_pa6t_pmc5),
|
||||
#ifdef CONFIG_DEBUG_KERNEL
|
||||
#ifdef CONFIG_DEBUG_MISC
|
||||
__ATTR(hid0, 0600, show_hid0, store_hid0),
|
||||
__ATTR(hid1, 0600, show_hid1, store_hid1),
|
||||
__ATTR(hid4, 0600, show_hid4, store_hid4),
|
||||
|
@ -709,7 +709,7 @@ static struct device_attribute pa6t_attrs[] = {
|
|||
__ATTR(tsr1, 0600, show_tsr1, store_tsr1),
|
||||
__ATTR(tsr2, 0600, show_tsr2, store_tsr2),
|
||||
__ATTR(tsr3, 0600, show_tsr3, store_tsr3),
|
||||
#endif /* CONFIG_DEBUG_KERNEL */
|
||||
#endif /* CONFIG_DEBUG_MISC */
|
||||
};
|
||||
#endif /* HAS_PPC_PMC_PA6T */
|
||||
#endif /* HAS_PPC_PMC_CLASSIC */
|
||||
|
|
|
@ -90,7 +90,7 @@ void radix__tlbiel_all(unsigned int action)
|
|||
asm volatile(PPC_INVALIDATE_ERAT "; isync" : : :"memory");
|
||||
}
|
||||
|
||||
static inline void __tlbiel_pid(unsigned long pid, int set,
|
||||
static __always_inline void __tlbiel_pid(unsigned long pid, int set,
|
||||
unsigned long ric)
|
||||
{
|
||||
unsigned long rb,rs,prs,r;
|
||||
|
@ -106,7 +106,7 @@ static inline void __tlbiel_pid(unsigned long pid, int set,
|
|||
trace_tlbie(0, 1, rb, rs, ric, prs, r);
|
||||
}
|
||||
|
||||
static inline void __tlbie_pid(unsigned long pid, unsigned long ric)
|
||||
static __always_inline void __tlbie_pid(unsigned long pid, unsigned long ric)
|
||||
{
|
||||
unsigned long rb,rs,prs,r;
|
||||
|
||||
|
@ -120,7 +120,7 @@ static inline void __tlbie_pid(unsigned long pid, unsigned long ric)
|
|||
trace_tlbie(0, 0, rb, rs, ric, prs, r);
|
||||
}
|
||||
|
||||
static inline void __tlbiel_lpid(unsigned long lpid, int set,
|
||||
static __always_inline void __tlbiel_lpid(unsigned long lpid, int set,
|
||||
unsigned long ric)
|
||||
{
|
||||
unsigned long rb,rs,prs,r;
|
||||
|
@ -136,7 +136,7 @@ static inline void __tlbiel_lpid(unsigned long lpid, int set,
|
|||
trace_tlbie(lpid, 1, rb, rs, ric, prs, r);
|
||||
}
|
||||
|
||||
static inline void __tlbie_lpid(unsigned long lpid, unsigned long ric)
|
||||
static __always_inline void __tlbie_lpid(unsigned long lpid, unsigned long ric)
|
||||
{
|
||||
unsigned long rb,rs,prs,r;
|
||||
|
||||
|
@ -928,7 +928,7 @@ void radix__tlb_flush(struct mmu_gather *tlb)
|
|||
tlb->need_flush_all = 0;
|
||||
}
|
||||
|
||||
static inline void __radix__flush_tlb_range_psize(struct mm_struct *mm,
|
||||
static __always_inline void __radix__flush_tlb_range_psize(struct mm_struct *mm,
|
||||
unsigned long start, unsigned long end,
|
||||
int psize, bool also_pwc)
|
||||
{
|
||||
|
|
|
@ -202,7 +202,7 @@ static inline int __cpacf_check_opcode(unsigned int opcode)
|
|||
}
|
||||
}
|
||||
|
||||
static inline int cpacf_query(unsigned int opcode, cpacf_mask_t *mask)
|
||||
static __always_inline int cpacf_query(unsigned int opcode, cpacf_mask_t *mask)
|
||||
{
|
||||
if (__cpacf_check_opcode(opcode)) {
|
||||
__cpacf_query(opcode, mask);
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
#include <linux/irq.h>
|
||||
#include <linux/clk.h>
|
||||
#include <asm/machvec.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
#include <asm/clock.h>
|
||||
|
||||
static struct mtd_partition nor_flash_partitions[] = {
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
#include <linux/irq.h>
|
||||
#include <linux/clk.h>
|
||||
#include <asm/machvec.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
/* Dummy supplies, where voltage doesn't matter */
|
||||
static struct regulator_consumer_supply dummy_supplies[] = {
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
#include <linux/smc91x.h>
|
||||
#include <linux/sh_intc.h>
|
||||
#include <asm/machvec.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
#define SMC_IOBASE 0xA2000000
|
||||
#define SMC_IO_OFFSET 0x300
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
#include <asm/addrspace.h>
|
||||
#include <asm/delay.h>
|
||||
#include <asm/i2c-sh7760.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
/* Bus state controller registers for CS4 area */
|
||||
#define BSC_CS4BCR 0xA4FD0010
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
#include <linux/sh_eth.h>
|
||||
#include <linux/sh_intc.h>
|
||||
#include <asm/machvec.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
/* NOR Flash */
|
||||
static struct mtd_partition espt_nor_flash_partitions[] = {
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
#include <mach/urquell.h>
|
||||
#include <cpu/sh7786.h>
|
||||
#include <asm/heartbeat.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
#include <asm/smp-ops.h>
|
||||
|
||||
/*
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
#include <mach/microdev.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/machvec.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
static struct resource smc91x_resources[] = {
|
||||
[0] = {
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
#include <linux/io.h>
|
||||
#include <linux/bcd.h>
|
||||
#include <mach/fpga.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
#define FPGA_REGS_OFFSET 0x03fff800
|
||||
#define FPGA_REGS_SIZE 0x490
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
#include <mach/irq.h>
|
||||
#include <asm/machvec.h>
|
||||
#include <asm/heartbeat.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
#include <asm/clock.h>
|
||||
#include <asm/reboot.h>
|
||||
#include <asm/smp-ops.h>
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
#include <linux/string.h>
|
||||
#include <mach/fpga.h>
|
||||
#include <asm/sram.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
static int __init fpga_sram_init(void)
|
||||
{
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
#include <linux/interrupt.h>
|
||||
#include <linux/irqdomain.h>
|
||||
#include <linux/io.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
#include <mach-se/mach/se7343.h>
|
||||
|
||||
#define PA_CPLD_BASE_ADDR 0x11400000
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
#include <linux/irqdomain.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/err.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
#include <mach-se/mach/se7722.h>
|
||||
|
||||
#define IRQ01_BASE_ADDR 0x11800000
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
#include <linux/io.h>
|
||||
#include "pci-sh4.h"
|
||||
#include <asm/addrspace.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
static int __init __area_sdram_check(struct pci_channel *chan,
|
||||
unsigned int area)
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
#include <linux/log2.h>
|
||||
#include "pci-sh4.h"
|
||||
#include <asm/mmu.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
#if defined(CONFIG_CPU_BIG_ENDIAN)
|
||||
# define PCICR_ENDIANNESS SH4_PCICR_BSWP
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
#include <linux/sh_intc.h>
|
||||
#include <cpu/sh7786.h>
|
||||
#include "pcie-sh7786.h"
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
struct sh7786_pcie_port {
|
||||
struct pci_channel *hose;
|
||||
|
|
|
@ -18,6 +18,5 @@ generic-y += parport.h
|
|||
generic-y += percpu.h
|
||||
generic-y += preempt.h
|
||||
generic-y += serial.h
|
||||
generic-y += sizes.h
|
||||
generic-y += trace_clock.h
|
||||
generic-y += xor.h
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
#include <asm/sections.h>
|
||||
#include <asm/setup.h>
|
||||
#include <asm/cache.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
pgd_t swapper_pg_dir[PTRS_PER_PGD];
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
#include <linux/spinlock.h>
|
||||
#include <linux/vmalloc.h>
|
||||
#include <asm/cacheflush.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
#include <linux/uaccess.h>
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/page.h>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
#include <linux/init.h>
|
||||
#include <linux/module.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
#include <asm/page.h>
|
||||
#include <asm/addrspace.h>
|
||||
|
||||
|
|
|
@ -31,7 +31,6 @@ generic-y += sections.h
|
|||
generic-y += segment.h
|
||||
generic-y += serial.h
|
||||
generic-y += shmparam.h
|
||||
generic-y += sizes.h
|
||||
generic-y += syscalls.h
|
||||
generic-y += topology.h
|
||||
generic-y += trace_clock.h
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
|
||||
#include <linux/compiler.h>
|
||||
#include <linux/const.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
#include <mach/memory.h>
|
||||
|
||||
/*
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
|
||||
#include <asm/sections.h>
|
||||
#include <asm/setup.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
#include <asm/tlb.h>
|
||||
#include <asm/memblock.h>
|
||||
#include <mach/map.h>
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
#include <asm/mmu_context.h>
|
||||
#include <asm/pgalloc.h>
|
||||
#include <asm/tlbflush.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
#include <mach/map.h>
|
||||
#include "mm.h"
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
#include <asm/cputype.h>
|
||||
#include <asm/sections.h>
|
||||
#include <asm/setup.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
#include <asm/tlb.h>
|
||||
#include <asm/memblock.h>
|
||||
|
||||
|
|
|
@ -305,9 +305,6 @@ config ZONE_DMA32
|
|||
config AUDIT_ARCH
|
||||
def_bool y if X86_64
|
||||
|
||||
config ARCH_SUPPORTS_OPTIMIZED_INLINING
|
||||
def_bool y
|
||||
|
||||
config ARCH_SUPPORTS_DEBUG_PAGEALLOC
|
||||
def_bool y
|
||||
|
||||
|
|
|
@ -266,20 +266,6 @@ config CPA_DEBUG
|
|||
---help---
|
||||
Do change_page_attr() self-tests every 30 seconds.
|
||||
|
||||
config OPTIMIZE_INLINING
|
||||
bool "Allow gcc to uninline functions marked 'inline'"
|
||||
---help---
|
||||
This option determines if the kernel forces gcc to inline the functions
|
||||
developers have marked 'inline'. Doing so takes away freedom from gcc to
|
||||
do what it thinks is best, which is desirable for the gcc 3.x series of
|
||||
compilers. The gcc 4.x series have a rewritten inlining algorithm and
|
||||
enabling this option will generate a smaller kernel there. Hopefully
|
||||
this algorithm is so good that allowing gcc 4.x and above to make the
|
||||
decision will become the default in the future. Until then this option
|
||||
is there to test gcc for this.
|
||||
|
||||
If unsure, say N.
|
||||
|
||||
config DEBUG_ENTRY
|
||||
bool "Debug low-level entry code"
|
||||
depends on DEBUG_KERNEL
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
#include <linux/device.h>
|
||||
#include <linux/coredump.h>
|
||||
|
||||
#include <asm-generic/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
#include <asm/perf_event.h>
|
||||
|
||||
#include "../perf_event.h"
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
|
||||
/*
|
||||
* This file contains definitions from Hyper-V Hypervisor Top-Level Functional
|
||||
|
|
|
@ -27,7 +27,7 @@ static inline unsigned long arch_local_irq_save(void)
|
|||
{
|
||||
unsigned long flags;
|
||||
#if XTENSA_FAKE_NMI
|
||||
#if defined(CONFIG_DEBUG_KERNEL) && (LOCKLEVEL | TOPLEVEL) >= XCHAL_DEBUGLEVEL
|
||||
#if defined(CONFIG_DEBUG_MISC) && (LOCKLEVEL | TOPLEVEL) >= XCHAL_DEBUGLEVEL
|
||||
unsigned long tmp;
|
||||
|
||||
asm volatile("rsr %0, ps\t\n"
|
||||
|
|
|
@ -126,7 +126,7 @@ void secondary_start_kernel(void)
|
|||
|
||||
init_mmu();
|
||||
|
||||
#ifdef CONFIG_DEBUG_KERNEL
|
||||
#ifdef CONFIG_DEBUG_MISC
|
||||
if (boot_secondary_processors == 0) {
|
||||
pr_debug("%s: boot_secondary_processors:%d; Hanging cpu:%d\n",
|
||||
__func__, boot_secondary_processors, cpu);
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
#include <linux/types.h>
|
||||
#include <linux/of_graph.h>
|
||||
#include <linux/of_device.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
#include <linux/kthread.h>
|
||||
|
||||
#include <drm/drmP.h>
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
#include <linux/of_iommu.h>
|
||||
|
||||
#include <asm/cacheflush.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
#include "msm_iommu_hw-8xxx.h"
|
||||
#include "msm_iommu.h"
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
#include <linux/mmc/host.h>
|
||||
#include <linux/mmc/slot-gpio.h>
|
||||
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
#include <asm/unaligned.h>
|
||||
|
||||
#include "mvsdio.h"
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
#include <linux/of.h>
|
||||
#include <linux/of_device.h>
|
||||
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include <linux/platform_data/mmc-pxamci.h>
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
#include <linux/mtd/concat.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
#include <asm/mach/flash.h>
|
||||
|
||||
struct sa_subdev_info {
|
||||
|
|
|
@ -364,7 +364,7 @@ static int vf610_nfc_cmd(struct nand_chip *chip,
|
|||
{
|
||||
const struct nand_op_instr *instr;
|
||||
struct vf610_nfc *nfc = chip_to_nfc(chip);
|
||||
int op_id = -1, trfr_sz = 0, offset;
|
||||
int op_id = -1, trfr_sz = 0, offset = 0;
|
||||
u32 col = 0, row = 0, cmd1 = 0, cmd2 = 0, code = 0;
|
||||
bool force8bit = false;
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
|
||||
#include <mach/hardware.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
#include <mach/mux.h>
|
||||
#include <mach/tc.h>
|
||||
|
|
|
@ -31,19 +31,25 @@
|
|||
#include <linux/slab.h>
|
||||
#include <linux/pps_kernel.h>
|
||||
#include <linux/pps-gpio.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/of_gpio.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/jiffies.h>
|
||||
|
||||
/* Info for each registered platform device */
|
||||
struct pps_gpio_device_data {
|
||||
int irq; /* IRQ used as PPS source */
|
||||
struct pps_device *pps; /* PPS source device */
|
||||
struct pps_source_info info; /* PPS source information */
|
||||
struct gpio_desc *gpio_pin; /* GPIO port descriptors */
|
||||
struct gpio_desc *echo_pin;
|
||||
struct timer_list echo_timer; /* timer to reset echo active state */
|
||||
bool assert_falling_edge;
|
||||
bool capture_clear;
|
||||
unsigned int gpio_pin;
|
||||
unsigned int echo_active_ms; /* PPS echo active duration */
|
||||
unsigned long echo_timeout; /* timer timeout value in jiffies */
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -61,18 +67,101 @@ static irqreturn_t pps_gpio_irq_handler(int irq, void *data)
|
|||
|
||||
info = data;
|
||||
|
||||
rising_edge = gpio_get_value(info->gpio_pin);
|
||||
rising_edge = gpiod_get_value(info->gpio_pin);
|
||||
if ((rising_edge && !info->assert_falling_edge) ||
|
||||
(!rising_edge && info->assert_falling_edge))
|
||||
pps_event(info->pps, &ts, PPS_CAPTUREASSERT, NULL);
|
||||
pps_event(info->pps, &ts, PPS_CAPTUREASSERT, data);
|
||||
else if (info->capture_clear &&
|
||||
((rising_edge && info->assert_falling_edge) ||
|
||||
(!rising_edge && !info->assert_falling_edge)))
|
||||
pps_event(info->pps, &ts, PPS_CAPTURECLEAR, NULL);
|
||||
(!rising_edge && !info->assert_falling_edge)))
|
||||
pps_event(info->pps, &ts, PPS_CAPTURECLEAR, data);
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
/* This function will only be called when an ECHO GPIO is defined */
|
||||
static void pps_gpio_echo(struct pps_device *pps, int event, void *data)
|
||||
{
|
||||
/* add_timer() needs to write into info->echo_timer */
|
||||
struct pps_gpio_device_data *info = data;
|
||||
|
||||
switch (event) {
|
||||
case PPS_CAPTUREASSERT:
|
||||
if (pps->params.mode & PPS_ECHOASSERT)
|
||||
gpiod_set_value(info->echo_pin, 1);
|
||||
break;
|
||||
|
||||
case PPS_CAPTURECLEAR:
|
||||
if (pps->params.mode & PPS_ECHOCLEAR)
|
||||
gpiod_set_value(info->echo_pin, 1);
|
||||
break;
|
||||
}
|
||||
|
||||
/* fire the timer */
|
||||
if (info->pps->params.mode & (PPS_ECHOASSERT | PPS_ECHOCLEAR)) {
|
||||
info->echo_timer.expires = jiffies + info->echo_timeout;
|
||||
add_timer(&info->echo_timer);
|
||||
}
|
||||
}
|
||||
|
||||
/* Timer callback to reset the echo pin to the inactive state */
|
||||
static void pps_gpio_echo_timer_callback(struct timer_list *t)
|
||||
{
|
||||
const struct pps_gpio_device_data *info;
|
||||
|
||||
info = from_timer(info, t, echo_timer);
|
||||
|
||||
gpiod_set_value(info->echo_pin, 0);
|
||||
}
|
||||
|
||||
static int pps_gpio_setup(struct platform_device *pdev)
|
||||
{
|
||||
struct pps_gpio_device_data *data = platform_get_drvdata(pdev);
|
||||
struct device_node *np = pdev->dev.of_node;
|
||||
int ret;
|
||||
u32 value;
|
||||
|
||||
data->gpio_pin = devm_gpiod_get(&pdev->dev,
|
||||
NULL, /* request "gpios" */
|
||||
GPIOD_IN);
|
||||
if (IS_ERR(data->gpio_pin)) {
|
||||
dev_err(&pdev->dev,
|
||||
"failed to request PPS GPIO\n");
|
||||
return PTR_ERR(data->gpio_pin);
|
||||
}
|
||||
|
||||
data->echo_pin = devm_gpiod_get_optional(&pdev->dev,
|
||||
"echo",
|
||||
GPIOD_OUT_LOW);
|
||||
if (data->echo_pin) {
|
||||
if (IS_ERR(data->echo_pin)) {
|
||||
dev_err(&pdev->dev, "failed to request ECHO GPIO\n");
|
||||
return PTR_ERR(data->echo_pin);
|
||||
}
|
||||
|
||||
ret = of_property_read_u32(np,
|
||||
"echo-active-ms",
|
||||
&value);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev,
|
||||
"failed to get echo-active-ms from OF\n");
|
||||
return ret;
|
||||
}
|
||||
data->echo_active_ms = value;
|
||||
/* sanity check on echo_active_ms */
|
||||
if (!data->echo_active_ms || data->echo_active_ms > 999) {
|
||||
dev_err(&pdev->dev,
|
||||
"echo-active-ms: %u - bad value from OF\n",
|
||||
data->echo_active_ms);
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
if (of_property_read_bool(np, "assert-falling-edge"))
|
||||
data->assert_falling_edge = true;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static unsigned long
|
||||
get_irqf_trigger_flags(const struct pps_gpio_device_data *data)
|
||||
{
|
||||
|
@ -90,53 +179,32 @@ get_irqf_trigger_flags(const struct pps_gpio_device_data *data)
|
|||
static int pps_gpio_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct pps_gpio_device_data *data;
|
||||
const char *gpio_label;
|
||||
int ret;
|
||||
int pps_default_params;
|
||||
const struct pps_gpio_platform_data *pdata = pdev->dev.platform_data;
|
||||
struct device_node *np = pdev->dev.of_node;
|
||||
|
||||
/* allocate space for device info */
|
||||
data = devm_kzalloc(&pdev->dev, sizeof(struct pps_gpio_device_data),
|
||||
GFP_KERNEL);
|
||||
data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL);
|
||||
if (!data)
|
||||
return -ENOMEM;
|
||||
platform_set_drvdata(pdev, data);
|
||||
|
||||
/* GPIO setup */
|
||||
if (pdata) {
|
||||
data->gpio_pin = pdata->gpio_pin;
|
||||
gpio_label = pdata->gpio_label;
|
||||
data->echo_pin = pdata->echo_pin;
|
||||
|
||||
data->assert_falling_edge = pdata->assert_falling_edge;
|
||||
data->capture_clear = pdata->capture_clear;
|
||||
data->echo_active_ms = pdata->echo_active_ms;
|
||||
} else {
|
||||
ret = of_get_gpio(np, 0);
|
||||
if (ret < 0) {
|
||||
dev_err(&pdev->dev, "failed to get GPIO from device tree\n");
|
||||
return ret;
|
||||
}
|
||||
data->gpio_pin = ret;
|
||||
gpio_label = PPS_GPIO_NAME;
|
||||
|
||||
if (of_get_property(np, "assert-falling-edge", NULL))
|
||||
data->assert_falling_edge = true;
|
||||
}
|
||||
|
||||
/* GPIO setup */
|
||||
ret = devm_gpio_request(&pdev->dev, data->gpio_pin, gpio_label);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "failed to request GPIO %u\n",
|
||||
data->gpio_pin);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = gpio_direction_input(data->gpio_pin);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "failed to set pin direction\n");
|
||||
return -EINVAL;
|
||||
ret = pps_gpio_setup(pdev);
|
||||
if (ret)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* IRQ setup */
|
||||
ret = gpio_to_irq(data->gpio_pin);
|
||||
ret = gpiod_to_irq(data->gpio_pin);
|
||||
if (ret < 0) {
|
||||
dev_err(&pdev->dev, "failed to map GPIO to IRQ: %d\n", ret);
|
||||
return -EINVAL;
|
||||
|
@ -152,6 +220,11 @@ static int pps_gpio_probe(struct platform_device *pdev)
|
|||
data->info.owner = THIS_MODULE;
|
||||
snprintf(data->info.name, PPS_MAX_NAME_LEN - 1, "%s.%d",
|
||||
pdev->name, pdev->id);
|
||||
if (data->echo_pin) {
|
||||
data->info.echo = pps_gpio_echo;
|
||||
data->echo_timeout = msecs_to_jiffies(data->echo_active_ms);
|
||||
timer_setup(&data->echo_timer, pps_gpio_echo_timer_callback, 0);
|
||||
}
|
||||
|
||||
/* register PPS source */
|
||||
pps_default_params = PPS_CAPTUREASSERT | PPS_OFFSETASSERT;
|
||||
|
@ -173,7 +246,6 @@ static int pps_gpio_probe(struct platform_device *pdev)
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
platform_set_drvdata(pdev, data);
|
||||
dev_info(data->pps->dev, "Registered IRQ %d as PPS source\n",
|
||||
data->irq);
|
||||
|
||||
|
@ -185,6 +257,11 @@ static int pps_gpio_remove(struct platform_device *pdev)
|
|||
struct pps_gpio_device_data *data = platform_get_drvdata(pdev);
|
||||
|
||||
pps_unregister_source(data->pps);
|
||||
if (data->echo_pin) {
|
||||
del_timer_sync(&data->echo_timer);
|
||||
/* reset echo pin in any case */
|
||||
gpiod_set_value(data->echo_pin, 0);
|
||||
}
|
||||
dev_info(&pdev->dev, "removed IRQ %d as PPS source\n", data->irq);
|
||||
return 0;
|
||||
}
|
||||
|
@ -209,4 +286,4 @@ MODULE_AUTHOR("Ricardo Martins <rasm@fe.up.pt>");
|
|||
MODULE_AUTHOR("James Nuss <jamesnuss@nanometrics.ca>");
|
||||
MODULE_DESCRIPTION("Use GPIO pin as PPS source");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_VERSION("1.0.0");
|
||||
MODULE_VERSION("1.2.0");
|
||||
|
|
|
@ -2147,6 +2147,14 @@ static int riocm_add_mport(struct device *dev,
|
|||
mutex_init(&cm->rx_lock);
|
||||
riocm_rx_fill(cm, RIOCM_RX_RING_SIZE);
|
||||
cm->rx_wq = create_workqueue(DRV_NAME "/rxq");
|
||||
if (!cm->rx_wq) {
|
||||
riocm_error("failed to allocate IBMBOX_%d on %s",
|
||||
cmbox, mport->name);
|
||||
rio_release_outb_mbox(mport, cmbox);
|
||||
kfree(cm);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
INIT_WORK(&cm->rx_work, rio_ibmsg_handler);
|
||||
|
||||
cm->tx_slot = 0;
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
#include <linux/init.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/stat.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/sizes.h>
|
||||
#include "internals.h"
|
||||
|
||||
static void __iomem *uimask;
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
|
||||
#include <linux/clk.h>
|
||||
#include <linux/dmaengine.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/pinctrl/consumer.h>
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue