mirror of
https://github.com/rd-stuffs/msm-4.14.git
synced 2025-02-20 11:45:48 +08:00
This is the 4.14.144 stable release
-----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAl1/Kb4ACgkQONu9yGCS aT5i2w//RrCkq8zV+BuqYz8OWv4dVuGfH+nhvTmo2Y9puaD486TviUHMvJDby/t9 DNWhRssVPMWhyfNZN9pW3qu93+g9U+sr7PCLbhSaYa1AaCdQQ5U0BszW9nAgfkOA GRFaIOhmjhL6AheqiwWacdNczdRCCGtiyHsj+yDLsyPkdS44UKBPQs4G7SbMA90W /Pa2d3xuW8WrOGAyh+pQHH/6KmK+djyjpTlJ7bnJlCPjpAnnWrGMjtAGihA3hz5i XnmOIUNz0P9/F5JcAPxuMSKb5UxRpuof1VYk6+jLY21BA5ouDARJG2gtHke+RZVR BTLgrn6/jPfHSjv5+AlyloL1RL2Hh6m/aePq+wdWx+usbyDvFbLkiD8+oSvM71xs /Ht1PhrJ7EbKKgV5KjVQ7zS73pELUBsAP5okNy/etz+SuVDDuAyaFIIUIpqSzvYM fyPk1LRdydwNTXYApWj8WWtkwqF0Mibh4TOIVhVi2tUMJHsO9E0aX+cysj8RP7/K k7FkUUBxvc3ylK1v6Y90q/OtHYpkTaakRS1j3QB6pDaA5hw3pp/CDnyO0wpqQGv4 4CK+IVnZ3+QSmHVzOWmh1XpH9SzhGwMGsRv9YI+YmwtIRRlJWpLEOfslzc1bNh7/ QF7uKKerDZqC3jP5Vy2AddDetuTPcvsD6+fCqcijJoxj7dFYcb4= =7rmS -----END PGP SIGNATURE----- Merge 4.14.144 into android-4.14-q Changes in 4.14.144 ALSA: hda - Fix potential endless loop at applying quirks ALSA: hda/realtek - Fix overridden device-specific initialization ALSA: hda/realtek - Fix the problem of two front mics on a ThinkCentre sched/fair: Don't assign runtime for throttled cfs_rq drm/vmwgfx: Fix double free in vmw_recv_msg() powerpc/tm: Fix FP/VMX unavailable exceptions inside a transaction xfrm: clean up xfrm protocol checks ip6: fix skb leak in ip6frag_expire_frag_queue() PCI: designware-ep: Fix find_first_zero_bit() usage PCI: dra7xx: Fix legacy INTD IRQ handling vhost/test: fix build for vhost test batman-adv: fix uninit-value in batadv_netlink_get_ifindex() batman-adv: Only read OGM tvlv_len after buffer len check hv_sock: Fix hang when a connection is closed powerpc/64: mark start_here_multiplatform as __ref arm64: dts: rockchip: enable usb-host regulators at boot on rk3328-rock64 scripts/decode_stacktrace: match basepath using shell prefix operator, not regex clk: s2mps11: Add used attribute to s2mps11_dt_match kernel/module: Fix mem leak in module_add_modinfo_attrs vhost: make sure log_num < in_num Linux 4.14.144 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
commit
aee6850a25
2
Makefile
2
Makefile
@ -1,7 +1,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
VERSION = 4
|
||||
PATCHLEVEL = 14
|
||||
SUBLEVEL = 143
|
||||
SUBLEVEL = 144
|
||||
EXTRAVERSION =
|
||||
NAME = Petit Gorille
|
||||
|
||||
|
@ -77,6 +77,7 @@
|
||||
pinctrl-0 = <&usb30_host_drv>;
|
||||
regulator-name = "vcc_host_5v";
|
||||
regulator-always-on;
|
||||
regulator-boot-on;
|
||||
vin-supply = <&vcc_sys>;
|
||||
};
|
||||
|
||||
@ -87,6 +88,7 @@
|
||||
pinctrl-0 = <&usb20_host_drv>;
|
||||
regulator-name = "vcc_host1_5v";
|
||||
regulator-always-on;
|
||||
regulator-boot-on;
|
||||
vin-supply = <&vcc_sys>;
|
||||
};
|
||||
|
||||
|
@ -897,6 +897,7 @@ p_toc: .8byte __toc_start + 0x8000 - 0b
|
||||
/*
|
||||
* This is where the main kernel code starts.
|
||||
*/
|
||||
__REF
|
||||
start_here_multiplatform:
|
||||
/* set up the TOC */
|
||||
bl relative_toc
|
||||
@ -972,6 +973,7 @@ start_here_multiplatform:
|
||||
RFI
|
||||
b . /* prevent speculative execution */
|
||||
|
||||
.previous
|
||||
/* This is where all platforms converge execution */
|
||||
|
||||
start_here_common:
|
||||
|
@ -475,13 +475,14 @@ void giveup_all(struct task_struct *tsk)
|
||||
if (!tsk->thread.regs)
|
||||
return;
|
||||
|
||||
check_if_tm_restore_required(tsk);
|
||||
|
||||
usermsr = tsk->thread.regs->msr;
|
||||
|
||||
if ((usermsr & msr_all_available) == 0)
|
||||
return;
|
||||
|
||||
msr_check_and_set(msr_all_available);
|
||||
check_if_tm_restore_required(tsk);
|
||||
|
||||
WARN_ON((usermsr & MSR_VSX) && !((usermsr & MSR_FP) && (usermsr & MSR_VEC)));
|
||||
|
||||
|
@ -255,7 +255,7 @@ MODULE_DEVICE_TABLE(platform, s2mps11_clk_id);
|
||||
* This requires of_device_id table. In the same time this will not change the
|
||||
* actual *device* matching so do not add .of_match_table.
|
||||
*/
|
||||
static const struct of_device_id s2mps11_dt_match[] = {
|
||||
static const struct of_device_id s2mps11_dt_match[] __used = {
|
||||
{
|
||||
.compatible = "samsung,s2mps11-clk",
|
||||
.data = (void *)S2MPS11X,
|
||||
|
@ -264,7 +264,7 @@ static int vmw_recv_msg(struct rpc_channel *channel, void **msg,
|
||||
|
||||
if ((HIGH_WORD(ebx) & MESSAGE_STATUS_SUCCESS) == 0) {
|
||||
kfree(reply);
|
||||
|
||||
reply = NULL;
|
||||
if ((HIGH_WORD(ebx) & MESSAGE_STATUS_CPT) != 0) {
|
||||
/* A checkpoint occurred. Retry. */
|
||||
continue;
|
||||
@ -288,7 +288,7 @@ static int vmw_recv_msg(struct rpc_channel *channel, void **msg,
|
||||
|
||||
if ((HIGH_WORD(ecx) & MESSAGE_STATUS_SUCCESS) == 0) {
|
||||
kfree(reply);
|
||||
|
||||
reply = NULL;
|
||||
if ((HIGH_WORD(ecx) & MESSAGE_STATUS_CPT) != 0) {
|
||||
/* A checkpoint occurred. Retry. */
|
||||
continue;
|
||||
@ -300,10 +300,8 @@ static int vmw_recv_msg(struct rpc_channel *channel, void **msg,
|
||||
break;
|
||||
}
|
||||
|
||||
if (retries == RETRIES) {
|
||||
kfree(reply);
|
||||
if (!reply)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
*msg_len = reply_len;
|
||||
*msg = reply;
|
||||
|
@ -227,6 +227,7 @@ static int dra7xx_pcie_intx_map(struct irq_domain *domain, unsigned int irq,
|
||||
|
||||
static const struct irq_domain_ops intx_domain_ops = {
|
||||
.map = dra7xx_pcie_intx_map,
|
||||
.xlate = pci_irqd_intx_xlate,
|
||||
};
|
||||
|
||||
static int dra7xx_pcie_init_irq_domain(struct pcie_port *pp)
|
||||
@ -270,7 +271,7 @@ static irqreturn_t dra7xx_pcie_msi_irq_handler(int irq, void *arg)
|
||||
case INTC:
|
||||
case INTD:
|
||||
generic_handle_irq(irq_find_mapping(dra7xx->irq_domain,
|
||||
ffs(reg)));
|
||||
ffs(reg) - 1));
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -74,8 +74,7 @@ static int dw_pcie_ep_inbound_atu(struct dw_pcie_ep *ep, enum pci_barno bar,
|
||||
u32 free_win;
|
||||
struct dw_pcie *pci = to_dw_pcie_from_ep(ep);
|
||||
|
||||
free_win = find_first_zero_bit(&ep->ib_window_map,
|
||||
sizeof(ep->ib_window_map));
|
||||
free_win = find_first_zero_bit(ep->ib_window_map, ep->num_ib_windows);
|
||||
if (free_win >= ep->num_ib_windows) {
|
||||
dev_err(pci->dev, "no free inbound window\n");
|
||||
return -EINVAL;
|
||||
@ -89,7 +88,7 @@ static int dw_pcie_ep_inbound_atu(struct dw_pcie_ep *ep, enum pci_barno bar,
|
||||
}
|
||||
|
||||
ep->bar_to_atu[bar] = free_win;
|
||||
set_bit(free_win, &ep->ib_window_map);
|
||||
set_bit(free_win, ep->ib_window_map);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -100,8 +99,7 @@ static int dw_pcie_ep_outbound_atu(struct dw_pcie_ep *ep, phys_addr_t phys_addr,
|
||||
u32 free_win;
|
||||
struct dw_pcie *pci = to_dw_pcie_from_ep(ep);
|
||||
|
||||
free_win = find_first_zero_bit(&ep->ob_window_map,
|
||||
sizeof(ep->ob_window_map));
|
||||
free_win = find_first_zero_bit(ep->ob_window_map, ep->num_ob_windows);
|
||||
if (free_win >= ep->num_ob_windows) {
|
||||
dev_err(pci->dev, "no free outbound window\n");
|
||||
return -EINVAL;
|
||||
@ -110,7 +108,7 @@ static int dw_pcie_ep_outbound_atu(struct dw_pcie_ep *ep, phys_addr_t phys_addr,
|
||||
dw_pcie_prog_outbound_atu(pci, free_win, PCIE_ATU_TYPE_MEM,
|
||||
phys_addr, pci_addr, size);
|
||||
|
||||
set_bit(free_win, &ep->ob_window_map);
|
||||
set_bit(free_win, ep->ob_window_map);
|
||||
ep->outbound_addr[free_win] = phys_addr;
|
||||
|
||||
return 0;
|
||||
@ -125,7 +123,7 @@ static void dw_pcie_ep_clear_bar(struct pci_epc *epc, enum pci_barno bar)
|
||||
dw_pcie_ep_reset_bar(pci, bar);
|
||||
|
||||
dw_pcie_disable_atu(pci, atu_index, DW_PCIE_REGION_INBOUND);
|
||||
clear_bit(atu_index, &ep->ib_window_map);
|
||||
clear_bit(atu_index, ep->ib_window_map);
|
||||
}
|
||||
|
||||
static int dw_pcie_ep_set_bar(struct pci_epc *epc, enum pci_barno bar,
|
||||
@ -181,7 +179,7 @@ static void dw_pcie_ep_unmap_addr(struct pci_epc *epc, phys_addr_t addr)
|
||||
return;
|
||||
|
||||
dw_pcie_disable_atu(pci, atu_index, DW_PCIE_REGION_OUTBOUND);
|
||||
clear_bit(atu_index, &ep->ob_window_map);
|
||||
clear_bit(atu_index, ep->ob_window_map);
|
||||
}
|
||||
|
||||
static int dw_pcie_ep_map_addr(struct pci_epc *epc, phys_addr_t addr,
|
||||
@ -302,12 +300,32 @@ int dw_pcie_ep_init(struct dw_pcie_ep *ep)
|
||||
dev_err(dev, "unable to read *num-ib-windows* property\n");
|
||||
return ret;
|
||||
}
|
||||
if (ep->num_ib_windows > MAX_IATU_IN) {
|
||||
dev_err(dev, "invalid *num-ib-windows*\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ret = of_property_read_u32(np, "num-ob-windows", &ep->num_ob_windows);
|
||||
if (ret < 0) {
|
||||
dev_err(dev, "unable to read *num-ob-windows* property\n");
|
||||
return ret;
|
||||
}
|
||||
if (ep->num_ob_windows > MAX_IATU_OUT) {
|
||||
dev_err(dev, "invalid *num-ob-windows*\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ep->ib_window_map = devm_kzalloc(dev, sizeof(long) *
|
||||
BITS_TO_LONGS(ep->num_ib_windows),
|
||||
GFP_KERNEL);
|
||||
if (!ep->ib_window_map)
|
||||
return -ENOMEM;
|
||||
|
||||
ep->ob_window_map = devm_kzalloc(dev, sizeof(long) *
|
||||
BITS_TO_LONGS(ep->num_ob_windows),
|
||||
GFP_KERNEL);
|
||||
if (!ep->ob_window_map)
|
||||
return -ENOMEM;
|
||||
|
||||
addr = devm_kzalloc(dev, sizeof(phys_addr_t) * ep->num_ob_windows,
|
||||
GFP_KERNEL);
|
||||
|
@ -114,6 +114,10 @@
|
||||
#define MAX_MSI_IRQS 32
|
||||
#define MAX_MSI_CTRLS (MAX_MSI_IRQS / 32)
|
||||
|
||||
/* Maximum number of inbound/outbound iATUs */
|
||||
#define MAX_IATU_IN 256
|
||||
#define MAX_IATU_OUT 256
|
||||
|
||||
struct pcie_port;
|
||||
struct dw_pcie;
|
||||
struct dw_pcie_ep;
|
||||
@ -193,8 +197,8 @@ struct dw_pcie_ep {
|
||||
size_t page_size;
|
||||
u8 bar_to_atu[6];
|
||||
phys_addr_t *outbound_addr;
|
||||
unsigned long ib_window_map;
|
||||
unsigned long ob_window_map;
|
||||
unsigned long *ib_window_map;
|
||||
unsigned long *ob_window_map;
|
||||
u32 num_ib_windows;
|
||||
u32 num_ob_windows;
|
||||
};
|
||||
|
@ -23,6 +23,12 @@
|
||||
* Using this limit prevents one virtqueue from starving others. */
|
||||
#define VHOST_TEST_WEIGHT 0x80000
|
||||
|
||||
/* Max number of packets transferred before requeueing the job.
|
||||
* Using this limit prevents one virtqueue from starving others with
|
||||
* pkts.
|
||||
*/
|
||||
#define VHOST_TEST_PKT_WEIGHT 256
|
||||
|
||||
enum {
|
||||
VHOST_TEST_VQ = 0,
|
||||
VHOST_TEST_VQ_MAX = 1,
|
||||
@ -81,10 +87,8 @@ static void handle_vq(struct vhost_test *n)
|
||||
}
|
||||
vhost_add_used_and_signal(&n->dev, vq, head, 0);
|
||||
total_len += len;
|
||||
if (unlikely(total_len >= VHOST_TEST_WEIGHT)) {
|
||||
vhost_poll_queue(&vq->poll);
|
||||
if (unlikely(vhost_exceeds_weight(vq, 0, total_len)))
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
mutex_unlock(&vq->mutex);
|
||||
@ -116,7 +120,8 @@ static int vhost_test_open(struct inode *inode, struct file *f)
|
||||
dev = &n->dev;
|
||||
vqs[VHOST_TEST_VQ] = &n->vqs[VHOST_TEST_VQ];
|
||||
n->vqs[VHOST_TEST_VQ].handle_kick = handle_vq_kick;
|
||||
vhost_dev_init(dev, vqs, VHOST_TEST_VQ_MAX);
|
||||
vhost_dev_init(dev, vqs, VHOST_TEST_VQ_MAX,
|
||||
VHOST_TEST_PKT_WEIGHT, VHOST_TEST_WEIGHT);
|
||||
|
||||
f->private_data = n;
|
||||
|
||||
|
@ -2066,7 +2066,7 @@ static int get_indirect(struct vhost_virtqueue *vq,
|
||||
/* If this is an input descriptor, increment that count. */
|
||||
if (access == VHOST_ACCESS_WO) {
|
||||
*in_num += ret;
|
||||
if (unlikely(log)) {
|
||||
if (unlikely(log && ret)) {
|
||||
log[*log_num].addr = vhost64_to_cpu(vq, desc.addr);
|
||||
log[*log_num].len = vhost32_to_cpu(vq, desc.len);
|
||||
++*log_num;
|
||||
@ -2209,7 +2209,7 @@ int vhost_get_vq_desc(struct vhost_virtqueue *vq,
|
||||
/* If this is an input descriptor,
|
||||
* increment that count. */
|
||||
*in_num += ret;
|
||||
if (unlikely(log)) {
|
||||
if (unlikely(log && ret)) {
|
||||
log[*log_num].addr = vhost64_to_cpu(vq, desc.addr);
|
||||
log[*log_num].len = vhost32_to_cpu(vq, desc.len);
|
||||
++*log_num;
|
||||
|
@ -94,7 +94,6 @@ ip6frag_expire_frag_queue(struct net *net, struct frag_queue *fq)
|
||||
goto out;
|
||||
|
||||
head->dev = dev;
|
||||
skb_get(head);
|
||||
spin_unlock(&fq->q.lock);
|
||||
|
||||
icmpv6_send(head, ICMPV6_TIME_EXCEED, ICMPV6_EXC_FRAGTIME, 0);
|
||||
|
@ -1392,6 +1392,23 @@ static inline int xfrm_state_kern(const struct xfrm_state *x)
|
||||
return atomic_read(&x->tunnel_users);
|
||||
}
|
||||
|
||||
static inline bool xfrm_id_proto_valid(u8 proto)
|
||||
{
|
||||
switch (proto) {
|
||||
case IPPROTO_AH:
|
||||
case IPPROTO_ESP:
|
||||
case IPPROTO_COMP:
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
case IPPROTO_ROUTING:
|
||||
case IPPROTO_DSTOPTS:
|
||||
#endif
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/* IPSEC_PROTO_ANY only matches 3 IPsec protocols, 0 could match all. */
|
||||
static inline int xfrm_id_proto_match(u8 proto, u8 userproto)
|
||||
{
|
||||
return (!userproto || proto == userproto ||
|
||||
|
@ -1695,6 +1695,8 @@ static int add_usage_links(struct module *mod)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void module_remove_modinfo_attrs(struct module *mod, int end);
|
||||
|
||||
static int module_add_modinfo_attrs(struct module *mod)
|
||||
{
|
||||
struct module_attribute *attr;
|
||||
@ -1709,24 +1711,34 @@ static int module_add_modinfo_attrs(struct module *mod)
|
||||
return -ENOMEM;
|
||||
|
||||
temp_attr = mod->modinfo_attrs;
|
||||
for (i = 0; (attr = modinfo_attrs[i]) && !error; i++) {
|
||||
for (i = 0; (attr = modinfo_attrs[i]); i++) {
|
||||
if (!attr->test || attr->test(mod)) {
|
||||
memcpy(temp_attr, attr, sizeof(*temp_attr));
|
||||
sysfs_attr_init(&temp_attr->attr);
|
||||
error = sysfs_create_file(&mod->mkobj.kobj,
|
||||
&temp_attr->attr);
|
||||
if (error)
|
||||
goto error_out;
|
||||
++temp_attr;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
error_out:
|
||||
if (i > 0)
|
||||
module_remove_modinfo_attrs(mod, --i);
|
||||
return error;
|
||||
}
|
||||
|
||||
static void module_remove_modinfo_attrs(struct module *mod)
|
||||
static void module_remove_modinfo_attrs(struct module *mod, int end)
|
||||
{
|
||||
struct module_attribute *attr;
|
||||
int i;
|
||||
|
||||
for (i = 0; (attr = &mod->modinfo_attrs[i]); i++) {
|
||||
if (end >= 0 && i > end)
|
||||
break;
|
||||
/* pick a field to test for end of list */
|
||||
if (!attr->attr.name)
|
||||
break;
|
||||
@ -1814,7 +1826,7 @@ static int mod_sysfs_setup(struct module *mod,
|
||||
return 0;
|
||||
|
||||
out_unreg_modinfo_attrs:
|
||||
module_remove_modinfo_attrs(mod);
|
||||
module_remove_modinfo_attrs(mod, -1);
|
||||
out_unreg_param:
|
||||
module_param_sysfs_remove(mod);
|
||||
out_unreg_holders:
|
||||
@ -1850,7 +1862,7 @@ static void mod_sysfs_fini(struct module *mod)
|
||||
{
|
||||
}
|
||||
|
||||
static void module_remove_modinfo_attrs(struct module *mod)
|
||||
static void module_remove_modinfo_attrs(struct module *mod, int end)
|
||||
{
|
||||
}
|
||||
|
||||
@ -1866,7 +1878,7 @@ static void init_param_lock(struct module *mod)
|
||||
static void mod_sysfs_teardown(struct module *mod)
|
||||
{
|
||||
del_usage_links(mod);
|
||||
module_remove_modinfo_attrs(mod);
|
||||
module_remove_modinfo_attrs(mod, -1);
|
||||
module_param_sysfs_remove(mod);
|
||||
kobject_put(mod->mkobj.drivers_dir);
|
||||
kobject_put(mod->holders_dir);
|
||||
|
@ -4468,6 +4468,8 @@ static void __account_cfs_rq_runtime(struct cfs_rq *cfs_rq, u64 delta_exec)
|
||||
if (likely(cfs_rq->runtime_remaining > 0))
|
||||
return;
|
||||
|
||||
if (cfs_rq->throttled)
|
||||
return;
|
||||
/*
|
||||
* if we're unable to extend our runtime we resched so that the active
|
||||
* hierarchy can be throttled
|
||||
@ -4664,6 +4666,9 @@ static u64 distribute_cfs_runtime(struct cfs_bandwidth *cfs_b,
|
||||
if (!cfs_rq_throttled(cfs_rq))
|
||||
goto next;
|
||||
|
||||
/* By the above check, this should never be true */
|
||||
SCHED_WARN_ON(cfs_rq->runtime_remaining > 0);
|
||||
|
||||
runtime = -cfs_rq->runtime_remaining + 1;
|
||||
if (runtime > remaining)
|
||||
runtime = remaining;
|
||||
|
@ -450,17 +450,23 @@ static u8 batadv_hop_penalty(u8 tq, const struct batadv_priv *bat_priv)
|
||||
* batadv_iv_ogm_aggr_packet - checks if there is another OGM attached
|
||||
* @buff_pos: current position in the skb
|
||||
* @packet_len: total length of the skb
|
||||
* @tvlv_len: tvlv length of the previously considered OGM
|
||||
* @ogm_packet: potential OGM in buffer
|
||||
*
|
||||
* Return: true if there is enough space for another OGM, false otherwise.
|
||||
*/
|
||||
static bool batadv_iv_ogm_aggr_packet(int buff_pos, int packet_len,
|
||||
__be16 tvlv_len)
|
||||
static bool
|
||||
batadv_iv_ogm_aggr_packet(int buff_pos, int packet_len,
|
||||
const struct batadv_ogm_packet *ogm_packet)
|
||||
{
|
||||
int next_buff_pos = 0;
|
||||
|
||||
next_buff_pos += buff_pos + BATADV_OGM_HLEN;
|
||||
next_buff_pos += ntohs(tvlv_len);
|
||||
/* check if there is enough space for the header */
|
||||
next_buff_pos += buff_pos + sizeof(*ogm_packet);
|
||||
if (next_buff_pos > packet_len)
|
||||
return false;
|
||||
|
||||
/* check if there is enough space for the optional TVLV */
|
||||
next_buff_pos += ntohs(ogm_packet->tvlv_len);
|
||||
|
||||
return (next_buff_pos <= packet_len) &&
|
||||
(next_buff_pos <= BATADV_MAX_AGGREGATION_BYTES);
|
||||
@ -488,7 +494,7 @@ static void batadv_iv_ogm_send_to_if(struct batadv_forw_packet *forw_packet,
|
||||
|
||||
/* adjust all flags and log packets */
|
||||
while (batadv_iv_ogm_aggr_packet(buff_pos, forw_packet->packet_len,
|
||||
batadv_ogm_packet->tvlv_len)) {
|
||||
batadv_ogm_packet)) {
|
||||
/* we might have aggregated direct link packets with an
|
||||
* ordinary base packet
|
||||
*/
|
||||
@ -1838,7 +1844,7 @@ static int batadv_iv_ogm_receive(struct sk_buff *skb,
|
||||
|
||||
/* unpack the aggregated packets and process them one by one */
|
||||
while (batadv_iv_ogm_aggr_packet(ogm_offset, skb_headlen(skb),
|
||||
ogm_packet->tvlv_len)) {
|
||||
ogm_packet)) {
|
||||
batadv_iv_ogm_process(skb, ogm_offset, if_incoming);
|
||||
|
||||
ogm_offset += BATADV_OGM_HLEN;
|
||||
|
@ -110,7 +110,7 @@ batadv_netlink_get_ifindex(const struct nlmsghdr *nlh, int attrtype)
|
||||
{
|
||||
struct nlattr *attr = nlmsg_find_attr(nlh, GENL_HDRLEN, attrtype);
|
||||
|
||||
return attr ? nla_get_u32(attr) : 0;
|
||||
return (attr && nla_len(attr) == sizeof(u32)) ? nla_get_u32(attr) : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1951,8 +1951,10 @@ parse_ipsecrequest(struct xfrm_policy *xp, struct sadb_x_ipsecrequest *rq)
|
||||
|
||||
if (rq->sadb_x_ipsecrequest_mode == 0)
|
||||
return -EINVAL;
|
||||
if (!xfrm_id_proto_valid(rq->sadb_x_ipsecrequest_proto))
|
||||
return -EINVAL;
|
||||
|
||||
t->id.proto = rq->sadb_x_ipsecrequest_proto; /* XXX check proto */
|
||||
t->id.proto = rq->sadb_x_ipsecrequest_proto;
|
||||
if ((mode = pfkey_mode_to_xfrm(rq->sadb_x_ipsecrequest_mode)) < 0)
|
||||
return -EINVAL;
|
||||
t->mode = mode;
|
||||
|
@ -320,6 +320,11 @@ static void hvs_close_connection(struct vmbus_channel *chan)
|
||||
lock_sock(sk);
|
||||
hvs_do_close_lock_held(vsock_sk(sk), true);
|
||||
release_sock(sk);
|
||||
|
||||
/* Release the refcnt for the channel that's opened in
|
||||
* hvs_open_connection().
|
||||
*/
|
||||
sock_put(sk);
|
||||
}
|
||||
|
||||
static void hvs_open_connection(struct vmbus_channel *chan)
|
||||
@ -389,6 +394,9 @@ static void hvs_open_connection(struct vmbus_channel *chan)
|
||||
}
|
||||
|
||||
set_per_channel_state(chan, conn_from_host ? new : sk);
|
||||
|
||||
/* This reference will be dropped by hvs_close_connection(). */
|
||||
sock_hold(conn_from_host ? new : sk);
|
||||
vmbus_set_chn_rescind_callback(chan, hvs_close_connection);
|
||||
|
||||
/* Set the pending send size to max packet size to always get
|
||||
|
@ -2346,7 +2346,7 @@ void xfrm_state_fini(struct net *net)
|
||||
unsigned int sz;
|
||||
|
||||
flush_work(&net->xfrm.state_hash_work);
|
||||
xfrm_state_flush(net, IPSEC_PROTO_ANY, false);
|
||||
xfrm_state_flush(net, 0, false);
|
||||
flush_work(&xfrm_state_gc_work);
|
||||
|
||||
WARN_ON(!list_empty(&net->xfrm.state_all));
|
||||
|
@ -1526,20 +1526,8 @@ static int validate_tmpl(int nr, struct xfrm_user_tmpl *ut, u16 family)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
switch (ut[i].id.proto) {
|
||||
case IPPROTO_AH:
|
||||
case IPPROTO_ESP:
|
||||
case IPPROTO_COMP:
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
case IPPROTO_ROUTING:
|
||||
case IPPROTO_DSTOPTS:
|
||||
#endif
|
||||
case IPSEC_PROTO_ANY:
|
||||
break;
|
||||
default:
|
||||
if (!xfrm_id_proto_valid(ut[i].id.proto))
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -78,7 +78,7 @@ parse_symbol() {
|
||||
fi
|
||||
|
||||
# Strip out the base of the path
|
||||
code=${code//^$basepath/""}
|
||||
code=${code#$basepath/}
|
||||
|
||||
# In the case of inlines, move everything to same line
|
||||
code=${code//$'\n'/' '}
|
||||
|
@ -828,6 +828,8 @@ static void apply_fixup(struct hda_codec *codec, int id, int action, int depth)
|
||||
while (id >= 0) {
|
||||
const struct hda_fixup *fix = codec->fixup_list + id;
|
||||
|
||||
if (++depth > 10)
|
||||
break;
|
||||
if (fix->chained_before)
|
||||
apply_fixup(codec, fix->chain_id, action, depth + 1);
|
||||
|
||||
@ -867,8 +869,6 @@ static void apply_fixup(struct hda_codec *codec, int id, int action, int depth)
|
||||
}
|
||||
if (!fix->chained || fix->chained_before)
|
||||
break;
|
||||
if (++depth > 10)
|
||||
break;
|
||||
id = fix->chain_id;
|
||||
}
|
||||
}
|
||||
|
@ -5854,7 +5854,8 @@ int snd_hda_gen_init(struct hda_codec *codec)
|
||||
if (spec->init_hook)
|
||||
spec->init_hook(codec);
|
||||
|
||||
snd_hda_apply_verbs(codec);
|
||||
if (!spec->skip_verbs)
|
||||
snd_hda_apply_verbs(codec);
|
||||
|
||||
init_multi_out(codec);
|
||||
init_extra_out(codec);
|
||||
|
@ -237,6 +237,7 @@ struct hda_gen_spec {
|
||||
unsigned int indep_hp_enabled:1; /* independent HP enabled */
|
||||
unsigned int have_aamix_ctl:1;
|
||||
unsigned int hp_mic_jack_modes:1;
|
||||
unsigned int skip_verbs:1; /* don't apply verbs at snd_hda_gen_init() */
|
||||
|
||||
/* additional mute flags (only effective with auto_mute_via_amp=1) */
|
||||
u64 mute_bits;
|
||||
|
@ -781,9 +781,11 @@ static int alc_init(struct hda_codec *codec)
|
||||
if (spec->init_hook)
|
||||
spec->init_hook(codec);
|
||||
|
||||
spec->gen.skip_verbs = 1; /* applied in below */
|
||||
snd_hda_gen_init(codec);
|
||||
alc_fix_pll(codec);
|
||||
alc_auto_init_amp(codec, spec->init_amp);
|
||||
snd_hda_apply_verbs(codec); /* apply verbs here after own init */
|
||||
|
||||
snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_INIT);
|
||||
|
||||
@ -6586,6 +6588,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x17aa, 0x312a, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),
|
||||
SND_PCI_QUIRK(0x17aa, 0x312f, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),
|
||||
SND_PCI_QUIRK(0x17aa, 0x313c, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),
|
||||
SND_PCI_QUIRK(0x17aa, 0x3151, "ThinkCentre Station", ALC283_FIXUP_HEADSET_MIC),
|
||||
SND_PCI_QUIRK(0x17aa, 0x3902, "Lenovo E50-80", ALC269_FIXUP_DMIC_THINKPAD_ACPI),
|
||||
SND_PCI_QUIRK(0x17aa, 0x3977, "IdeaPad S210", ALC283_FIXUP_INT_MIC),
|
||||
SND_PCI_QUIRK(0x17aa, 0x3978, "Lenovo B50-70", ALC269_FIXUP_DMIC_THINKPAD_ACPI),
|
||||
@ -8287,6 +8290,7 @@ static int patch_alc680(struct hda_codec *codec)
|
||||
static const struct hda_device_id snd_hda_id_realtek[] = {
|
||||
HDA_CODEC_ENTRY(0x10ec0215, "ALC215", patch_alc269),
|
||||
HDA_CODEC_ENTRY(0x10ec0221, "ALC221", patch_alc269),
|
||||
HDA_CODEC_ENTRY(0x10ec0222, "ALC222", patch_alc269),
|
||||
HDA_CODEC_ENTRY(0x10ec0225, "ALC225", patch_alc269),
|
||||
HDA_CODEC_ENTRY(0x10ec0231, "ALC231", patch_alc269),
|
||||
HDA_CODEC_ENTRY(0x10ec0233, "ALC233", patch_alc269),
|
||||
|
Loading…
x
Reference in New Issue
Block a user