mirror of
https://github.com/hardkernel/linux.git
synced 2026-03-24 19:40:21 +09:00
Merge tag 'v4.9.267' of git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable into odroidg12-4.9.y
This is the 4.9.267 stable release Change-Id: Iee6d9a8c35574205717f88cfc7f9c89260f53f39
This commit is contained in:
2
Makefile
2
Makefile
@@ -1,6 +1,6 @@
|
||||
VERSION = 4
|
||||
PATCHLEVEL = 9
|
||||
SUBLEVEL = 266
|
||||
SUBLEVEL = 267
|
||||
EXTRAVERSION =
|
||||
NAME = Roaring Lionus
|
||||
|
||||
|
||||
@@ -1546,12 +1546,10 @@ config THUMB2_KERNEL
|
||||
depends on (CPU_V7 || CPU_V7M) && !CPU_V6 && !CPU_V6K
|
||||
default y if CPU_THUMBONLY
|
||||
select AEABI
|
||||
select ARM_ASM_UNIFIED
|
||||
select ARM_UNWIND
|
||||
help
|
||||
By enabling this option, the kernel will be compiled in
|
||||
Thumb-2 mode. A compiler/assembler that understand the unified
|
||||
ARM-Thumb syntax is needed.
|
||||
Thumb-2 mode.
|
||||
|
||||
If unsure, say N.
|
||||
|
||||
@@ -1586,9 +1584,6 @@ config THUMB2_AVOID_R_ARM_THM_JUMP11
|
||||
|
||||
Unless you are sure your tools don't have this problem, say Y.
|
||||
|
||||
config ARM_ASM_UNIFIED
|
||||
bool
|
||||
|
||||
config ARM_PATCH_IDIV
|
||||
bool "Runtime patch udiv/sdiv instructions into __aeabi_{u}idiv()"
|
||||
depends on CPU_32v7 && !XIP_KERNEL
|
||||
|
||||
@@ -117,9 +117,11 @@ ifeq ($(CONFIG_ARM_UNWIND),y)
|
||||
CFLAGS_ABI +=-funwind-tables
|
||||
endif
|
||||
|
||||
# Accept old syntax despite ".syntax unified"
|
||||
AFLAGS_NOWARN :=$(call as-option,-Wa$(comma)-mno-warn-deprecated,-Wa$(comma)-W)
|
||||
|
||||
ifeq ($(CONFIG_THUMB2_KERNEL),y)
|
||||
AFLAGS_AUTOIT :=$(call as-option,-Wa$(comma)-mimplicit-it=always,-Wa$(comma)-mauto-it)
|
||||
AFLAGS_NOWARN :=$(call as-option,-Wa$(comma)-mno-warn-deprecated,-Wa$(comma)-W)
|
||||
CFLAGS_ISA :=-mthumb $(AFLAGS_AUTOIT) $(AFLAGS_NOWARN)
|
||||
AFLAGS_ISA :=$(CFLAGS_ISA) -Wa$(comma)-mthumb
|
||||
# Work around buggy relocation from gas if requested:
|
||||
@@ -127,7 +129,7 @@ ifeq ($(CONFIG_THUMB2_AVOID_R_ARM_THM_JUMP11),y)
|
||||
CFLAGS_MODULE +=-fno-optimize-sibling-calls
|
||||
endif
|
||||
else
|
||||
CFLAGS_ISA :=$(call cc-option,-marm,)
|
||||
CFLAGS_ISA :=$(call cc-option,-marm,) $(AFLAGS_NOWARN)
|
||||
AFLAGS_ISA :=$(CFLAGS_ISA)
|
||||
endif
|
||||
|
||||
|
||||
@@ -20,8 +20,10 @@
|
||||
#ifndef __ASM_UNIFIED_H
|
||||
#define __ASM_UNIFIED_H
|
||||
|
||||
#if defined(__ASSEMBLY__) && defined(CONFIG_ARM_ASM_UNIFIED)
|
||||
#if defined(__ASSEMBLY__)
|
||||
.syntax unified
|
||||
#else
|
||||
__asm__(".syntax unified");
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_CPU_V7M
|
||||
@@ -64,77 +66,4 @@
|
||||
|
||||
#endif /* CONFIG_THUMB2_KERNEL */
|
||||
|
||||
#ifndef CONFIG_ARM_ASM_UNIFIED
|
||||
|
||||
/*
|
||||
* If the unified assembly syntax isn't used (in ARM mode), these
|
||||
* macros expand to an empty string
|
||||
*/
|
||||
#ifdef __ASSEMBLY__
|
||||
.macro it, cond
|
||||
.endm
|
||||
.macro itt, cond
|
||||
.endm
|
||||
.macro ite, cond
|
||||
.endm
|
||||
.macro ittt, cond
|
||||
.endm
|
||||
.macro itte, cond
|
||||
.endm
|
||||
.macro itet, cond
|
||||
.endm
|
||||
.macro itee, cond
|
||||
.endm
|
||||
.macro itttt, cond
|
||||
.endm
|
||||
.macro ittte, cond
|
||||
.endm
|
||||
.macro ittet, cond
|
||||
.endm
|
||||
.macro ittee, cond
|
||||
.endm
|
||||
.macro itett, cond
|
||||
.endm
|
||||
.macro itete, cond
|
||||
.endm
|
||||
.macro iteet, cond
|
||||
.endm
|
||||
.macro iteee, cond
|
||||
.endm
|
||||
#else /* !__ASSEMBLY__ */
|
||||
__asm__(
|
||||
" .macro it, cond\n"
|
||||
" .endm\n"
|
||||
" .macro itt, cond\n"
|
||||
" .endm\n"
|
||||
" .macro ite, cond\n"
|
||||
" .endm\n"
|
||||
" .macro ittt, cond\n"
|
||||
" .endm\n"
|
||||
" .macro itte, cond\n"
|
||||
" .endm\n"
|
||||
" .macro itet, cond\n"
|
||||
" .endm\n"
|
||||
" .macro itee, cond\n"
|
||||
" .endm\n"
|
||||
" .macro itttt, cond\n"
|
||||
" .endm\n"
|
||||
" .macro ittte, cond\n"
|
||||
" .endm\n"
|
||||
" .macro ittet, cond\n"
|
||||
" .endm\n"
|
||||
" .macro ittee, cond\n"
|
||||
" .endm\n"
|
||||
" .macro itett, cond\n"
|
||||
" .endm\n"
|
||||
" .macro itete, cond\n"
|
||||
" .endm\n"
|
||||
" .macro iteet, cond\n"
|
||||
" .endm\n"
|
||||
" .macro iteee, cond\n"
|
||||
" .endm\n");
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||
#endif /* CONFIG_ARM_ASM_UNIFIED */
|
||||
|
||||
#endif /* !__ASM_UNIFIED_H */
|
||||
|
||||
@@ -53,8 +53,7 @@
|
||||
|
||||
static inline unsigned long user_stack_pointer(struct pt_regs *regs)
|
||||
{
|
||||
/* FIXME: should this be bspstore + nr_dirty regs? */
|
||||
return regs->ar_bspstore;
|
||||
return regs->r12;
|
||||
}
|
||||
|
||||
static inline int is_syscall_success(struct pt_regs *regs)
|
||||
@@ -78,11 +77,6 @@ static inline long regs_return_value(struct pt_regs *regs)
|
||||
unsigned long __ip = instruction_pointer(regs); \
|
||||
(__ip & ~3UL) + ((__ip & 3UL) << 2); \
|
||||
})
|
||||
/*
|
||||
* Why not default? Because user_stack_pointer() on ia64 gives register
|
||||
* stack backing store instead...
|
||||
*/
|
||||
#define current_user_stack_pointer() (current_pt_regs()->r12)
|
||||
|
||||
/* given a pointer to a task_struct, return the user's pt_regs */
|
||||
# define task_pt_regs(t) (((struct pt_regs *) ((char *) (t) + IA64_STK_OFFSET)) - 1)
|
||||
|
||||
@@ -71,7 +71,7 @@ __cmpxchg(volatile void *ptr, unsigned long old, unsigned long new_, int size)
|
||||
#endif
|
||||
case 4: return __cmpxchg_u32((unsigned int *)ptr,
|
||||
(unsigned int)old, (unsigned int)new_);
|
||||
case 1: return __cmpxchg_u8((u8 *)ptr, (u8)old, (u8)new_);
|
||||
case 1: return __cmpxchg_u8((u8 *)ptr, old & 0xff, new_ & 0xff);
|
||||
}
|
||||
__cmpxchg_called_with_bad_pointer();
|
||||
return old;
|
||||
|
||||
@@ -37,10 +37,12 @@ static int diag8_noresponse(int cmdlen)
|
||||
|
||||
static int diag8_response(int cmdlen, char *response, int *rlen)
|
||||
{
|
||||
unsigned long _cmdlen = cmdlen | 0x40000000L;
|
||||
unsigned long _rlen = *rlen;
|
||||
register unsigned long reg2 asm ("2") = (addr_t) cpcmd_buf;
|
||||
register unsigned long reg3 asm ("3") = (addr_t) response;
|
||||
register unsigned long reg4 asm ("4") = cmdlen | 0x40000000L;
|
||||
register unsigned long reg5 asm ("5") = *rlen;
|
||||
register unsigned long reg4 asm ("4") = _cmdlen;
|
||||
register unsigned long reg5 asm ("5") = _rlen;
|
||||
|
||||
asm volatile(
|
||||
" sam31\n"
|
||||
|
||||
@@ -124,7 +124,7 @@ config AGP_HP_ZX1
|
||||
|
||||
config AGP_PARISC
|
||||
tristate "HP Quicksilver AGP support"
|
||||
depends on AGP && PARISC && 64BIT
|
||||
depends on AGP && PARISC && 64BIT && IOMMU_SBA
|
||||
help
|
||||
This option gives you AGP GART support for the HP Quicksilver
|
||||
AGP bus adapter on HP PA-RISC machines (Ok, just on the C8000
|
||||
|
||||
@@ -2990,32 +2990,28 @@ EXPORT_SYMBOL_GPL(clk_notifier_register);
|
||||
*/
|
||||
int clk_notifier_unregister(struct clk *clk, struct notifier_block *nb)
|
||||
{
|
||||
struct clk_notifier *cn = NULL;
|
||||
int ret = -EINVAL;
|
||||
struct clk_notifier *cn;
|
||||
int ret = -ENOENT;
|
||||
|
||||
if (!clk || !nb)
|
||||
return -EINVAL;
|
||||
|
||||
clk_prepare_lock();
|
||||
|
||||
list_for_each_entry(cn, &clk_notifier_list, node)
|
||||
if (cn->clk == clk)
|
||||
list_for_each_entry(cn, &clk_notifier_list, node) {
|
||||
if (cn->clk == clk) {
|
||||
ret = srcu_notifier_chain_unregister(&cn->notifier_head, nb);
|
||||
|
||||
clk->core->notifier_count--;
|
||||
|
||||
/* XXX the notifier code should handle this better */
|
||||
if (!cn->notifier_head.head) {
|
||||
srcu_cleanup_notifier_head(&cn->notifier_head);
|
||||
list_del(&cn->node);
|
||||
kfree(cn);
|
||||
}
|
||||
break;
|
||||
|
||||
if (cn->clk == clk) {
|
||||
ret = srcu_notifier_chain_unregister(&cn->notifier_head, nb);
|
||||
|
||||
clk->core->notifier_count--;
|
||||
|
||||
/* XXX the notifier code should handle this better */
|
||||
if (!cn->notifier_head.head) {
|
||||
srcu_cleanup_notifier_head(&cn->notifier_head);
|
||||
list_del(&cn->node);
|
||||
kfree(cn);
|
||||
}
|
||||
|
||||
} else {
|
||||
ret = -ENOENT;
|
||||
}
|
||||
|
||||
clk_prepare_unlock();
|
||||
|
||||
@@ -107,7 +107,7 @@ static unsigned long socfpga_clk_recalc_rate(struct clk_hw *hwclk,
|
||||
val = readl(socfpgaclk->div_reg) >> socfpgaclk->shift;
|
||||
val &= GENMASK(socfpgaclk->width - 1, 0);
|
||||
/* Check for GPIO_DB_CLK by its offset */
|
||||
if ((int) socfpgaclk->div_reg & SOCFPGA_GPIO_DB_CLK_OFFSET)
|
||||
if ((uintptr_t) socfpgaclk->div_reg & SOCFPGA_GPIO_DB_CLK_OFFSET)
|
||||
div = val + 1;
|
||||
else
|
||||
div = (1 << val);
|
||||
|
||||
@@ -212,6 +212,11 @@ static void imx_ldb_encoder_enable(struct drm_encoder *encoder)
|
||||
int dual = ldb->ldb_ctrl & LDB_SPLIT_MODE_EN;
|
||||
int mux = drm_of_encoder_active_port_id(imx_ldb_ch->child, encoder);
|
||||
|
||||
if (mux < 0 || mux >= ARRAY_SIZE(ldb->clk_sel)) {
|
||||
dev_warn(ldb->dev, "%s: invalid mux %d\n", __func__, mux);
|
||||
return;
|
||||
}
|
||||
|
||||
drm_panel_prepare(imx_ldb_ch->panel);
|
||||
|
||||
if (dual) {
|
||||
@@ -270,6 +275,11 @@ imx_ldb_encoder_atomic_mode_set(struct drm_encoder *encoder,
|
||||
int mux = drm_of_encoder_active_port_id(imx_ldb_ch->child, encoder);
|
||||
u32 bus_format = imx_ldb_ch->bus_format;
|
||||
|
||||
if (mux < 0 || mux >= ARRAY_SIZE(ldb->clk_sel)) {
|
||||
dev_warn(ldb->dev, "%s: invalid mux %d\n", __func__, mux);
|
||||
return;
|
||||
}
|
||||
|
||||
if (mode->clock > 170000) {
|
||||
dev_warn(ldb->dev,
|
||||
"%s: mode exceeds 170 MHz pixel clock\n", __func__);
|
||||
|
||||
@@ -37,6 +37,9 @@ struct prox_state {
|
||||
struct hid_sensor_common common_attributes;
|
||||
struct hid_sensor_hub_attribute_info prox_attr;
|
||||
u32 human_presence;
|
||||
int scale_pre_decml;
|
||||
int scale_post_decml;
|
||||
int scale_precision;
|
||||
};
|
||||
|
||||
/* Channel definitions */
|
||||
@@ -105,8 +108,9 @@ static int prox_read_raw(struct iio_dev *indio_dev,
|
||||
ret_type = IIO_VAL_INT;
|
||||
break;
|
||||
case IIO_CHAN_INFO_SCALE:
|
||||
*val = prox_state->prox_attr.units;
|
||||
ret_type = IIO_VAL_INT;
|
||||
*val = prox_state->scale_pre_decml;
|
||||
*val2 = prox_state->scale_post_decml;
|
||||
ret_type = prox_state->scale_precision;
|
||||
break;
|
||||
case IIO_CHAN_INFO_OFFSET:
|
||||
*val = hid_sensor_convert_exponent(
|
||||
@@ -240,6 +244,12 @@ static int prox_parse_report(struct platform_device *pdev,
|
||||
st->common_attributes.sensitivity.index,
|
||||
st->common_attributes.sensitivity.report_id);
|
||||
}
|
||||
|
||||
st->scale_precision = hid_sensor_format_scale(
|
||||
hsdev->usage,
|
||||
&st->prox_attr,
|
||||
&st->scale_pre_decml, &st->scale_post_decml);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -3478,7 +3478,8 @@ int c4iw_destroy_listen(struct iw_cm_id *cm_id)
|
||||
c4iw_init_wr_wait(&ep->com.wr_wait);
|
||||
err = cxgb4_remove_server(
|
||||
ep->com.dev->rdev.lldi.ports[0], ep->stid,
|
||||
ep->com.dev->rdev.lldi.rxq_ids[0], true);
|
||||
ep->com.dev->rdev.lldi.rxq_ids[0],
|
||||
ep->com.local_addr.ss_family == AF_INET6);
|
||||
if (err)
|
||||
goto done;
|
||||
err = c4iw_wait_for_reply(&ep->com.dev->rdev, &ep->com.wr_wait,
|
||||
|
||||
@@ -880,7 +880,7 @@ static int peak_usb_create_dev(const struct peak_usb_adapter *peak_usb_adapter,
|
||||
if (dev->adapter->dev_set_bus) {
|
||||
err = dev->adapter->dev_set_bus(dev, 0);
|
||||
if (err)
|
||||
goto lbl_unregister_candev;
|
||||
goto adap_dev_free;
|
||||
}
|
||||
|
||||
/* get device number early */
|
||||
@@ -892,6 +892,10 @@ static int peak_usb_create_dev(const struct peak_usb_adapter *peak_usb_adapter,
|
||||
|
||||
return 0;
|
||||
|
||||
adap_dev_free:
|
||||
if (dev->adapter->dev_free)
|
||||
dev->adapter->dev_free(dev);
|
||||
|
||||
lbl_unregister_candev:
|
||||
unregister_candev(netdev);
|
||||
|
||||
|
||||
@@ -485,7 +485,11 @@ static struct net_device_stats *gfar_get_stats(struct net_device *dev)
|
||||
|
||||
static int gfar_set_mac_addr(struct net_device *dev, void *p)
|
||||
{
|
||||
eth_mac_addr(dev, p);
|
||||
int ret;
|
||||
|
||||
ret = eth_mac_addr(dev, p);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
gfar_set_mac_for_addr(dev, 0, dev->dev_addr);
|
||||
|
||||
|
||||
@@ -341,6 +341,7 @@ static int atusb_alloc_urbs(struct atusb *atusb, int n)
|
||||
return -ENOMEM;
|
||||
}
|
||||
usb_anchor_urb(urb, &atusb->idle_urbs);
|
||||
usb_free_urb(urb);
|
||||
n--;
|
||||
}
|
||||
return 0;
|
||||
|
||||
@@ -72,6 +72,14 @@
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/uio.h>
|
||||
#include <linux/skb_array.h>
|
||||
#include <linux/ieee802154.h>
|
||||
#include <linux/if_ltalk.h>
|
||||
#include <uapi/linux/if_fddi.h>
|
||||
#include <uapi/linux/if_hippi.h>
|
||||
#include <uapi/linux/if_fc.h>
|
||||
#include <net/ax25.h>
|
||||
#include <net/rose.h>
|
||||
#include <net/6lowpan.h>
|
||||
|
||||
#include <asm/uaccess.h>
|
||||
|
||||
@@ -2021,6 +2029,45 @@ unlock:
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Return correct value for tun->dev->addr_len based on tun->dev->type. */
|
||||
static unsigned char tun_get_addr_len(unsigned short type)
|
||||
{
|
||||
switch (type) {
|
||||
case ARPHRD_IP6GRE:
|
||||
case ARPHRD_TUNNEL6:
|
||||
return sizeof(struct in6_addr);
|
||||
case ARPHRD_IPGRE:
|
||||
case ARPHRD_TUNNEL:
|
||||
case ARPHRD_SIT:
|
||||
return 4;
|
||||
case ARPHRD_ETHER:
|
||||
return ETH_ALEN;
|
||||
case ARPHRD_IEEE802154:
|
||||
case ARPHRD_IEEE802154_MONITOR:
|
||||
return IEEE802154_EXTENDED_ADDR_LEN;
|
||||
case ARPHRD_PHONET_PIPE:
|
||||
case ARPHRD_PPP:
|
||||
case ARPHRD_NONE:
|
||||
return 0;
|
||||
case ARPHRD_6LOWPAN:
|
||||
return EUI64_ADDR_LEN;
|
||||
case ARPHRD_FDDI:
|
||||
return FDDI_K_ALEN;
|
||||
case ARPHRD_HIPPI:
|
||||
return HIPPI_ALEN;
|
||||
case ARPHRD_IEEE802:
|
||||
return FC_ALEN;
|
||||
case ARPHRD_ROSE:
|
||||
return ROSE_ADDR_LEN;
|
||||
case ARPHRD_NETROM:
|
||||
return AX25_ADDR_LEN;
|
||||
case ARPHRD_LOCALTLK:
|
||||
return LTALK_ALEN;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static long __tun_chr_ioctl(struct file *file, unsigned int cmd,
|
||||
unsigned long arg, int ifreq_len)
|
||||
{
|
||||
@@ -2165,6 +2212,7 @@ static long __tun_chr_ioctl(struct file *file, unsigned int cmd,
|
||||
ret = -EBUSY;
|
||||
} else {
|
||||
tun->dev->type = (int) arg;
|
||||
tun->dev->addr_len = tun_get_addr_len(tun->dev->type);
|
||||
tun_debug(KERN_INFO, tun, "linktype set to %d\n",
|
||||
tun->dev->type);
|
||||
ret = 0;
|
||||
|
||||
@@ -146,7 +146,7 @@ struct qm_eqcr_entry {
|
||||
u32 tag;
|
||||
struct qm_fd fd;
|
||||
u8 __reserved3[32];
|
||||
} __packed;
|
||||
} __packed __aligned(8);
|
||||
#define QM_EQCR_VERB_VBIT 0x80
|
||||
#define QM_EQCR_VERB_CMD_MASK 0x61 /* but only one value; */
|
||||
#define QM_EQCR_VERB_CMD_ENQUEUE 0x01
|
||||
|
||||
@@ -103,8 +103,9 @@ unlock:
|
||||
}
|
||||
static BIN_ATTR_RO(dev_desc, sizeof(struct usb_device_descriptor));
|
||||
|
||||
static ssize_t store_sockfd(struct device *dev, struct device_attribute *attr,
|
||||
const char *in, size_t count)
|
||||
static ssize_t store_sockfd(struct device *dev,
|
||||
struct device_attribute *attr,
|
||||
const char *in, size_t count)
|
||||
{
|
||||
struct vudc *udc = (struct vudc *) dev_get_drvdata(dev);
|
||||
int rv;
|
||||
@@ -113,6 +114,8 @@ static ssize_t store_sockfd(struct device *dev, struct device_attribute *attr,
|
||||
struct socket *socket;
|
||||
unsigned long flags;
|
||||
int ret;
|
||||
struct task_struct *tcp_rx = NULL;
|
||||
struct task_struct *tcp_tx = NULL;
|
||||
|
||||
rv = kstrtoint(in, 0, &sockfd);
|
||||
if (rv != 0)
|
||||
@@ -158,24 +161,47 @@ static ssize_t store_sockfd(struct device *dev, struct device_attribute *attr,
|
||||
goto sock_err;
|
||||
}
|
||||
|
||||
udc->ud.tcp_socket = socket;
|
||||
|
||||
/* unlock and create threads and get tasks */
|
||||
spin_unlock_irq(&udc->ud.lock);
|
||||
spin_unlock_irqrestore(&udc->lock, flags);
|
||||
|
||||
udc->ud.tcp_rx = kthread_get_run(&v_rx_loop,
|
||||
&udc->ud, "vudc_rx");
|
||||
udc->ud.tcp_tx = kthread_get_run(&v_tx_loop,
|
||||
&udc->ud, "vudc_tx");
|
||||
tcp_rx = kthread_create(&v_rx_loop, &udc->ud, "vudc_rx");
|
||||
if (IS_ERR(tcp_rx)) {
|
||||
sockfd_put(socket);
|
||||
return -EINVAL;
|
||||
}
|
||||
tcp_tx = kthread_create(&v_tx_loop, &udc->ud, "vudc_tx");
|
||||
if (IS_ERR(tcp_tx)) {
|
||||
kthread_stop(tcp_rx);
|
||||
sockfd_put(socket);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* get task structs now */
|
||||
get_task_struct(tcp_rx);
|
||||
get_task_struct(tcp_tx);
|
||||
|
||||
/* lock and update udc->ud state */
|
||||
spin_lock_irqsave(&udc->lock, flags);
|
||||
spin_lock_irq(&udc->ud.lock);
|
||||
|
||||
udc->ud.tcp_socket = socket;
|
||||
udc->ud.tcp_rx = tcp_rx;
|
||||
udc->ud.tcp_rx = tcp_tx;
|
||||
udc->ud.status = SDEV_ST_USED;
|
||||
|
||||
spin_unlock_irq(&udc->ud.lock);
|
||||
|
||||
do_gettimeofday(&udc->start_time);
|
||||
v_start_timer(udc);
|
||||
udc->connected = 1;
|
||||
|
||||
spin_unlock_irqrestore(&udc->lock, flags);
|
||||
|
||||
wake_up_process(udc->ud.tcp_rx);
|
||||
wake_up_process(udc->ud.tcp_tx);
|
||||
return count;
|
||||
|
||||
} else {
|
||||
if (!udc->connected) {
|
||||
dev_err(dev, "Device not connected");
|
||||
|
||||
@@ -222,7 +222,7 @@ static int xen_irq_info_common_setup(struct irq_info *info,
|
||||
info->evtchn = evtchn;
|
||||
info->cpu = cpu;
|
||||
info->mask_reason = EVT_MASK_REASON_EXPLICIT;
|
||||
spin_lock_init(&info->lock);
|
||||
raw_spin_lock_init(&info->lock);
|
||||
|
||||
ret = set_evtchn_to_irq(evtchn, irq);
|
||||
if (ret < 0)
|
||||
@@ -374,28 +374,28 @@ static void do_mask(struct irq_info *info, u8 reason)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&info->lock, flags);
|
||||
raw_spin_lock_irqsave(&info->lock, flags);
|
||||
|
||||
if (!info->mask_reason)
|
||||
mask_evtchn(info->evtchn);
|
||||
|
||||
info->mask_reason |= reason;
|
||||
|
||||
spin_unlock_irqrestore(&info->lock, flags);
|
||||
raw_spin_unlock_irqrestore(&info->lock, flags);
|
||||
}
|
||||
|
||||
static void do_unmask(struct irq_info *info, u8 reason)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&info->lock, flags);
|
||||
raw_spin_lock_irqsave(&info->lock, flags);
|
||||
|
||||
info->mask_reason &= ~reason;
|
||||
|
||||
if (!info->mask_reason)
|
||||
unmask_evtchn(info->evtchn);
|
||||
|
||||
spin_unlock_irqrestore(&info->lock, flags);
|
||||
raw_spin_unlock_irqrestore(&info->lock, flags);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_X86
|
||||
@@ -1780,7 +1780,7 @@ static void lateeoi_ack_dynirq(struct irq_data *data)
|
||||
|
||||
if (VALID_EVTCHN(evtchn)) {
|
||||
do_mask(info, EVT_MASK_REASON_EOI_PENDING);
|
||||
event_handler_exit(info);
|
||||
ack_dynirq(data);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1791,7 +1791,7 @@ static void lateeoi_mask_ack_dynirq(struct irq_data *data)
|
||||
|
||||
if (VALID_EVTCHN(evtchn)) {
|
||||
do_mask(info, EVT_MASK_REASON_EXPLICIT);
|
||||
event_handler_exit(info);
|
||||
ack_dynirq(data);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@ struct irq_info {
|
||||
unsigned short eoi_cpu; /* EOI must happen on this cpu */
|
||||
unsigned int irq_epoch; /* If eoi_cpu valid: irq_epoch of event */
|
||||
u64 eoi_time; /* Time in jiffies when to EOI. */
|
||||
spinlock_t lock;
|
||||
raw_spinlock_t lock;
|
||||
|
||||
union {
|
||||
unsigned short virq;
|
||||
|
||||
@@ -3488,7 +3488,6 @@ int cifs_setup_cifs_sb(struct smb_vol *pvolume_info,
|
||||
cifs_sb->prepath = kstrdup(pvolume_info->prepath, GFP_KERNEL);
|
||||
if (cifs_sb->prepath == NULL)
|
||||
return -ENOMEM;
|
||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_USE_PREFIX_PATH;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -793,6 +793,7 @@ submit_page_section(struct dio *dio, struct dio_submit *sdio, struct page *page,
|
||||
struct buffer_head *map_bh)
|
||||
{
|
||||
int ret = 0;
|
||||
int boundary = sdio->boundary; /* dio_send_cur_page may clear it */
|
||||
|
||||
if (dio->op == REQ_OP_WRITE) {
|
||||
/*
|
||||
@@ -831,10 +832,10 @@ submit_page_section(struct dio *dio, struct dio_submit *sdio, struct page *page,
|
||||
sdio->cur_page_fs_offset = sdio->block_in_file << sdio->blkbits;
|
||||
out:
|
||||
/*
|
||||
* If sdio->boundary then we want to schedule the IO now to
|
||||
* If boundary then we want to schedule the IO now to
|
||||
* avoid metadata seeks.
|
||||
*/
|
||||
if (sdio->boundary) {
|
||||
if (boundary) {
|
||||
ret = dio_send_cur_page(dio, sdio, map_bh);
|
||||
if (sdio->bio)
|
||||
dio_bio_submit(dio, sdio);
|
||||
|
||||
@@ -986,11 +986,13 @@ void gfs2_freeze_func(struct work_struct *work)
|
||||
static int gfs2_freeze(struct super_block *sb)
|
||||
{
|
||||
struct gfs2_sbd *sdp = sb->s_fs_info;
|
||||
int error = 0;
|
||||
int error;
|
||||
|
||||
mutex_lock(&sdp->sd_freeze_mutex);
|
||||
if (atomic_read(&sdp->sd_freeze_state) != SFS_UNFROZEN)
|
||||
if (atomic_read(&sdp->sd_freeze_state) != SFS_UNFROZEN) {
|
||||
error = -EBUSY;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (test_bit(SDF_SHUTDOWN, &sdp->sd_flags)) {
|
||||
error = -EINVAL;
|
||||
@@ -1032,10 +1034,10 @@ static int gfs2_unfreeze(struct super_block *sb)
|
||||
struct gfs2_sbd *sdp = sb->s_fs_info;
|
||||
|
||||
mutex_lock(&sdp->sd_freeze_mutex);
|
||||
if (atomic_read(&sdp->sd_freeze_state) != SFS_FROZEN ||
|
||||
if (atomic_read(&sdp->sd_freeze_state) != SFS_FROZEN ||
|
||||
!gfs2_holder_initialized(&sdp->sd_freeze_gh)) {
|
||||
mutex_unlock(&sdp->sd_freeze_mutex);
|
||||
return 0;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
gfs2_glock_dq_uninit(&sdp->sd_freeze_gh);
|
||||
|
||||
@@ -2301,7 +2301,7 @@ static void ocfs2_dio_end_io_write(struct inode *inode,
|
||||
struct ocfs2_alloc_context *meta_ac = NULL;
|
||||
handle_t *handle = NULL;
|
||||
loff_t end = offset + bytes;
|
||||
int ret = 0, credits = 0, locked = 0;
|
||||
int ret = 0, credits = 0;
|
||||
|
||||
ocfs2_init_dealloc_ctxt(&dealloc);
|
||||
|
||||
@@ -2312,13 +2312,6 @@ static void ocfs2_dio_end_io_write(struct inode *inode,
|
||||
!dwc->dw_orphaned)
|
||||
goto out;
|
||||
|
||||
/* ocfs2_file_write_iter will get i_mutex, so we need not lock if we
|
||||
* are in that context. */
|
||||
if (dwc->dw_writer_pid != task_pid_nr(current)) {
|
||||
inode_lock(inode);
|
||||
locked = 1;
|
||||
}
|
||||
|
||||
ret = ocfs2_inode_lock(inode, &di_bh, 1);
|
||||
if (ret < 0) {
|
||||
mlog_errno(ret);
|
||||
@@ -2393,8 +2386,6 @@ out:
|
||||
if (meta_ac)
|
||||
ocfs2_free_alloc_context(meta_ac);
|
||||
ocfs2_run_deallocs(osb, &dealloc);
|
||||
if (locked)
|
||||
inode_unlock(inode);
|
||||
ocfs2_dio_free_write_ctx(inode, dwc);
|
||||
}
|
||||
|
||||
|
||||
@@ -1236,22 +1236,24 @@ int ocfs2_setattr(struct dentry *dentry, struct iattr *attr)
|
||||
goto bail_unlock;
|
||||
}
|
||||
}
|
||||
down_write(&OCFS2_I(inode)->ip_alloc_sem);
|
||||
handle = ocfs2_start_trans(osb, OCFS2_INODE_UPDATE_CREDITS +
|
||||
2 * ocfs2_quota_trans_credits(sb));
|
||||
if (IS_ERR(handle)) {
|
||||
status = PTR_ERR(handle);
|
||||
mlog_errno(status);
|
||||
goto bail_unlock;
|
||||
goto bail_unlock_alloc;
|
||||
}
|
||||
status = __dquot_transfer(inode, transfer_to);
|
||||
if (status < 0)
|
||||
goto bail_commit;
|
||||
} else {
|
||||
down_write(&OCFS2_I(inode)->ip_alloc_sem);
|
||||
handle = ocfs2_start_trans(osb, OCFS2_INODE_UPDATE_CREDITS);
|
||||
if (IS_ERR(handle)) {
|
||||
status = PTR_ERR(handle);
|
||||
mlog_errno(status);
|
||||
goto bail_unlock;
|
||||
goto bail_unlock_alloc;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1264,6 +1266,8 @@ int ocfs2_setattr(struct dentry *dentry, struct iattr *attr)
|
||||
|
||||
bail_commit:
|
||||
ocfs2_commit_trans(osb, handle);
|
||||
bail_unlock_alloc:
|
||||
up_write(&OCFS2_I(inode)->ip_alloc_sem);
|
||||
bail_unlock:
|
||||
if (status) {
|
||||
ocfs2_inode_unlock(inode, 1);
|
||||
|
||||
@@ -1672,6 +1672,7 @@ static int gather_pte_stats(pmd_t *pmd, unsigned long addr,
|
||||
|
||||
} while (pte++, addr += PAGE_SIZE, addr != end);
|
||||
pte_unmap_unlock(orig_pte, ptl);
|
||||
cond_resched();
|
||||
return 0;
|
||||
}
|
||||
#ifdef CONFIG_HUGETLB_PAGE
|
||||
|
||||
@@ -170,9 +170,9 @@ static inline void red_set_vars(struct red_vars *v)
|
||||
static inline bool red_check_params(u32 qth_min, u32 qth_max, u8 Wlog,
|
||||
u8 Scell_log, u8 *stab)
|
||||
{
|
||||
if (fls(qth_min) + Wlog > 32)
|
||||
if (fls(qth_min) + Wlog >= 32)
|
||||
return false;
|
||||
if (fls(qth_max) + Wlog > 32)
|
||||
if (fls(qth_max) + Wlog >= 32)
|
||||
return false;
|
||||
if (Scell_log >= 32)
|
||||
return false;
|
||||
|
||||
@@ -1377,7 +1377,6 @@ static void __queue_work(int cpu, struct workqueue_struct *wq,
|
||||
*/
|
||||
WARN_ON_ONCE(!irqs_disabled());
|
||||
|
||||
debug_work_activate(work);
|
||||
|
||||
/* if draining, only works from the same workqueue are allowed */
|
||||
if (unlikely(wq->flags & __WQ_DRAINING) &&
|
||||
@@ -1460,6 +1459,7 @@ retry:
|
||||
worklist = &pwq->delayed_works;
|
||||
}
|
||||
|
||||
debug_work_activate(work);
|
||||
insert_work(pwq, work, worklist, work_flags);
|
||||
|
||||
spin_unlock(&pwq->pool->lock);
|
||||
|
||||
@@ -897,6 +897,7 @@ batadv_tt_prepare_tvlv_global_data(struct batadv_orig_node *orig_node,
|
||||
hlist_for_each_entry_rcu(vlan, &orig_node->vlan_list, list) {
|
||||
tt_vlan->vid = htons(vlan->vid);
|
||||
tt_vlan->crc = htonl(vlan->tt.crc);
|
||||
tt_vlan->reserved = 0;
|
||||
|
||||
tt_vlan++;
|
||||
}
|
||||
@@ -980,6 +981,7 @@ batadv_tt_prepare_tvlv_local_data(struct batadv_priv *bat_priv,
|
||||
|
||||
tt_vlan->vid = htons(vlan->vid);
|
||||
tt_vlan->crc = htonl(vlan->tt.crc);
|
||||
tt_vlan->reserved = 0;
|
||||
|
||||
tt_vlan++;
|
||||
}
|
||||
|
||||
@@ -559,9 +559,7 @@ ieee802154_llsec_parse_key_id(struct genl_info *info,
|
||||
desc->mode = nla_get_u8(info->attrs[IEEE802154_ATTR_LLSEC_KEY_MODE]);
|
||||
|
||||
if (desc->mode == IEEE802154_SCF_KEY_IMPLICIT) {
|
||||
if (!info->attrs[IEEE802154_ATTR_PAN_ID] &&
|
||||
!(info->attrs[IEEE802154_ATTR_SHORT_ADDR] ||
|
||||
info->attrs[IEEE802154_ATTR_HW_ADDR]))
|
||||
if (!info->attrs[IEEE802154_ATTR_PAN_ID])
|
||||
return -EINVAL;
|
||||
|
||||
desc->device_addr.pan_id = nla_get_shortaddr(info->attrs[IEEE802154_ATTR_PAN_ID]);
|
||||
@@ -570,6 +568,9 @@ ieee802154_llsec_parse_key_id(struct genl_info *info,
|
||||
desc->device_addr.mode = IEEE802154_ADDR_SHORT;
|
||||
desc->device_addr.short_addr = nla_get_shortaddr(info->attrs[IEEE802154_ATTR_SHORT_ADDR]);
|
||||
} else {
|
||||
if (!info->attrs[IEEE802154_ATTR_HW_ADDR])
|
||||
return -EINVAL;
|
||||
|
||||
desc->device_addr.mode = IEEE802154_ADDR_LONG;
|
||||
desc->device_addr.extended_addr = nla_get_hwaddr(info->attrs[IEEE802154_ATTR_HW_ADDR]);
|
||||
}
|
||||
|
||||
@@ -851,8 +851,13 @@ nl802154_send_iface(struct sk_buff *msg, u32 portid, u32 seq, int flags,
|
||||
goto nla_put_failure;
|
||||
|
||||
#ifdef CONFIG_IEEE802154_NL802154_EXPERIMENTAL
|
||||
if (wpan_dev->iftype == NL802154_IFTYPE_MONITOR)
|
||||
goto out;
|
||||
|
||||
if (nl802154_get_llsec_params(msg, rdev, wpan_dev) < 0)
|
||||
goto nla_put_failure;
|
||||
|
||||
out:
|
||||
#endif /* CONFIG_IEEE802154_NL802154_EXPERIMENTAL */
|
||||
|
||||
genlmsg_end(msg, hdr);
|
||||
@@ -1417,6 +1422,9 @@ static int nl802154_set_llsec_params(struct sk_buff *skb,
|
||||
u32 changed = 0;
|
||||
int ret;
|
||||
|
||||
if (wpan_dev->iftype == NL802154_IFTYPE_MONITOR)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (info->attrs[NL802154_ATTR_SEC_ENABLED]) {
|
||||
u8 enabled;
|
||||
|
||||
@@ -1577,7 +1585,8 @@ static int nl802154_add_llsec_key(struct sk_buff *skb, struct genl_info *info)
|
||||
struct ieee802154_llsec_key_id id = { };
|
||||
u32 commands[NL802154_CMD_FRAME_NR_IDS / 32] = { };
|
||||
|
||||
if (nla_parse_nested(attrs, NL802154_KEY_ATTR_MAX,
|
||||
if (!info->attrs[NL802154_ATTR_SEC_KEY] ||
|
||||
nla_parse_nested(attrs, NL802154_KEY_ATTR_MAX,
|
||||
info->attrs[NL802154_ATTR_SEC_KEY],
|
||||
nl802154_key_policy))
|
||||
return -EINVAL;
|
||||
@@ -1627,7 +1636,8 @@ static int nl802154_del_llsec_key(struct sk_buff *skb, struct genl_info *info)
|
||||
struct nlattr *attrs[NL802154_KEY_ATTR_MAX + 1];
|
||||
struct ieee802154_llsec_key_id id;
|
||||
|
||||
if (nla_parse_nested(attrs, NL802154_KEY_ATTR_MAX,
|
||||
if (!info->attrs[NL802154_ATTR_SEC_KEY] ||
|
||||
nla_parse_nested(attrs, NL802154_KEY_ATTR_MAX,
|
||||
info->attrs[NL802154_ATTR_SEC_KEY],
|
||||
nl802154_key_policy))
|
||||
return -EINVAL;
|
||||
@@ -1795,7 +1805,8 @@ static int nl802154_del_llsec_dev(struct sk_buff *skb, struct genl_info *info)
|
||||
struct nlattr *attrs[NL802154_DEV_ATTR_MAX + 1];
|
||||
__le64 extended_addr;
|
||||
|
||||
if (nla_parse_nested(attrs, NL802154_DEV_ATTR_MAX,
|
||||
if (!info->attrs[NL802154_ATTR_SEC_DEVICE] ||
|
||||
nla_parse_nested(attrs, NL802154_DEV_ATTR_MAX,
|
||||
info->attrs[NL802154_ATTR_SEC_DEVICE],
|
||||
nl802154_dev_policy))
|
||||
return -EINVAL;
|
||||
@@ -1955,7 +1966,8 @@ static int nl802154_del_llsec_devkey(struct sk_buff *skb, struct genl_info *info
|
||||
struct ieee802154_llsec_device_key key;
|
||||
__le64 extended_addr;
|
||||
|
||||
if (nla_parse_nested(attrs, NL802154_DEVKEY_ATTR_MAX,
|
||||
if (!info->attrs[NL802154_ATTR_SEC_DEVKEY] ||
|
||||
nla_parse_nested(attrs, NL802154_DEVKEY_ATTR_MAX,
|
||||
info->attrs[NL802154_ATTR_SEC_DEVKEY],
|
||||
nl802154_devkey_policy))
|
||||
return -EINVAL;
|
||||
@@ -2130,6 +2142,9 @@ static int nl802154_del_llsec_seclevel(struct sk_buff *skb,
|
||||
struct wpan_dev *wpan_dev = dev->ieee802154_ptr;
|
||||
struct ieee802154_llsec_seclevel sl;
|
||||
|
||||
if (wpan_dev->iftype == NL802154_IFTYPE_MONITOR)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (!info->attrs[NL802154_ATTR_SEC_LEVEL] ||
|
||||
llsec_parse_seclevel(info->attrs[NL802154_ATTR_SEC_LEVEL],
|
||||
&sl) < 0)
|
||||
|
||||
@@ -1209,6 +1209,8 @@ static int translate_compat_table(struct net *net,
|
||||
if (!newinfo)
|
||||
goto out_unlock;
|
||||
|
||||
memset(newinfo->entries, 0, size);
|
||||
|
||||
newinfo->number = compatr->num_entries;
|
||||
for (i = 0; i < NF_ARP_NUMHOOKS; i++) {
|
||||
newinfo->hook_entry[i] = compatr->hook_entry[i];
|
||||
|
||||
@@ -1451,6 +1451,8 @@ translate_compat_table(struct net *net,
|
||||
if (!newinfo)
|
||||
goto out_unlock;
|
||||
|
||||
memset(newinfo->entries, 0, size);
|
||||
|
||||
newinfo->number = compatr->num_entries;
|
||||
for (i = 0; i < NF_INET_NUMHOOKS; i++) {
|
||||
newinfo->hook_entry[i] = compatr->hook_entry[i];
|
||||
|
||||
@@ -1476,6 +1476,8 @@ translate_compat_table(struct net *net,
|
||||
if (!newinfo)
|
||||
goto out_unlock;
|
||||
|
||||
memset(newinfo->entries, 0, size);
|
||||
|
||||
newinfo->number = compatr->num_entries;
|
||||
for (i = 0; i < NF_INET_NUMHOOKS; i++) {
|
||||
newinfo->hook_entry[i] = compatr->hook_entry[i];
|
||||
|
||||
@@ -3048,9 +3048,11 @@ static int ip6_route_multipath_add(struct fib6_config *cfg)
|
||||
* nexthops have been replaced by first new, the rest should
|
||||
* be added to it.
|
||||
*/
|
||||
cfg->fc_nlinfo.nlh->nlmsg_flags &= ~(NLM_F_EXCL |
|
||||
NLM_F_REPLACE);
|
||||
cfg->fc_nlinfo.nlh->nlmsg_flags |= NLM_F_CREATE;
|
||||
if (cfg->fc_nlinfo.nlh) {
|
||||
cfg->fc_nlinfo.nlh->nlmsg_flags &= ~(NLM_F_EXCL |
|
||||
NLM_F_REPLACE);
|
||||
cfg->fc_nlinfo.nlh->nlmsg_flags |= NLM_F_CREATE;
|
||||
}
|
||||
nhn++;
|
||||
}
|
||||
|
||||
|
||||
@@ -158,7 +158,7 @@ err_tfm0:
|
||||
crypto_free_skcipher(key->tfm0);
|
||||
err_tfm:
|
||||
for (i = 0; i < ARRAY_SIZE(key->tfm); i++)
|
||||
if (key->tfm[i])
|
||||
if (!IS_ERR_OR_NULL(key->tfm[i]))
|
||||
crypto_free_aead(key->tfm[i]);
|
||||
|
||||
kzfree(key);
|
||||
|
||||
@@ -569,7 +569,7 @@ void xt_compat_match_from_user(struct xt_entry_match *m, void **dstptr,
|
||||
{
|
||||
const struct xt_match *match = m->u.kernel.match;
|
||||
struct compat_xt_entry_match *cm = (struct compat_xt_entry_match *)m;
|
||||
int pad, off = xt_compat_match_offset(match);
|
||||
int off = xt_compat_match_offset(match);
|
||||
u_int16_t msize = cm->u.user.match_size;
|
||||
char name[sizeof(m->u.user.name)];
|
||||
|
||||
@@ -579,9 +579,6 @@ void xt_compat_match_from_user(struct xt_entry_match *m, void **dstptr,
|
||||
match->compat_from_user(m->data, cm->data);
|
||||
else
|
||||
memcpy(m->data, cm->data, msize - sizeof(*cm));
|
||||
pad = XT_ALIGN(match->matchsize) - match->matchsize;
|
||||
if (pad > 0)
|
||||
memset(m->data + match->matchsize, 0, pad);
|
||||
|
||||
msize += off;
|
||||
m->u.user.match_size = msize;
|
||||
@@ -927,7 +924,7 @@ void xt_compat_target_from_user(struct xt_entry_target *t, void **dstptr,
|
||||
{
|
||||
const struct xt_target *target = t->u.kernel.target;
|
||||
struct compat_xt_entry_target *ct = (struct compat_xt_entry_target *)t;
|
||||
int pad, off = xt_compat_target_offset(target);
|
||||
int off = xt_compat_target_offset(target);
|
||||
u_int16_t tsize = ct->u.user.target_size;
|
||||
char name[sizeof(t->u.user.name)];
|
||||
|
||||
@@ -937,9 +934,6 @@ void xt_compat_target_from_user(struct xt_entry_target *t, void **dstptr,
|
||||
target->compat_from_user(t->data, ct->data);
|
||||
else
|
||||
memcpy(t->data, ct->data, tsize - sizeof(*ct));
|
||||
pad = XT_ALIGN(target->targetsize) - target->targetsize;
|
||||
if (pad > 0)
|
||||
memset(t->data + target->targetsize, 0, pad);
|
||||
|
||||
tsize += off;
|
||||
t->u.user.target_size = tsize;
|
||||
|
||||
@@ -119,11 +119,13 @@ static int llcp_sock_bind(struct socket *sock, struct sockaddr *addr, int alen)
|
||||
llcp_sock->service_name_len,
|
||||
GFP_KERNEL);
|
||||
if (!llcp_sock->service_name) {
|
||||
nfc_llcp_local_put(llcp_sock->local);
|
||||
ret = -ENOMEM;
|
||||
goto put_dev;
|
||||
}
|
||||
llcp_sock->ssap = nfc_llcp_get_sdp_ssap(local, llcp_sock);
|
||||
if (llcp_sock->ssap == LLCP_SAP_MAX) {
|
||||
nfc_llcp_local_put(llcp_sock->local);
|
||||
kfree(llcp_sock->service_name);
|
||||
llcp_sock->service_name = NULL;
|
||||
ret = -EADDRINUSE;
|
||||
@@ -683,6 +685,10 @@ static int llcp_sock_connect(struct socket *sock, struct sockaddr *_addr,
|
||||
ret = -EISCONN;
|
||||
goto error;
|
||||
}
|
||||
if (sk->sk_state == LLCP_CONNECTING) {
|
||||
ret = -EINPROGRESS;
|
||||
goto error;
|
||||
}
|
||||
|
||||
dev = nfc_get_device(addr->dev_idx);
|
||||
if (dev == NULL) {
|
||||
@@ -714,6 +720,7 @@ static int llcp_sock_connect(struct socket *sock, struct sockaddr *_addr,
|
||||
llcp_sock->local = nfc_llcp_local_get(local);
|
||||
llcp_sock->ssap = nfc_llcp_get_local_ssap(local);
|
||||
if (llcp_sock->ssap == LLCP_SAP_MAX) {
|
||||
nfc_llcp_local_put(llcp_sock->local);
|
||||
ret = -ENOMEM;
|
||||
goto put_dev;
|
||||
}
|
||||
@@ -751,8 +758,11 @@ static int llcp_sock_connect(struct socket *sock, struct sockaddr *_addr,
|
||||
|
||||
sock_unlink:
|
||||
nfc_llcp_put_ssap(local, llcp_sock->ssap);
|
||||
nfc_llcp_local_put(llcp_sock->local);
|
||||
|
||||
nfc_llcp_sock_unlink(&local->connecting_sockets, sk);
|
||||
kfree(llcp_sock->service_name);
|
||||
llcp_sock->service_name = NULL;
|
||||
|
||||
put_dev:
|
||||
nfc_put_device(dev);
|
||||
|
||||
@@ -138,6 +138,9 @@ teql_destroy(struct Qdisc *sch)
|
||||
struct teql_sched_data *dat = qdisc_priv(sch);
|
||||
struct teql_master *master = dat->m;
|
||||
|
||||
if (!master)
|
||||
return;
|
||||
|
||||
prev = master->slaves;
|
||||
if (prev) {
|
||||
do {
|
||||
|
||||
@@ -741,7 +741,7 @@ void tipc_sk_mcast_rcv(struct net *net, struct sk_buff_head *arrvq,
|
||||
spin_lock_bh(&inputq->lock);
|
||||
if (skb_peek(arrvq) == skb) {
|
||||
skb_queue_splice_tail_init(&tmpq, inputq);
|
||||
kfree_skb(__skb_dequeue(arrvq));
|
||||
__skb_dequeue(arrvq);
|
||||
}
|
||||
spin_unlock_bh(&inputq->lock);
|
||||
__skb_queue_purge(&tmpq);
|
||||
|
||||
@@ -512,7 +512,7 @@ static int cfg80211_sme_connect(struct wireless_dev *wdev,
|
||||
cfg80211_sme_free(wdev);
|
||||
}
|
||||
|
||||
if (WARN_ON(wdev->conn))
|
||||
if (wdev->conn)
|
||||
return -EINPROGRESS;
|
||||
|
||||
wdev->conn = kzalloc(sizeof(*wdev->conn), GFP_KERNEL);
|
||||
|
||||
@@ -1062,6 +1062,14 @@ static int loopback_mixer_new(struct loopback *loopback, int notify)
|
||||
return -ENOMEM;
|
||||
kctl->id.device = dev;
|
||||
kctl->id.subdevice = substr;
|
||||
|
||||
/* Add the control before copying the id so that
|
||||
* the numid field of the id is set in the copy.
|
||||
*/
|
||||
err = snd_ctl_add(card, kctl);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
switch (idx) {
|
||||
case ACTIVE_IDX:
|
||||
setup->active_id = kctl->id;
|
||||
@@ -1078,9 +1086,6 @@ static int loopback_mixer_new(struct loopback *loopback, int notify)
|
||||
default:
|
||||
break;
|
||||
}
|
||||
err = snd_ctl_add(card, kctl);
|
||||
if (err < 0)
|
||||
return err;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -508,14 +508,14 @@ static struct snd_soc_dai_driver sst_platform_dai[] = {
|
||||
.channels_min = SST_STEREO,
|
||||
.channels_max = SST_STEREO,
|
||||
.rates = SNDRV_PCM_RATE_44100|SNDRV_PCM_RATE_48000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||||
},
|
||||
.capture = {
|
||||
.stream_name = "Headset Capture",
|
||||
.channels_min = 1,
|
||||
.channels_max = 2,
|
||||
.rates = SNDRV_PCM_RATE_44100|SNDRV_PCM_RATE_48000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -526,7 +526,7 @@ static struct snd_soc_dai_driver sst_platform_dai[] = {
|
||||
.channels_min = SST_STEREO,
|
||||
.channels_max = SST_STEREO,
|
||||
.rates = SNDRV_PCM_RATE_44100|SNDRV_PCM_RATE_48000,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE,
|
||||
},
|
||||
},
|
||||
{
|
||||
|
||||
@@ -91,8 +91,7 @@ static inline bool replace_android_lib(const char *filename, char *newfilename)
|
||||
if (!strncmp(filename, "/system/lib/", 12)) {
|
||||
char *ndk, *app;
|
||||
const char *arch;
|
||||
size_t ndk_length;
|
||||
size_t app_length;
|
||||
int ndk_length, app_length;
|
||||
|
||||
ndk = getenv("NDK_ROOT");
|
||||
app = getenv("APP_PLATFORM");
|
||||
@@ -120,8 +119,8 @@ static inline bool replace_android_lib(const char *filename, char *newfilename)
|
||||
if (new_length > PATH_MAX)
|
||||
return false;
|
||||
snprintf(newfilename, new_length,
|
||||
"%s/platforms/%s/arch-%s/usr/lib/%s",
|
||||
ndk, app, arch, libname);
|
||||
"%.*s/platforms/%.*s/arch-%s/usr/lib/%s",
|
||||
ndk_length, ndk, app_length, app, arch, libname);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user