mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-10 04:48:04 +09:00
Merge tag 'v4.9.163' of git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable into odroidn2-4.9.y
This is the 4.9.163 stable release Change-Id: I09b88b7e992eff33b41bb8872cd9d06fe9d65a75
This commit is contained in:
@@ -41,6 +41,24 @@ static inline bool drm_arch_can_wc_memory(void)
|
||||
return false;
|
||||
#elif defined(CONFIG_MIPS) && defined(CONFIG_CPU_LOONGSON3)
|
||||
return false;
|
||||
#elif defined(CONFIG_ARM) || defined(CONFIG_ARM64)
|
||||
/*
|
||||
* The DRM driver stack is designed to work with cache coherent devices
|
||||
* only, but permits an optimization to be enabled in some cases, where
|
||||
* for some buffers, both the CPU and the GPU use uncached mappings,
|
||||
* removing the need for DMA snooping and allocation in the CPU caches.
|
||||
*
|
||||
* The use of uncached GPU mappings relies on the correct implementation
|
||||
* of the PCIe NoSnoop TLP attribute by the platform, otherwise the GPU
|
||||
* will use cached mappings nonetheless. On x86 platforms, this does not
|
||||
* seem to matter, as uncached CPU mappings will snoop the caches in any
|
||||
* case. However, on ARM and arm64, enabling this optimization on a
|
||||
* platform where NoSnoop is ignored results in loss of coherency, which
|
||||
* breaks correct operation of the device. Since we have no way of
|
||||
* detecting whether NoSnoop works or not, just disable this
|
||||
* optimization entirely for ARM and arm64.
|
||||
*/
|
||||
return false;
|
||||
#else
|
||||
return true;
|
||||
#endif
|
||||
|
||||
@@ -243,20 +243,12 @@ __ATTR(_name, _perm, show_##_name, NULL)
|
||||
static struct freq_attr _name = \
|
||||
__ATTR(_name, 0644, show_##_name, store_##_name)
|
||||
|
||||
struct global_attr {
|
||||
struct attribute attr;
|
||||
ssize_t (*show)(struct kobject *kobj,
|
||||
struct attribute *attr, char *buf);
|
||||
ssize_t (*store)(struct kobject *a, struct attribute *b,
|
||||
const char *c, size_t count);
|
||||
};
|
||||
|
||||
#define define_one_global_ro(_name) \
|
||||
static struct global_attr _name = \
|
||||
static struct kobj_attribute _name = \
|
||||
__ATTR(_name, 0444, show_##_name, NULL)
|
||||
|
||||
#define define_one_global_rw(_name) \
|
||||
static struct global_attr _name = \
|
||||
static struct kobj_attribute _name = \
|
||||
__ATTR(_name, 0644, show_##_name, store_##_name)
|
||||
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
|
||||
#include <net/inet_sock.h>
|
||||
#include <net/snmp.h>
|
||||
#include <net/ip.h>
|
||||
|
||||
struct icmp_err {
|
||||
int errno;
|
||||
@@ -39,7 +40,13 @@ struct net_proto_family;
|
||||
struct sk_buff;
|
||||
struct net;
|
||||
|
||||
void icmp_send(struct sk_buff *skb_in, int type, int code, __be32 info);
|
||||
void __icmp_send(struct sk_buff *skb_in, int type, int code, __be32 info,
|
||||
const struct ip_options *opt);
|
||||
static inline void icmp_send(struct sk_buff *skb_in, int type, int code, __be32 info)
|
||||
{
|
||||
__icmp_send(skb_in, type, code, info, &IPCB(skb_in)->opt);
|
||||
}
|
||||
|
||||
int icmp_rcv(struct sk_buff *skb);
|
||||
void icmp_err(struct sk_buff *skb, u32 info);
|
||||
int icmp_init(void);
|
||||
|
||||
@@ -571,6 +571,8 @@ static inline int ip_options_echo(struct ip_options *dopt, struct sk_buff *skb)
|
||||
}
|
||||
|
||||
void ip_options_fragment(struct sk_buff *skb);
|
||||
int __ip_options_compile(struct net *net, struct ip_options *opt,
|
||||
struct sk_buff *skb, __be32 *info);
|
||||
int ip_options_compile(struct net *net, struct ip_options *opt,
|
||||
struct sk_buff *skb);
|
||||
int ip_options_get(struct net *net, struct ip_options_rcu **optp,
|
||||
|
||||
Reference in New Issue
Block a user