mirror of
https://github.com/hardkernel/linux.git
synced 2026-03-24 19:40:21 +09:00
Merge tag 'v3.8.13.15' of git://kernel.ubuntu.com/ubuntu/linux into odroid-3.8.y
v3.8.13.15 Conflicts: drivers/ata/ahci_platform.c drivers/staging/tidspbridge/Kconfig
This commit is contained in:
@@ -603,9 +603,6 @@ tcp_limit_output_bytes - INTEGER
|
||||
typical pfifo_fast qdiscs.
|
||||
tcp_limit_output_bytes limits the number of bytes on qdisc
|
||||
or device to reduce artificial RTT/cwnd and reduce bufferbloat.
|
||||
Note: For GSO/TSO enabled flows, we try to have at least two
|
||||
packets in flight. Reducing tcp_limit_output_bytes might also
|
||||
reduce the size of individual GSO packet (64KB being the max)
|
||||
Default: 131072
|
||||
|
||||
tcp_challenge_ack_limit - INTEGER
|
||||
|
||||
2
Makefile
2
Makefile
@@ -1,7 +1,7 @@
|
||||
VERSION = 3
|
||||
PATCHLEVEL = 8
|
||||
SUBLEVEL = 13
|
||||
EXTRAVERSION = .14
|
||||
EXTRAVERSION = .15
|
||||
NAME = Remoralised Urchins Update
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
coherency-fabric@d0020200 {
|
||||
compatible = "marvell,coherency-fabric";
|
||||
reg = <0xd0020200 0xb0>,
|
||||
<0xd0021810 0x1c>;
|
||||
<0xd0021010 0x1c>;
|
||||
};
|
||||
|
||||
soc {
|
||||
|
||||
@@ -58,7 +58,7 @@ extern void __pgd_error(const char *file, int line, pgd_t);
|
||||
* mapping to be mapped at. This is particularly important for
|
||||
* non-high vector CPUs.
|
||||
*/
|
||||
#define FIRST_USER_ADDRESS PAGE_SIZE
|
||||
#define FIRST_USER_ADDRESS (PAGE_SIZE * 2)
|
||||
|
||||
/*
|
||||
* Use TASK_SIZE as the ceiling argument for free_pgtables() and
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#include <linux/init.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <video/vga.h>
|
||||
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/page.h>
|
||||
@@ -196,6 +197,8 @@ void __init footbridge_map_io(void)
|
||||
iotable_init(ebsa285_host_io_desc, ARRAY_SIZE(ebsa285_host_io_desc));
|
||||
pci_map_io_early(__phys_to_pfn(DC21285_PCI_IO));
|
||||
}
|
||||
|
||||
vga_base = PCIMEM_BASE;
|
||||
}
|
||||
|
||||
void footbridge_restart(char mode, const char *cmd)
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
#include <linux/irq.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <video/vga.h>
|
||||
|
||||
#include <asm/irq.h>
|
||||
#include <asm/mach/pci.h>
|
||||
@@ -291,7 +290,6 @@ void __init dc21285_preinit(void)
|
||||
int cfn_mode;
|
||||
|
||||
pcibios_min_mem = 0x81000000;
|
||||
vga_base = PCIMEM_BASE;
|
||||
|
||||
mem_size = (unsigned int)high_memory - PAGE_OFFSET;
|
||||
for (mem_mask = 0x00100000; mem_mask < 0x10000000; mem_mask <<= 1)
|
||||
|
||||
@@ -30,21 +30,24 @@ static const struct {
|
||||
const char *name;
|
||||
const char *trigger;
|
||||
} ebsa285_leds[] = {
|
||||
{ "ebsa285:amber", "heartbeat", },
|
||||
{ "ebsa285:green", "cpu0", },
|
||||
{ "ebsa285:amber", "cpu0", },
|
||||
{ "ebsa285:green", "heartbeat", },
|
||||
{ "ebsa285:red",},
|
||||
};
|
||||
|
||||
static unsigned char hw_led_state;
|
||||
|
||||
static void ebsa285_led_set(struct led_classdev *cdev,
|
||||
enum led_brightness b)
|
||||
{
|
||||
struct ebsa285_led *led = container_of(cdev,
|
||||
struct ebsa285_led, cdev);
|
||||
|
||||
if (b != LED_OFF)
|
||||
*XBUS_LEDS |= led->mask;
|
||||
if (b == LED_OFF)
|
||||
hw_led_state |= led->mask;
|
||||
else
|
||||
*XBUS_LEDS &= ~led->mask;
|
||||
hw_led_state &= ~led->mask;
|
||||
*XBUS_LEDS = hw_led_state;
|
||||
}
|
||||
|
||||
static enum led_brightness ebsa285_led_get(struct led_classdev *cdev)
|
||||
@@ -52,18 +55,19 @@ static enum led_brightness ebsa285_led_get(struct led_classdev *cdev)
|
||||
struct ebsa285_led *led = container_of(cdev,
|
||||
struct ebsa285_led, cdev);
|
||||
|
||||
return (*XBUS_LEDS & led->mask) ? LED_FULL : LED_OFF;
|
||||
return hw_led_state & led->mask ? LED_OFF : LED_FULL;
|
||||
}
|
||||
|
||||
static int __init ebsa285_leds_init(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (machine_is_ebsa285())
|
||||
if (!machine_is_ebsa285())
|
||||
return -ENODEV;
|
||||
|
||||
/* 3 LEDS All ON */
|
||||
*XBUS_LEDS |= XBUS_LED_AMBER | XBUS_LED_GREEN | XBUS_LED_RED;
|
||||
/* 3 LEDS all off */
|
||||
hw_led_state = XBUS_LED_AMBER | XBUS_LED_GREEN | XBUS_LED_RED;
|
||||
*XBUS_LEDS = hw_led_state;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(ebsa285_leds); i++) {
|
||||
struct ebsa285_led *led;
|
||||
|
||||
@@ -146,7 +146,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
|
||||
|
||||
info.flags = VM_UNMAPPED_AREA_TOPDOWN;
|
||||
info.length = len;
|
||||
info.low_limit = PAGE_SIZE;
|
||||
info.low_limit = FIRST_USER_ADDRESS;
|
||||
info.high_limit = mm->mmap_base;
|
||||
info.align_mask = do_align ? (PAGE_MASK & (SHMLBA - 1)) : 0;
|
||||
info.align_offset = pgoff << PAGE_SHIFT;
|
||||
|
||||
@@ -87,7 +87,8 @@ pgd_t *pgd_alloc(struct mm_struct *mm)
|
||||
init_pud = pud_offset(init_pgd, 0);
|
||||
init_pmd = pmd_offset(init_pud, 0);
|
||||
init_pte = pte_offset_map(init_pmd, 0);
|
||||
set_pte_ext(new_pte, *init_pte, 0);
|
||||
set_pte_ext(new_pte + 0, init_pte[0], 0);
|
||||
set_pte_ext(new_pte + 1, init_pte[1], 0);
|
||||
pte_unmap(init_pte);
|
||||
pte_unmap(new_pte);
|
||||
}
|
||||
|
||||
@@ -335,8 +335,11 @@ static inline void __omap_dm_timer_enable_posted(struct omap_dm_timer *timer)
|
||||
if (timer->posted)
|
||||
return;
|
||||
|
||||
if (timer->errata & OMAP_TIMER_ERRATA_I103_I767)
|
||||
if (timer->errata & OMAP_TIMER_ERRATA_I103_I767) {
|
||||
timer->posted = OMAP_TIMER_NONPOSTED;
|
||||
__omap_dm_timer_write(timer, OMAP_TIMER_IF_CTRL_REG, 0, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
__omap_dm_timer_write(timer, OMAP_TIMER_IF_CTRL_REG,
|
||||
OMAP_TIMER_CTRL_POSTED, 0);
|
||||
|
||||
@@ -437,6 +437,12 @@ static int save_user_regs(struct pt_regs *regs, struct mcontext __user *frame,
|
||||
#endif /* CONFIG_ALTIVEC */
|
||||
if (copy_fpr_to_user(&frame->mc_fregs, current))
|
||||
return 1;
|
||||
|
||||
/*
|
||||
* Clear the MSR VSX bit to indicate there is no valid state attached
|
||||
* to this context, except in the specific case below where we set it.
|
||||
*/
|
||||
msr &= ~MSR_VSX;
|
||||
#ifdef CONFIG_VSX
|
||||
/*
|
||||
* Copy VSR 0-31 upper half from thread_struct to local
|
||||
@@ -449,15 +455,7 @@ static int save_user_regs(struct pt_regs *regs, struct mcontext __user *frame,
|
||||
if (copy_vsx_to_user(&frame->mc_vsregs, current))
|
||||
return 1;
|
||||
msr |= MSR_VSX;
|
||||
} else if (!ctx_has_vsx_region)
|
||||
/*
|
||||
* With a small context structure we can't hold the VSX
|
||||
* registers, hence clear the MSR value to indicate the state
|
||||
* was not saved.
|
||||
*/
|
||||
msr &= ~MSR_VSX;
|
||||
|
||||
|
||||
}
|
||||
#endif /* CONFIG_VSX */
|
||||
#ifdef CONFIG_SPE
|
||||
/* save spe registers */
|
||||
|
||||
@@ -117,6 +117,12 @@ static long setup_sigcontext(struct sigcontext __user *sc, struct pt_regs *regs,
|
||||
flush_fp_to_thread(current);
|
||||
/* copy fpr regs and fpscr */
|
||||
err |= copy_fpr_to_user(&sc->fp_regs, current);
|
||||
|
||||
/*
|
||||
* Clear the MSR VSX bit to indicate there is no valid state attached
|
||||
* to this context, except in the specific case below where we set it.
|
||||
*/
|
||||
msr &= ~MSR_VSX;
|
||||
#ifdef CONFIG_VSX
|
||||
/*
|
||||
* Copy VSX low doubleword to local buffer for formatting,
|
||||
|
||||
@@ -35,7 +35,6 @@ static u8 *ctrblk;
|
||||
static char keylen_flag;
|
||||
|
||||
struct s390_aes_ctx {
|
||||
u8 iv[AES_BLOCK_SIZE];
|
||||
u8 key[AES_MAX_KEY_SIZE];
|
||||
long enc;
|
||||
long dec;
|
||||
@@ -56,8 +55,7 @@ struct pcc_param {
|
||||
|
||||
struct s390_xts_ctx {
|
||||
u8 key[32];
|
||||
u8 xts_param[16];
|
||||
struct pcc_param pcc;
|
||||
u8 pcc_key[32];
|
||||
long enc;
|
||||
long dec;
|
||||
int key_len;
|
||||
@@ -441,30 +439,36 @@ static int cbc_aes_set_key(struct crypto_tfm *tfm, const u8 *in_key,
|
||||
return aes_set_key(tfm, in_key, key_len);
|
||||
}
|
||||
|
||||
static int cbc_aes_crypt(struct blkcipher_desc *desc, long func, void *param,
|
||||
static int cbc_aes_crypt(struct blkcipher_desc *desc, long func,
|
||||
struct blkcipher_walk *walk)
|
||||
{
|
||||
struct s390_aes_ctx *sctx = crypto_blkcipher_ctx(desc->tfm);
|
||||
int ret = blkcipher_walk_virt(desc, walk);
|
||||
unsigned int nbytes = walk->nbytes;
|
||||
struct {
|
||||
u8 iv[AES_BLOCK_SIZE];
|
||||
u8 key[AES_MAX_KEY_SIZE];
|
||||
} param;
|
||||
|
||||
if (!nbytes)
|
||||
goto out;
|
||||
|
||||
memcpy(param, walk->iv, AES_BLOCK_SIZE);
|
||||
memcpy(param.iv, walk->iv, AES_BLOCK_SIZE);
|
||||
memcpy(param.key, sctx->key, sctx->key_len);
|
||||
do {
|
||||
/* only use complete blocks */
|
||||
unsigned int n = nbytes & ~(AES_BLOCK_SIZE - 1);
|
||||
u8 *out = walk->dst.virt.addr;
|
||||
u8 *in = walk->src.virt.addr;
|
||||
|
||||
ret = crypt_s390_kmc(func, param, out, in, n);
|
||||
ret = crypt_s390_kmc(func, ¶m, out, in, n);
|
||||
if (ret < 0 || ret != n)
|
||||
return -EIO;
|
||||
|
||||
nbytes &= AES_BLOCK_SIZE - 1;
|
||||
ret = blkcipher_walk_done(desc, walk, nbytes);
|
||||
} while ((nbytes = walk->nbytes));
|
||||
memcpy(walk->iv, param, AES_BLOCK_SIZE);
|
||||
memcpy(walk->iv, param.iv, AES_BLOCK_SIZE);
|
||||
|
||||
out:
|
||||
return ret;
|
||||
@@ -481,7 +485,7 @@ static int cbc_aes_encrypt(struct blkcipher_desc *desc,
|
||||
return fallback_blk_enc(desc, dst, src, nbytes);
|
||||
|
||||
blkcipher_walk_init(&walk, dst, src, nbytes);
|
||||
return cbc_aes_crypt(desc, sctx->enc, sctx->iv, &walk);
|
||||
return cbc_aes_crypt(desc, sctx->enc, &walk);
|
||||
}
|
||||
|
||||
static int cbc_aes_decrypt(struct blkcipher_desc *desc,
|
||||
@@ -495,7 +499,7 @@ static int cbc_aes_decrypt(struct blkcipher_desc *desc,
|
||||
return fallback_blk_dec(desc, dst, src, nbytes);
|
||||
|
||||
blkcipher_walk_init(&walk, dst, src, nbytes);
|
||||
return cbc_aes_crypt(desc, sctx->dec, sctx->iv, &walk);
|
||||
return cbc_aes_crypt(desc, sctx->dec, &walk);
|
||||
}
|
||||
|
||||
static struct crypto_alg cbc_aes_alg = {
|
||||
@@ -586,7 +590,7 @@ static int xts_aes_set_key(struct crypto_tfm *tfm, const u8 *in_key,
|
||||
xts_ctx->enc = KM_XTS_128_ENCRYPT;
|
||||
xts_ctx->dec = KM_XTS_128_DECRYPT;
|
||||
memcpy(xts_ctx->key + 16, in_key, 16);
|
||||
memcpy(xts_ctx->pcc.key + 16, in_key + 16, 16);
|
||||
memcpy(xts_ctx->pcc_key + 16, in_key + 16, 16);
|
||||
break;
|
||||
case 48:
|
||||
xts_ctx->enc = 0;
|
||||
@@ -597,7 +601,7 @@ static int xts_aes_set_key(struct crypto_tfm *tfm, const u8 *in_key,
|
||||
xts_ctx->enc = KM_XTS_256_ENCRYPT;
|
||||
xts_ctx->dec = KM_XTS_256_DECRYPT;
|
||||
memcpy(xts_ctx->key, in_key, 32);
|
||||
memcpy(xts_ctx->pcc.key, in_key + 32, 32);
|
||||
memcpy(xts_ctx->pcc_key, in_key + 32, 32);
|
||||
break;
|
||||
default:
|
||||
*flags |= CRYPTO_TFM_RES_BAD_KEY_LEN;
|
||||
@@ -616,29 +620,33 @@ static int xts_aes_crypt(struct blkcipher_desc *desc, long func,
|
||||
unsigned int nbytes = walk->nbytes;
|
||||
unsigned int n;
|
||||
u8 *in, *out;
|
||||
void *param;
|
||||
struct pcc_param pcc_param;
|
||||
struct {
|
||||
u8 key[32];
|
||||
u8 init[16];
|
||||
} xts_param;
|
||||
|
||||
if (!nbytes)
|
||||
goto out;
|
||||
|
||||
memset(xts_ctx->pcc.block, 0, sizeof(xts_ctx->pcc.block));
|
||||
memset(xts_ctx->pcc.bit, 0, sizeof(xts_ctx->pcc.bit));
|
||||
memset(xts_ctx->pcc.xts, 0, sizeof(xts_ctx->pcc.xts));
|
||||
memcpy(xts_ctx->pcc.tweak, walk->iv, sizeof(xts_ctx->pcc.tweak));
|
||||
param = xts_ctx->pcc.key + offset;
|
||||
ret = crypt_s390_pcc(func, param);
|
||||
memset(pcc_param.block, 0, sizeof(pcc_param.block));
|
||||
memset(pcc_param.bit, 0, sizeof(pcc_param.bit));
|
||||
memset(pcc_param.xts, 0, sizeof(pcc_param.xts));
|
||||
memcpy(pcc_param.tweak, walk->iv, sizeof(pcc_param.tweak));
|
||||
memcpy(pcc_param.key, xts_ctx->pcc_key, 32);
|
||||
ret = crypt_s390_pcc(func, &pcc_param.key[offset]);
|
||||
if (ret < 0)
|
||||
return -EIO;
|
||||
|
||||
memcpy(xts_ctx->xts_param, xts_ctx->pcc.xts, 16);
|
||||
param = xts_ctx->key + offset;
|
||||
memcpy(xts_param.key, xts_ctx->key, 32);
|
||||
memcpy(xts_param.init, pcc_param.xts, 16);
|
||||
do {
|
||||
/* only use complete blocks */
|
||||
n = nbytes & ~(AES_BLOCK_SIZE - 1);
|
||||
out = walk->dst.virt.addr;
|
||||
in = walk->src.virt.addr;
|
||||
|
||||
ret = crypt_s390_km(func, param, out, in, n);
|
||||
ret = crypt_s390_km(func, &xts_param.key[offset], out, in, n);
|
||||
if (ret < 0 || ret != n)
|
||||
return -EIO;
|
||||
|
||||
|
||||
@@ -27,6 +27,9 @@ ifeq ($(CONFIG_X86_32),y)
|
||||
|
||||
KBUILD_CFLAGS += -msoft-float -mregparm=3 -freg-struct-return
|
||||
|
||||
# Don't autogenerate SSE instructions
|
||||
KBUILD_CFLAGS += -mno-sse
|
||||
|
||||
# Never want PIC in a 32-bit kernel, prevent breakage with GCC built
|
||||
# with nonstandard options
|
||||
KBUILD_CFLAGS += -fno-pic
|
||||
@@ -53,8 +56,11 @@ else
|
||||
KBUILD_AFLAGS += -m64
|
||||
KBUILD_CFLAGS += -m64
|
||||
|
||||
# Don't autogenerate SSE instructions
|
||||
KBUILD_CFLAGS += -mno-sse
|
||||
|
||||
# Use -mpreferred-stack-boundary=3 if supported.
|
||||
KBUILD_CFLAGS += $(call cc-option,-mno-sse -mpreferred-stack-boundary=3)
|
||||
KBUILD_CFLAGS += $(call cc-option,-mpreferred-stack-boundary=3)
|
||||
|
||||
# FIXME - should be integrated in Makefile.cpu (Makefile_32.cpu)
|
||||
cflags-$(CONFIG_MK8) += $(call cc-option,-march=k8)
|
||||
|
||||
@@ -370,9 +370,9 @@ static inline uint64_t blkg_stat_read(struct blkg_stat *stat)
|
||||
uint64_t v;
|
||||
|
||||
do {
|
||||
start = u64_stats_fetch_begin(&stat->syncp);
|
||||
start = u64_stats_fetch_begin_bh(&stat->syncp);
|
||||
v = stat->cnt;
|
||||
} while (u64_stats_fetch_retry(&stat->syncp, start));
|
||||
} while (u64_stats_fetch_retry_bh(&stat->syncp, start));
|
||||
|
||||
return v;
|
||||
}
|
||||
@@ -426,9 +426,9 @@ static inline struct blkg_rwstat blkg_rwstat_read(struct blkg_rwstat *rwstat)
|
||||
struct blkg_rwstat tmp;
|
||||
|
||||
do {
|
||||
start = u64_stats_fetch_begin(&rwstat->syncp);
|
||||
start = u64_stats_fetch_begin_bh(&rwstat->syncp);
|
||||
tmp = *rwstat;
|
||||
} while (u64_stats_fetch_retry(&rwstat->syncp, start));
|
||||
} while (u64_stats_fetch_retry_bh(&rwstat->syncp, start));
|
||||
|
||||
return tmp;
|
||||
}
|
||||
|
||||
@@ -114,6 +114,9 @@ static ssize_t hash_sendpage(struct socket *sock, struct page *page,
|
||||
struct hash_ctx *ctx = ask->private;
|
||||
int err;
|
||||
|
||||
if (flags & MSG_SENDPAGE_NOTLAST)
|
||||
flags |= MSG_MORE;
|
||||
|
||||
lock_sock(sk);
|
||||
sg_init_table(ctx->sgl.sg, 1);
|
||||
sg_set_page(ctx->sgl.sg, page, size, offset);
|
||||
@@ -161,8 +164,6 @@ static int hash_recvmsg(struct kiocb *unused, struct socket *sock,
|
||||
else if (len < ds)
|
||||
msg->msg_flags |= MSG_TRUNC;
|
||||
|
||||
msg->msg_namelen = 0;
|
||||
|
||||
lock_sock(sk);
|
||||
if (ctx->more) {
|
||||
ctx->more = 0;
|
||||
|
||||
@@ -378,6 +378,9 @@ static ssize_t skcipher_sendpage(struct socket *sock, struct page *page,
|
||||
struct skcipher_sg_list *sgl;
|
||||
int err = -EINVAL;
|
||||
|
||||
if (flags & MSG_SENDPAGE_NOTLAST)
|
||||
flags |= MSG_MORE;
|
||||
|
||||
lock_sock(sk);
|
||||
if (!ctx->more && ctx->used)
|
||||
goto unlock;
|
||||
@@ -432,7 +435,6 @@ static int skcipher_recvmsg(struct kiocb *unused, struct socket *sock,
|
||||
long copied = 0;
|
||||
|
||||
lock_sock(sk);
|
||||
msg->msg_namelen = 0;
|
||||
for (iov = msg->msg_iov, iovlen = msg->msg_iovlen; iovlen > 0;
|
||||
iovlen--, iov++) {
|
||||
unsigned long seglen = iov->iov_len;
|
||||
|
||||
@@ -368,9 +368,10 @@ static void crypto_authenc_encrypt_done(struct crypto_async_request *req,
|
||||
if (!err) {
|
||||
struct crypto_aead *authenc = crypto_aead_reqtfm(areq);
|
||||
struct crypto_authenc_ctx *ctx = crypto_aead_ctx(authenc);
|
||||
struct ablkcipher_request *abreq = aead_request_ctx(areq);
|
||||
u8 *iv = (u8 *)(abreq + 1) +
|
||||
crypto_ablkcipher_reqsize(ctx->enc);
|
||||
struct authenc_request_ctx *areq_ctx = aead_request_ctx(areq);
|
||||
struct ablkcipher_request *abreq = (void *)(areq_ctx->tail
|
||||
+ ctx->reqoff);
|
||||
u8 *iv = (u8 *)abreq - crypto_ablkcipher_ivsize(ctx->enc);
|
||||
|
||||
err = crypto_authenc_genicv(areq, iv, 0);
|
||||
}
|
||||
|
||||
@@ -271,7 +271,8 @@ static int crypto_ccm_auth(struct aead_request *req, struct scatterlist *plain,
|
||||
}
|
||||
|
||||
/* compute plaintext into mac */
|
||||
get_data_to_compute(cipher, pctx, plain, cryptlen);
|
||||
if (cryptlen)
|
||||
get_data_to_compute(cipher, pctx, plain, cryptlen);
|
||||
|
||||
out:
|
||||
return err;
|
||||
|
||||
@@ -431,6 +431,8 @@ static const struct pci_device_id ahci_pci_tbl[] = {
|
||||
.driver_data = board_ahci_yes_fbs }, /* 88se9172 on some Gigabyte */
|
||||
{ PCI_DEVICE(0x1b4b, 0x91a3),
|
||||
.driver_data = board_ahci_yes_fbs },
|
||||
{ PCI_DEVICE(0x1b4b, 0x9230),
|
||||
.driver_data = board_ahci_yes_fbs },
|
||||
|
||||
/* Promise */
|
||||
{ PCI_VDEVICE(PROMISE, 0x3f20), board_ahci }, /* PDC42819 */
|
||||
|
||||
@@ -344,6 +344,13 @@ disable_unprepare_clk:
|
||||
|
||||
static SIMPLE_DEV_PM_OPS(ahci_pm_ops, ahci_suspend, ahci_resume);
|
||||
|
||||
static const struct of_device_id ahci_of_match[] = {
|
||||
{ .compatible = "snps,spear-ahci", },
|
||||
{ .compatible = "snps,exynos5440-ahci", },
|
||||
{},
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, ahci_of_match);
|
||||
|
||||
static struct platform_driver ahci_driver = {
|
||||
.probe = ahci_probe,
|
||||
.remove = ata_platform_remove_one,
|
||||
|
||||
@@ -3614,6 +3614,7 @@ int ata_scsi_add_hosts(struct ata_host *host, struct scsi_host_template *sht)
|
||||
shost->max_lun = 1;
|
||||
shost->max_channel = 1;
|
||||
shost->max_cmd_len = 16;
|
||||
shost->no_write_same = 1;
|
||||
|
||||
/* Schedule policy is determined by ->qc_defer()
|
||||
* callback and it needs to see every deferred qc.
|
||||
|
||||
@@ -3511,7 +3511,7 @@ static int init_card(struct atm_dev *dev)
|
||||
tmp = dev_get_by_name(&init_net, tname); /* jhs: was "tmp = dev_get(tname);" */
|
||||
if (tmp) {
|
||||
memcpy(card->atmdev->esi, tmp->dev_addr, 6);
|
||||
|
||||
dev_put(tmp);
|
||||
printk("%s: ESI %pM\n", card->name, card->atmdev->esi);
|
||||
}
|
||||
/*
|
||||
|
||||
@@ -32,11 +32,23 @@
|
||||
#include <linux/atomic.h>
|
||||
#include <linux/pid_namespace.h>
|
||||
|
||||
#include <asm/unaligned.h>
|
||||
|
||||
#include <linux/cn_proc.h>
|
||||
|
||||
#define CN_PROC_MSG_SIZE (sizeof(struct cn_msg) + sizeof(struct proc_event))
|
||||
/*
|
||||
* Size of a cn_msg followed by a proc_event structure. Since the
|
||||
* sizeof struct cn_msg is a multiple of 4 bytes, but not 8 bytes, we
|
||||
* add one 4-byte word to the size here, and then start the actual
|
||||
* cn_msg structure 4 bytes into the stack buffer. The result is that
|
||||
* the immediately following proc_event structure is aligned to 8 bytes.
|
||||
*/
|
||||
#define CN_PROC_MSG_SIZE (sizeof(struct cn_msg) + sizeof(struct proc_event) + 4)
|
||||
|
||||
/* See comment above; we test our assumption about sizeof struct cn_msg here. */
|
||||
static inline struct cn_msg *buffer_to_cn_msg(__u8 *buffer)
|
||||
{
|
||||
BUILD_BUG_ON(sizeof(struct cn_msg) != 20);
|
||||
return (struct cn_msg *)(buffer + 4);
|
||||
}
|
||||
|
||||
static atomic_t proc_event_num_listeners = ATOMIC_INIT(0);
|
||||
static struct cb_id cn_proc_event_id = { CN_IDX_PROC, CN_VAL_PROC };
|
||||
@@ -56,19 +68,19 @@ void proc_fork_connector(struct task_struct *task)
|
||||
{
|
||||
struct cn_msg *msg;
|
||||
struct proc_event *ev;
|
||||
__u8 buffer[CN_PROC_MSG_SIZE];
|
||||
__u8 buffer[CN_PROC_MSG_SIZE] __aligned(8);
|
||||
struct timespec ts;
|
||||
struct task_struct *parent;
|
||||
|
||||
if (atomic_read(&proc_event_num_listeners) < 1)
|
||||
return;
|
||||
|
||||
msg = (struct cn_msg *)buffer;
|
||||
msg = buffer_to_cn_msg(buffer);
|
||||
ev = (struct proc_event *)msg->data;
|
||||
memset(&ev->event_data, 0, sizeof(ev->event_data));
|
||||
get_seq(&msg->seq, &ev->cpu);
|
||||
ktime_get_ts(&ts); /* get high res monotonic timestamp */
|
||||
put_unaligned(timespec_to_ns(&ts), (__u64 *)&ev->timestamp_ns);
|
||||
ev->timestamp_ns = timespec_to_ns(&ts);
|
||||
ev->what = PROC_EVENT_FORK;
|
||||
rcu_read_lock();
|
||||
parent = rcu_dereference(task->real_parent);
|
||||
@@ -91,17 +103,17 @@ void proc_exec_connector(struct task_struct *task)
|
||||
struct cn_msg *msg;
|
||||
struct proc_event *ev;
|
||||
struct timespec ts;
|
||||
__u8 buffer[CN_PROC_MSG_SIZE];
|
||||
__u8 buffer[CN_PROC_MSG_SIZE] __aligned(8);
|
||||
|
||||
if (atomic_read(&proc_event_num_listeners) < 1)
|
||||
return;
|
||||
|
||||
msg = (struct cn_msg *)buffer;
|
||||
msg = buffer_to_cn_msg(buffer);
|
||||
ev = (struct proc_event *)msg->data;
|
||||
memset(&ev->event_data, 0, sizeof(ev->event_data));
|
||||
get_seq(&msg->seq, &ev->cpu);
|
||||
ktime_get_ts(&ts); /* get high res monotonic timestamp */
|
||||
put_unaligned(timespec_to_ns(&ts), (__u64 *)&ev->timestamp_ns);
|
||||
ev->timestamp_ns = timespec_to_ns(&ts);
|
||||
ev->what = PROC_EVENT_EXEC;
|
||||
ev->event_data.exec.process_pid = task->pid;
|
||||
ev->event_data.exec.process_tgid = task->tgid;
|
||||
@@ -117,14 +129,14 @@ void proc_id_connector(struct task_struct *task, int which_id)
|
||||
{
|
||||
struct cn_msg *msg;
|
||||
struct proc_event *ev;
|
||||
__u8 buffer[CN_PROC_MSG_SIZE];
|
||||
__u8 buffer[CN_PROC_MSG_SIZE] __aligned(8);
|
||||
struct timespec ts;
|
||||
const struct cred *cred;
|
||||
|
||||
if (atomic_read(&proc_event_num_listeners) < 1)
|
||||
return;
|
||||
|
||||
msg = (struct cn_msg *)buffer;
|
||||
msg = buffer_to_cn_msg(buffer);
|
||||
ev = (struct proc_event *)msg->data;
|
||||
memset(&ev->event_data, 0, sizeof(ev->event_data));
|
||||
ev->what = which_id;
|
||||
@@ -145,7 +157,7 @@ void proc_id_connector(struct task_struct *task, int which_id)
|
||||
rcu_read_unlock();
|
||||
get_seq(&msg->seq, &ev->cpu);
|
||||
ktime_get_ts(&ts); /* get high res monotonic timestamp */
|
||||
put_unaligned(timespec_to_ns(&ts), (__u64 *)&ev->timestamp_ns);
|
||||
ev->timestamp_ns = timespec_to_ns(&ts);
|
||||
|
||||
memcpy(&msg->id, &cn_proc_event_id, sizeof(msg->id));
|
||||
msg->ack = 0; /* not used */
|
||||
@@ -159,17 +171,17 @@ void proc_sid_connector(struct task_struct *task)
|
||||
struct cn_msg *msg;
|
||||
struct proc_event *ev;
|
||||
struct timespec ts;
|
||||
__u8 buffer[CN_PROC_MSG_SIZE];
|
||||
__u8 buffer[CN_PROC_MSG_SIZE] __aligned(8);
|
||||
|
||||
if (atomic_read(&proc_event_num_listeners) < 1)
|
||||
return;
|
||||
|
||||
msg = (struct cn_msg *)buffer;
|
||||
msg = buffer_to_cn_msg(buffer);
|
||||
ev = (struct proc_event *)msg->data;
|
||||
memset(&ev->event_data, 0, sizeof(ev->event_data));
|
||||
get_seq(&msg->seq, &ev->cpu);
|
||||
ktime_get_ts(&ts); /* get high res monotonic timestamp */
|
||||
put_unaligned(timespec_to_ns(&ts), (__u64 *)&ev->timestamp_ns);
|
||||
ev->timestamp_ns = timespec_to_ns(&ts);
|
||||
ev->what = PROC_EVENT_SID;
|
||||
ev->event_data.sid.process_pid = task->pid;
|
||||
ev->event_data.sid.process_tgid = task->tgid;
|
||||
@@ -186,17 +198,17 @@ void proc_ptrace_connector(struct task_struct *task, int ptrace_id)
|
||||
struct cn_msg *msg;
|
||||
struct proc_event *ev;
|
||||
struct timespec ts;
|
||||
__u8 buffer[CN_PROC_MSG_SIZE];
|
||||
__u8 buffer[CN_PROC_MSG_SIZE] __aligned(8);
|
||||
|
||||
if (atomic_read(&proc_event_num_listeners) < 1)
|
||||
return;
|
||||
|
||||
msg = (struct cn_msg *)buffer;
|
||||
msg = buffer_to_cn_msg(buffer);
|
||||
ev = (struct proc_event *)msg->data;
|
||||
memset(&ev->event_data, 0, sizeof(ev->event_data));
|
||||
get_seq(&msg->seq, &ev->cpu);
|
||||
ktime_get_ts(&ts); /* get high res monotonic timestamp */
|
||||
put_unaligned(timespec_to_ns(&ts), (__u64 *)&ev->timestamp_ns);
|
||||
ev->timestamp_ns = timespec_to_ns(&ts);
|
||||
ev->what = PROC_EVENT_PTRACE;
|
||||
ev->event_data.ptrace.process_pid = task->pid;
|
||||
ev->event_data.ptrace.process_tgid = task->tgid;
|
||||
@@ -221,17 +233,17 @@ void proc_comm_connector(struct task_struct *task)
|
||||
struct cn_msg *msg;
|
||||
struct proc_event *ev;
|
||||
struct timespec ts;
|
||||
__u8 buffer[CN_PROC_MSG_SIZE];
|
||||
__u8 buffer[CN_PROC_MSG_SIZE] __aligned(8);
|
||||
|
||||
if (atomic_read(&proc_event_num_listeners) < 1)
|
||||
return;
|
||||
|
||||
msg = (struct cn_msg *)buffer;
|
||||
msg = buffer_to_cn_msg(buffer);
|
||||
ev = (struct proc_event *)msg->data;
|
||||
memset(&ev->event_data, 0, sizeof(ev->event_data));
|
||||
get_seq(&msg->seq, &ev->cpu);
|
||||
ktime_get_ts(&ts); /* get high res monotonic timestamp */
|
||||
put_unaligned(timespec_to_ns(&ts), (__u64 *)&ev->timestamp_ns);
|
||||
ev->timestamp_ns = timespec_to_ns(&ts);
|
||||
ev->what = PROC_EVENT_COMM;
|
||||
ev->event_data.comm.process_pid = task->pid;
|
||||
ev->event_data.comm.process_tgid = task->tgid;
|
||||
@@ -248,18 +260,18 @@ void proc_exit_connector(struct task_struct *task)
|
||||
{
|
||||
struct cn_msg *msg;
|
||||
struct proc_event *ev;
|
||||
__u8 buffer[CN_PROC_MSG_SIZE];
|
||||
__u8 buffer[CN_PROC_MSG_SIZE] __aligned(8);
|
||||
struct timespec ts;
|
||||
|
||||
if (atomic_read(&proc_event_num_listeners) < 1)
|
||||
return;
|
||||
|
||||
msg = (struct cn_msg *)buffer;
|
||||
msg = buffer_to_cn_msg(buffer);
|
||||
ev = (struct proc_event *)msg->data;
|
||||
memset(&ev->event_data, 0, sizeof(ev->event_data));
|
||||
get_seq(&msg->seq, &ev->cpu);
|
||||
ktime_get_ts(&ts); /* get high res monotonic timestamp */
|
||||
put_unaligned(timespec_to_ns(&ts), (__u64 *)&ev->timestamp_ns);
|
||||
ev->timestamp_ns = timespec_to_ns(&ts);
|
||||
ev->what = PROC_EVENT_EXIT;
|
||||
ev->event_data.exit.process_pid = task->pid;
|
||||
ev->event_data.exit.process_tgid = task->tgid;
|
||||
@@ -286,18 +298,18 @@ static void cn_proc_ack(int err, int rcvd_seq, int rcvd_ack)
|
||||
{
|
||||
struct cn_msg *msg;
|
||||
struct proc_event *ev;
|
||||
__u8 buffer[CN_PROC_MSG_SIZE];
|
||||
__u8 buffer[CN_PROC_MSG_SIZE] __aligned(8);
|
||||
struct timespec ts;
|
||||
|
||||
if (atomic_read(&proc_event_num_listeners) < 1)
|
||||
return;
|
||||
|
||||
msg = (struct cn_msg *)buffer;
|
||||
msg = buffer_to_cn_msg(buffer);
|
||||
ev = (struct proc_event *)msg->data;
|
||||
memset(&ev->event_data, 0, sizeof(ev->event_data));
|
||||
msg->seq = rcvd_seq;
|
||||
ktime_get_ts(&ts); /* get high res monotonic timestamp */
|
||||
put_unaligned(timespec_to_ns(&ts), (__u64 *)&ev->timestamp_ns);
|
||||
ev->timestamp_ns = timespec_to_ns(&ts);
|
||||
ev->cpu = -1;
|
||||
ev->what = PROC_EVENT_NONE;
|
||||
ev->event_data.ack.err = err;
|
||||
|
||||
@@ -460,11 +460,13 @@ EXPORT_SYMBOL_GPL(cpuidle_register_device);
|
||||
*/
|
||||
void cpuidle_unregister_device(struct cpuidle_device *dev)
|
||||
{
|
||||
struct cpuidle_driver *drv = cpuidle_get_cpu_driver(dev);
|
||||
struct cpuidle_driver *drv;
|
||||
|
||||
if (dev->registered == 0)
|
||||
if (!dev || dev->registered == 0)
|
||||
return;
|
||||
|
||||
drv = cpuidle_get_cpu_driver(dev);
|
||||
|
||||
cpuidle_pause_and_lock();
|
||||
|
||||
cpuidle_disable_device(dev);
|
||||
|
||||
@@ -1628,6 +1628,7 @@ static struct scsi_host_template scsi_driver_template = {
|
||||
.cmd_per_lun = 1,
|
||||
.can_queue = 1,
|
||||
.sdev_attrs = sbp2_scsi_sysfs_attrs,
|
||||
.no_write_same = 1,
|
||||
};
|
||||
|
||||
MODULE_AUTHOR("Kristian Hoegsberg <krh@bitplanet.net>");
|
||||
|
||||
@@ -1314,6 +1314,12 @@ static int efi_pstore_close(struct pstore_info *psi)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline u64 generic_id(unsigned long timestamp,
|
||||
unsigned int part, int count)
|
||||
{
|
||||
return (timestamp * 100 + part) * 1000 + count;
|
||||
}
|
||||
|
||||
static ssize_t efi_pstore_read(u64 *id, enum pstore_type_id *type,
|
||||
int *count, struct timespec *timespec,
|
||||
char **buf, struct pstore_info *psi)
|
||||
@@ -1334,7 +1340,7 @@ static ssize_t efi_pstore_read(u64 *id, enum pstore_type_id *type,
|
||||
}
|
||||
if (sscanf(name, "dump-type%u-%u-%d-%lu",
|
||||
type, &part, &cnt, &time) == 4) {
|
||||
*id = part;
|
||||
*id = generic_id(time, part, cnt);
|
||||
*count = cnt;
|
||||
timespec->tv_sec = time;
|
||||
timespec->tv_nsec = 0;
|
||||
@@ -1345,7 +1351,7 @@ static ssize_t efi_pstore_read(u64 *id, enum pstore_type_id *type,
|
||||
* which doesn't support holding
|
||||
* multiple logs, remains.
|
||||
*/
|
||||
*id = part;
|
||||
*id = generic_id(time, part, cnt);
|
||||
*count = 0;
|
||||
timespec->tv_sec = time;
|
||||
timespec->tv_nsec = 0;
|
||||
@@ -1436,9 +1442,11 @@ static int efi_pstore_erase(enum pstore_type_id type, u64 id, int count,
|
||||
struct efivars *efivars = psi->data;
|
||||
struct efivar_entry *entry, *found = NULL;
|
||||
int i;
|
||||
unsigned int part;
|
||||
|
||||
sprintf(name, "dump-type%u-%u-%d-%lu", type, (unsigned int)id, count,
|
||||
time.tv_sec);
|
||||
do_div(id, 1000);
|
||||
part = do_div(id, 100);
|
||||
sprintf(name, "dump-type%u-%u-%d-%lu", type, part, count, time.tv_sec);
|
||||
|
||||
spin_lock_irq(&efivars->lock);
|
||||
|
||||
|
||||
@@ -69,10 +69,14 @@ static int mpc8572_gpio_get(struct gpio_chip *gc, unsigned int gpio)
|
||||
u32 val;
|
||||
struct of_mm_gpio_chip *mm = to_of_mm_gpio_chip(gc);
|
||||
struct mpc8xxx_gpio_chip *mpc8xxx_gc = to_mpc8xxx_gpio_chip(mm);
|
||||
u32 out_mask, out_shadow;
|
||||
|
||||
val = in_be32(mm->regs + GPIO_DAT) & ~in_be32(mm->regs + GPIO_DIR);
|
||||
out_mask = in_be32(mm->regs + GPIO_DIR);
|
||||
|
||||
return (val | mpc8xxx_gc->data) & mpc8xxx_gpio2mask(gpio);
|
||||
val = in_be32(mm->regs + GPIO_DAT) & ~out_mask;
|
||||
out_shadow = mpc8xxx_gc->data & out_mask;
|
||||
|
||||
return (val | out_shadow) & mpc8xxx_gpio2mask(gpio);
|
||||
}
|
||||
|
||||
static int mpc8xxx_gpio_get(struct gpio_chip *gc, unsigned int gpio)
|
||||
|
||||
@@ -78,7 +78,7 @@ struct mvebu_gpio_chip {
|
||||
spinlock_t lock;
|
||||
void __iomem *membase;
|
||||
void __iomem *percpu_membase;
|
||||
unsigned int irqbase;
|
||||
int irqbase;
|
||||
struct irq_domain *domain;
|
||||
int soc_variant;
|
||||
};
|
||||
|
||||
@@ -1083,8 +1083,10 @@ isdnloop_start(isdnloop_card *card, isdnloop_sdef *sdefp)
|
||||
spin_unlock_irqrestore(&card->isdnloop_lock, flags);
|
||||
return -ENOMEM;
|
||||
}
|
||||
for (i = 0; i < 3; i++)
|
||||
strcpy(card->s0num[i], sdef.num[i]);
|
||||
for (i = 0; i < 3; i++) {
|
||||
strlcpy(card->s0num[i], sdef.num[i],
|
||||
sizeof(card->s0num[0]));
|
||||
}
|
||||
break;
|
||||
case ISDN_PTYPE_1TR6:
|
||||
if (isdnloop_fake(card, "DRV1.04TC-1TR6-CAPI-CNS-BASIS-29.11.95",
|
||||
@@ -1097,7 +1099,7 @@ isdnloop_start(isdnloop_card *card, isdnloop_sdef *sdefp)
|
||||
spin_unlock_irqrestore(&card->isdnloop_lock, flags);
|
||||
return -ENOMEM;
|
||||
}
|
||||
strcpy(card->s0num[0], sdef.num[0]);
|
||||
strlcpy(card->s0num[0], sdef.num[0], sizeof(card->s0num[0]));
|
||||
card->s0num[1][0] = '\0';
|
||||
card->s0num[2][0] = '\0';
|
||||
break;
|
||||
|
||||
@@ -117,7 +117,6 @@ mISDN_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
{
|
||||
struct sk_buff *skb;
|
||||
struct sock *sk = sock->sk;
|
||||
struct sockaddr_mISDN *maddr;
|
||||
|
||||
int copied, err;
|
||||
|
||||
@@ -135,9 +134,9 @@ mISDN_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
if (!skb)
|
||||
return err;
|
||||
|
||||
if (msg->msg_namelen >= sizeof(struct sockaddr_mISDN)) {
|
||||
msg->msg_namelen = sizeof(struct sockaddr_mISDN);
|
||||
maddr = (struct sockaddr_mISDN *)msg->msg_name;
|
||||
if (msg->msg_name) {
|
||||
struct sockaddr_mISDN *maddr = msg->msg_name;
|
||||
|
||||
maddr->family = AF_ISDN;
|
||||
maddr->dev = _pms(sk)->dev->id;
|
||||
if ((sk->sk_protocol == ISDN_P_LAPD_TE) ||
|
||||
@@ -150,11 +149,7 @@ mISDN_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
maddr->sapi = _pms(sk)->ch.addr & 0xFF;
|
||||
maddr->tei = (_pms(sk)->ch.addr >> 8) & 0xFF;
|
||||
}
|
||||
} else {
|
||||
if (msg->msg_namelen)
|
||||
printk(KERN_WARNING "%s: too small namelen %d\n",
|
||||
__func__, msg->msg_namelen);
|
||||
msg->msg_namelen = 0;
|
||||
msg->msg_namelen = sizeof(*maddr);
|
||||
}
|
||||
|
||||
copied = skb->len + MISDN_HEADER_LEN;
|
||||
|
||||
@@ -31,7 +31,7 @@ static int cxd2820r_wr_regs_i2c(struct cxd2820r_priv *priv, u8 i2c, u8 reg,
|
||||
{
|
||||
.addr = i2c,
|
||||
.flags = 0,
|
||||
.len = sizeof(buf),
|
||||
.len = len + 1,
|
||||
.buf = buf,
|
||||
}
|
||||
};
|
||||
@@ -65,7 +65,7 @@ static int cxd2820r_rd_regs_i2c(struct cxd2820r_priv *priv, u8 i2c, u8 reg,
|
||||
}, {
|
||||
.addr = i2c,
|
||||
.flags = I2C_M_RD,
|
||||
.len = sizeof(buf),
|
||||
.len = len,
|
||||
.buf = buf,
|
||||
}
|
||||
};
|
||||
|
||||
@@ -198,6 +198,13 @@ static void enclosure_remove_links(struct enclosure_component *cdev)
|
||||
{
|
||||
char name[ENCLOSURE_NAME_SIZE];
|
||||
|
||||
/*
|
||||
* In odd circumstances, like multipath devices, something else may
|
||||
* already have removed the links, so check for this condition first.
|
||||
*/
|
||||
if (!cdev->dev->kobj.sd)
|
||||
return;
|
||||
|
||||
enclosure_link_name(cdev, name);
|
||||
sysfs_remove_link(&cdev->dev->kobj, name);
|
||||
sysfs_remove_link(&cdev->cdev.kobj, "device");
|
||||
|
||||
@@ -533,8 +533,9 @@ static ssize_t bonding_store_arp_interval(struct device *d,
|
||||
goto out;
|
||||
}
|
||||
if (bond->params.mode == BOND_MODE_ALB ||
|
||||
bond->params.mode == BOND_MODE_TLB) {
|
||||
pr_info("%s: ARP monitoring cannot be used with ALB/TLB. Only MII monitoring is supported on %s.\n",
|
||||
bond->params.mode == BOND_MODE_TLB ||
|
||||
bond->params.mode == BOND_MODE_8023AD) {
|
||||
pr_info("%s: ARP monitoring cannot be used with ALB/TLB/802.3ad. Only MII monitoring is supported on %s.\n",
|
||||
bond->dev->name, bond->dev->name);
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
@@ -692,6 +693,8 @@ static ssize_t bonding_store_downdelay(struct device *d,
|
||||
int new_value, ret = count;
|
||||
struct bonding *bond = to_bond(d);
|
||||
|
||||
if (!rtnl_trylock())
|
||||
return restart_syscall();
|
||||
if (!(bond->params.miimon)) {
|
||||
pr_err("%s: Unable to set down delay as MII monitoring is disabled\n",
|
||||
bond->dev->name);
|
||||
@@ -725,6 +728,7 @@ static ssize_t bonding_store_downdelay(struct device *d,
|
||||
}
|
||||
|
||||
out:
|
||||
rtnl_unlock();
|
||||
return ret;
|
||||
}
|
||||
static DEVICE_ATTR(downdelay, S_IRUGO | S_IWUSR,
|
||||
@@ -747,6 +751,8 @@ static ssize_t bonding_store_updelay(struct device *d,
|
||||
int new_value, ret = count;
|
||||
struct bonding *bond = to_bond(d);
|
||||
|
||||
if (!rtnl_trylock())
|
||||
return restart_syscall();
|
||||
if (!(bond->params.miimon)) {
|
||||
pr_err("%s: Unable to set up delay as MII monitoring is disabled\n",
|
||||
bond->dev->name);
|
||||
@@ -780,6 +786,7 @@ static ssize_t bonding_store_updelay(struct device *d,
|
||||
}
|
||||
|
||||
out:
|
||||
rtnl_unlock();
|
||||
return ret;
|
||||
}
|
||||
static DEVICE_ATTR(updelay, S_IRUGO | S_IWUSR,
|
||||
|
||||
@@ -709,22 +709,31 @@ static int c_can_set_mode(struct net_device *dev, enum can_mode mode)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int c_can_get_berr_counter(const struct net_device *dev,
|
||||
struct can_berr_counter *bec)
|
||||
static int __c_can_get_berr_counter(const struct net_device *dev,
|
||||
struct can_berr_counter *bec)
|
||||
{
|
||||
unsigned int reg_err_counter;
|
||||
struct c_can_priv *priv = netdev_priv(dev);
|
||||
|
||||
c_can_pm_runtime_get_sync(priv);
|
||||
|
||||
reg_err_counter = priv->read_reg(priv, C_CAN_ERR_CNT_REG);
|
||||
bec->rxerr = (reg_err_counter & ERR_CNT_REC_MASK) >>
|
||||
ERR_CNT_REC_SHIFT;
|
||||
bec->txerr = reg_err_counter & ERR_CNT_TEC_MASK;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int c_can_get_berr_counter(const struct net_device *dev,
|
||||
struct can_berr_counter *bec)
|
||||
{
|
||||
struct c_can_priv *priv = netdev_priv(dev);
|
||||
int err;
|
||||
|
||||
c_can_pm_runtime_get_sync(priv);
|
||||
err = __c_can_get_berr_counter(dev, bec);
|
||||
c_can_pm_runtime_put_sync(priv);
|
||||
|
||||
return 0;
|
||||
return err;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -868,7 +877,7 @@ static int c_can_handle_state_change(struct net_device *dev,
|
||||
if (unlikely(!skb))
|
||||
return 0;
|
||||
|
||||
c_can_get_berr_counter(dev, &bec);
|
||||
__c_can_get_berr_counter(dev, &bec);
|
||||
reg_err_counter = priv->read_reg(priv, C_CAN_ERR_CNT_REG);
|
||||
rx_err_passive = (reg_err_counter & ERR_CNT_RP_MASK) >>
|
||||
ERR_CNT_RP_SHIFT;
|
||||
|
||||
@@ -1010,7 +1010,6 @@ static int flexcan_probe(struct platform_device *pdev)
|
||||
err = PTR_ERR(clk_ipg);
|
||||
goto failed_clock;
|
||||
}
|
||||
clock_freq = clk_get_rate(clk_ipg);
|
||||
|
||||
clk_per = devm_clk_get(&pdev->dev, "per");
|
||||
if (IS_ERR(clk_per)) {
|
||||
@@ -1018,6 +1017,7 @@ static int flexcan_probe(struct platform_device *pdev)
|
||||
err = PTR_ERR(clk_per);
|
||||
goto failed_clock;
|
||||
}
|
||||
clock_freq = clk_get_rate(clk_per);
|
||||
}
|
||||
|
||||
mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
|
||||
@@ -490,19 +490,19 @@ irqreturn_t sja1000_interrupt(int irq, void *dev_id)
|
||||
uint8_t isrc, status;
|
||||
int n = 0;
|
||||
|
||||
if (priv->pre_irq)
|
||||
priv->pre_irq(priv);
|
||||
|
||||
/* Shared interrupts and IRQ off? */
|
||||
if (priv->read_reg(priv, REG_IER) == IRQ_OFF)
|
||||
return IRQ_NONE;
|
||||
|
||||
if (priv->pre_irq)
|
||||
priv->pre_irq(priv);
|
||||
|
||||
while ((isrc = priv->read_reg(priv, REG_IR)) && (n < SJA1000_MAX_IRQ)) {
|
||||
n++;
|
||||
|
||||
status = priv->read_reg(priv, SJA1000_REG_SR);
|
||||
/* check for absent controller due to hw unplug */
|
||||
if (status == 0xFF && sja1000_is_absent(priv))
|
||||
return IRQ_NONE;
|
||||
goto out;
|
||||
|
||||
if (isrc & IRQ_WUI)
|
||||
netdev_warn(dev, "wakeup interrupt\n");
|
||||
@@ -529,7 +529,7 @@ irqreturn_t sja1000_interrupt(int irq, void *dev_id)
|
||||
status = priv->read_reg(priv, SJA1000_REG_SR);
|
||||
/* check for absent controller */
|
||||
if (status == 0xFF && sja1000_is_absent(priv))
|
||||
return IRQ_NONE;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
if (isrc & (IRQ_DOI | IRQ_EI | IRQ_BEI | IRQ_EPI | IRQ_ALI)) {
|
||||
@@ -537,8 +537,9 @@ irqreturn_t sja1000_interrupt(int irq, void *dev_id)
|
||||
if (sja1000_err(dev, isrc, status))
|
||||
break;
|
||||
}
|
||||
n++;
|
||||
}
|
||||
|
||||
out:
|
||||
if (priv->post_irq)
|
||||
priv->post_irq(priv);
|
||||
|
||||
|
||||
@@ -678,9 +678,6 @@ static void cp_tx (struct cp_private *cp)
|
||||
le32_to_cpu(txd->opts1) & 0xffff,
|
||||
PCI_DMA_TODEVICE);
|
||||
|
||||
bytes_compl += skb->len;
|
||||
pkts_compl++;
|
||||
|
||||
if (status & LastFrag) {
|
||||
if (status & (TxError | TxFIFOUnder)) {
|
||||
netif_dbg(cp, tx_err, cp->dev,
|
||||
@@ -702,6 +699,8 @@ static void cp_tx (struct cp_private *cp)
|
||||
netif_dbg(cp, tx_done, cp->dev,
|
||||
"tx done, slot %d\n", tx_tail);
|
||||
}
|
||||
bytes_compl += skb->len;
|
||||
pkts_compl++;
|
||||
dev_kfree_skb_irq(skb);
|
||||
}
|
||||
|
||||
|
||||
@@ -3414,6 +3414,11 @@ static void rtl8168g_1_hw_phy_config(struct rtl8169_private *tp)
|
||||
rtl_w1w0_phy_ocp(tp, 0xa438, 0x8000, 0x0000);
|
||||
|
||||
rtl_w1w0_phy_ocp(tp, 0xc422, 0x4000, 0x2000);
|
||||
|
||||
/* Check ALDPS bit, disable it if enabled */
|
||||
rtl_writephy(tp, 0x1f, 0x0a43);
|
||||
if (rtl_readphy(tp, 0x10) & 0x0004)
|
||||
rtl_w1w0_phy(tp, 0x10, 0x0000, 0x0004);
|
||||
}
|
||||
|
||||
static void rtl8102e_hw_phy_config(struct rtl8169_private *tp)
|
||||
|
||||
@@ -46,7 +46,8 @@
|
||||
defined(CONFIG_MACH_LITTLETON) ||\
|
||||
defined(CONFIG_MACH_ZYLONITE2) ||\
|
||||
defined(CONFIG_ARCH_VIPER) ||\
|
||||
defined(CONFIG_MACH_STARGATE2)
|
||||
defined(CONFIG_MACH_STARGATE2) ||\
|
||||
defined(CONFIG_ARCH_VERSATILE)
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
|
||||
@@ -206,23 +207,6 @@ SMC_outw(u16 val, void __iomem *ioaddr, int reg)
|
||||
#define RPC_LSA_DEFAULT RPC_LED_TX_RX
|
||||
#define RPC_LSB_DEFAULT RPC_LED_100_10
|
||||
|
||||
#elif defined(CONFIG_ARCH_VERSATILE)
|
||||
|
||||
#define SMC_CAN_USE_8BIT 1
|
||||
#define SMC_CAN_USE_16BIT 1
|
||||
#define SMC_CAN_USE_32BIT 1
|
||||
#define SMC_NOWAIT 1
|
||||
|
||||
#define SMC_inb(a, r) readb((a) + (r))
|
||||
#define SMC_inw(a, r) readw((a) + (r))
|
||||
#define SMC_inl(a, r) readl((a) + (r))
|
||||
#define SMC_outb(v, a, r) writeb(v, (a) + (r))
|
||||
#define SMC_outw(v, a, r) writew(v, (a) + (r))
|
||||
#define SMC_outl(v, a, r) writel(v, (a) + (r))
|
||||
#define SMC_insl(a, r, p, l) readsl((a) + (r), p, l)
|
||||
#define SMC_outsl(a, r, p, l) writesl((a) + (r), p, l)
|
||||
#define SMC_IRQ_FLAGS (-1) /* from resource */
|
||||
|
||||
#elif defined(CONFIG_MN10300)
|
||||
|
||||
/*
|
||||
|
||||
@@ -672,6 +672,7 @@ static ssize_t macvtap_get_user(struct macvtap_queue *q, struct msghdr *m,
|
||||
const struct iovec *iv, unsigned long total_len,
|
||||
size_t count, int noblock)
|
||||
{
|
||||
int good_linear = SKB_MAX_HEAD(NET_IP_ALIGN);
|
||||
struct sk_buff *skb;
|
||||
struct macvlan_dev *vlan;
|
||||
unsigned long len = total_len;
|
||||
@@ -714,6 +715,8 @@ static ssize_t macvtap_get_user(struct macvtap_queue *q, struct msghdr *m,
|
||||
|
||||
if (m && m->msg_control && sock_flag(&q->sk, SOCK_ZEROCOPY)) {
|
||||
copylen = vnet_hdr.hdr_len ? vnet_hdr.hdr_len : GOODCOPY_LEN;
|
||||
if (copylen > good_linear)
|
||||
copylen = good_linear;
|
||||
linear = copylen;
|
||||
if (iov_pages(iv, vnet_hdr_len + copylen, count)
|
||||
<= MAX_SKB_FRAGS)
|
||||
@@ -722,7 +725,10 @@ static ssize_t macvtap_get_user(struct macvtap_queue *q, struct msghdr *m,
|
||||
|
||||
if (!zerocopy) {
|
||||
copylen = len;
|
||||
linear = vnet_hdr.hdr_len;
|
||||
if (vnet_hdr.hdr_len > good_linear)
|
||||
linear = good_linear;
|
||||
else
|
||||
linear = vnet_hdr.hdr_len;
|
||||
}
|
||||
|
||||
skb = macvtap_alloc_skb(&q->sk, NET_IP_ALIGN, copylen,
|
||||
|
||||
@@ -979,8 +979,6 @@ static int pppoe_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
if (error < 0)
|
||||
goto end;
|
||||
|
||||
m->msg_namelen = 0;
|
||||
|
||||
if (skb) {
|
||||
total_len = min_t(size_t, total_len, skb->len);
|
||||
error = skb_copy_datagram_iovec(skb, 0, m->msg_iov, total_len);
|
||||
|
||||
@@ -1070,6 +1070,7 @@ static ssize_t tun_get_user(struct tun_struct *tun, struct tun_file *tfile,
|
||||
struct sk_buff *skb;
|
||||
size_t len = total_len, align = NET_SKB_PAD, linear;
|
||||
struct virtio_net_hdr gso = { 0 };
|
||||
int good_linear;
|
||||
int offset = 0;
|
||||
int copylen;
|
||||
bool zerocopy = false;
|
||||
@@ -1110,12 +1111,16 @@ static ssize_t tun_get_user(struct tun_struct *tun, struct tun_file *tfile,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
good_linear = SKB_MAX_HEAD(align);
|
||||
|
||||
if (msg_control) {
|
||||
/* There are 256 bytes to be copied in skb, so there is
|
||||
* enough room for skb expand head in case it is used.
|
||||
* The rest of the buffer is mapped from userspace.
|
||||
*/
|
||||
copylen = gso.hdr_len ? gso.hdr_len : GOODCOPY_LEN;
|
||||
if (copylen > good_linear)
|
||||
copylen = good_linear;
|
||||
linear = copylen;
|
||||
if (iov_pages(iv, offset + copylen, count) <= MAX_SKB_FRAGS)
|
||||
zerocopy = true;
|
||||
@@ -1123,7 +1128,10 @@ static ssize_t tun_get_user(struct tun_struct *tun, struct tun_file *tfile,
|
||||
|
||||
if (!zerocopy) {
|
||||
copylen = len;
|
||||
linear = gso.hdr_len;
|
||||
if (gso.hdr_len > good_linear)
|
||||
linear = good_linear;
|
||||
else
|
||||
linear = gso.hdr_len;
|
||||
}
|
||||
|
||||
skb = tun_alloc_skb(tfile, align, copylen, linear, noblock);
|
||||
|
||||
@@ -206,9 +206,6 @@ static void intr_complete (struct urb *urb)
|
||||
break;
|
||||
}
|
||||
|
||||
if (!netif_running (dev->net))
|
||||
return;
|
||||
|
||||
status = usb_submit_urb (urb, GFP_ATOMIC);
|
||||
if (status != 0)
|
||||
netif_err(dev, timer, dev->net,
|
||||
|
||||
@@ -363,17 +363,19 @@ void xenvif_disconnect(struct xenvif *vif)
|
||||
if (netif_carrier_ok(vif->dev))
|
||||
xenvif_carrier_off(vif);
|
||||
|
||||
atomic_dec(&vif->refcnt);
|
||||
wait_event(vif->waiting_to_free, atomic_read(&vif->refcnt) == 0);
|
||||
|
||||
if (vif->irq)
|
||||
if (vif->irq) {
|
||||
unbind_from_irqhandler(vif->irq, vif);
|
||||
vif->irq = 0;
|
||||
}
|
||||
|
||||
xen_netbk_unmap_frontend_rings(vif);
|
||||
}
|
||||
|
||||
void xenvif_free(struct xenvif *vif)
|
||||
{
|
||||
atomic_dec(&vif->refcnt);
|
||||
wait_event(vif->waiting_to_free, atomic_read(&vif->refcnt) == 0);
|
||||
|
||||
unregister_netdev(vif->dev);
|
||||
|
||||
free_netdev(vif->dev);
|
||||
|
||||
@@ -2025,7 +2025,8 @@ static struct scsi_host_template driver_template = {
|
||||
.cmd_per_lun = TW_MAX_CMDS_PER_LUN,
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.shost_attrs = twa_host_attrs,
|
||||
.emulated = 1
|
||||
.emulated = 1,
|
||||
.no_write_same = 1,
|
||||
};
|
||||
|
||||
/* This function will probe and initialize a card */
|
||||
|
||||
@@ -1600,7 +1600,8 @@ static struct scsi_host_template driver_template = {
|
||||
.cmd_per_lun = TW_MAX_CMDS_PER_LUN,
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.shost_attrs = twl_host_attrs,
|
||||
.emulated = 1
|
||||
.emulated = 1,
|
||||
.no_write_same = 1,
|
||||
};
|
||||
|
||||
/* This function will probe and initialize a card */
|
||||
|
||||
@@ -2277,7 +2277,8 @@ static struct scsi_host_template driver_template = {
|
||||
.cmd_per_lun = TW_MAX_CMDS_PER_LUN,
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.shost_attrs = tw_host_attrs,
|
||||
.emulated = 1
|
||||
.emulated = 1,
|
||||
.no_write_same = 1,
|
||||
};
|
||||
|
||||
/* This function will probe and initialize a card */
|
||||
|
||||
@@ -1081,6 +1081,7 @@ static struct scsi_host_template aac_driver_template = {
|
||||
#endif
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.emulated = 1,
|
||||
.no_write_same = 1,
|
||||
};
|
||||
|
||||
static void __aac_shutdown(struct aac_dev * aac)
|
||||
|
||||
@@ -137,6 +137,7 @@ static struct scsi_host_template arcmsr_scsi_host_template = {
|
||||
.cmd_per_lun = ARCMSR_MAX_CMD_PERLUN,
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.shost_attrs = arcmsr_host_attrs,
|
||||
.no_write_same = 1,
|
||||
};
|
||||
static struct pci_device_id arcmsr_device_id_table[] = {
|
||||
{PCI_DEVICE(PCI_VENDOR_ID_ARECA, PCI_DEVICE_ID_ARECA_1110)},
|
||||
|
||||
@@ -299,6 +299,7 @@ wwn_t bfa_fcs_lport_get_rport(struct bfa_fcs_lport_s *port, wwn_t wwn,
|
||||
struct bfa_fcs_lport_s *bfa_fcs_lookup_port(struct bfa_fcs_s *fcs,
|
||||
u16 vf_id, wwn_t lpwwn);
|
||||
|
||||
void bfa_fcs_lport_set_symname(struct bfa_fcs_lport_s *port, char *symname);
|
||||
void bfa_fcs_lport_get_info(struct bfa_fcs_lport_s *port,
|
||||
struct bfa_lport_info_s *port_info);
|
||||
void bfa_fcs_lport_get_attr(struct bfa_fcs_lport_s *port,
|
||||
|
||||
@@ -1097,6 +1097,17 @@ bfa_fcs_lport_init(struct bfa_fcs_lport_s *lport,
|
||||
bfa_sm_send_event(lport, BFA_FCS_PORT_SM_CREATE);
|
||||
}
|
||||
|
||||
void
|
||||
bfa_fcs_lport_set_symname(struct bfa_fcs_lport_s *port,
|
||||
char *symname)
|
||||
{
|
||||
strcpy(port->port_cfg.sym_name.symname, symname);
|
||||
|
||||
if (bfa_sm_cmp_state(port, bfa_fcs_lport_sm_online))
|
||||
bfa_fcs_lport_ns_util_send_rspn_id(
|
||||
BFA_FCS_GET_NS_FROM_PORT(port), NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* fcs_lport_api
|
||||
*/
|
||||
@@ -4950,9 +4961,6 @@ bfa_fcs_lport_ns_util_send_rspn_id(void *cbarg, struct bfa_fcxp_s *fcxp_alloced)
|
||||
u8 *psymbl = &symbl[0];
|
||||
int len;
|
||||
|
||||
if (!bfa_sm_cmp_state(port, bfa_fcs_lport_sm_online))
|
||||
return;
|
||||
|
||||
/* Avoid sending RSPN in the following states. */
|
||||
if (bfa_sm_cmp_state(ns, bfa_fcs_lport_ns_sm_offline) ||
|
||||
bfa_sm_cmp_state(ns, bfa_fcs_lport_ns_sm_plogi_sending) ||
|
||||
|
||||
@@ -610,11 +610,8 @@ bfad_im_vport_set_symbolic_name(struct fc_vport *fc_vport)
|
||||
return;
|
||||
|
||||
spin_lock_irqsave(&bfad->bfad_lock, flags);
|
||||
if (strlen(sym_name) > 0) {
|
||||
strcpy(fcs_vport->lport.port_cfg.sym_name.symname, sym_name);
|
||||
bfa_fcs_lport_ns_util_send_rspn_id(
|
||||
BFA_FCS_GET_NS_FROM_PORT((&fcs_vport->lport)), NULL);
|
||||
}
|
||||
if (strlen(sym_name) > 0)
|
||||
bfa_fcs_lport_set_symname(&fcs_vport->lport, sym_name);
|
||||
spin_unlock_irqrestore(&bfad->bfad_lock, flags);
|
||||
}
|
||||
|
||||
|
||||
@@ -4691,6 +4691,7 @@ static struct scsi_host_template gdth_template = {
|
||||
.cmd_per_lun = GDTH_MAXC_P_L,
|
||||
.unchecked_isa_dma = 1,
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.no_write_same = 1,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_ISA
|
||||
|
||||
@@ -388,6 +388,7 @@ struct Scsi_Host *scsi_host_alloc(struct scsi_host_template *sht, int privsize)
|
||||
shost->unchecked_isa_dma = sht->unchecked_isa_dma;
|
||||
shost->use_clustering = sht->use_clustering;
|
||||
shost->ordered_tag = sht->ordered_tag;
|
||||
shost->no_write_same = sht->no_write_same;
|
||||
|
||||
if (sht->supported_mode == MODE_UNKNOWN)
|
||||
/* means we didn't set it ... default to INITIATOR */
|
||||
|
||||
@@ -538,6 +538,7 @@ static struct scsi_host_template hpsa_driver_template = {
|
||||
.sdev_attrs = hpsa_sdev_attrs,
|
||||
.shost_attrs = hpsa_shost_attrs,
|
||||
.max_sectors = 8192,
|
||||
.no_write_same = 1,
|
||||
};
|
||||
|
||||
|
||||
@@ -1258,7 +1259,7 @@ static void complete_scsi_command(struct CommandList *cp)
|
||||
"has check condition: aborted command: "
|
||||
"ASC: 0x%x, ASCQ: 0x%x\n",
|
||||
cp, asc, ascq);
|
||||
cmd->result = DID_SOFT_ERROR << 16;
|
||||
cmd->result |= DID_SOFT_ERROR << 16;
|
||||
break;
|
||||
}
|
||||
/* Must be some other type of check condition */
|
||||
@@ -4856,7 +4857,7 @@ reinit_after_soft_reset:
|
||||
hpsa_hba_inquiry(h);
|
||||
hpsa_register_scsi(h); /* hook ourselves into SCSI subsystem */
|
||||
start_controller_lockup_detector(h);
|
||||
return 1;
|
||||
return 0;
|
||||
|
||||
clean4:
|
||||
hpsa_free_sg_chain_blocks(h);
|
||||
|
||||
@@ -6016,7 +6016,8 @@ static struct scsi_host_template driver_template = {
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.shost_attrs = ipr_ioa_attrs,
|
||||
.sdev_attrs = ipr_dev_attrs,
|
||||
.proc_name = IPR_NAME
|
||||
.proc_name = IPR_NAME,
|
||||
.no_write_same = 1,
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -374,6 +374,7 @@ static struct scsi_host_template ips_driver_template = {
|
||||
.sg_tablesize = IPS_MAX_SG,
|
||||
.cmd_per_lun = 3,
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.no_write_same = 1,
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -211,7 +211,7 @@ static unsigned int sas_ata_qc_issue(struct ata_queued_cmd *qc)
|
||||
qc->tf.nsect = 0;
|
||||
}
|
||||
|
||||
ata_tf_to_fis(&qc->tf, 1, 0, (u8*)&task->ata_task.fis);
|
||||
ata_tf_to_fis(&qc->tf, qc->dev->link->pmp, 1, (u8 *)&task->ata_task.fis);
|
||||
task->uldd_task = qc;
|
||||
if (ata_is_atapi(qc->tf.protocol)) {
|
||||
memcpy(task->ata_task.atapi_packet, qc->cdb, qc->dev->cdb_len);
|
||||
|
||||
@@ -4520,6 +4520,7 @@ static struct scsi_host_template megaraid_template = {
|
||||
.eh_device_reset_handler = megaraid_reset,
|
||||
.eh_bus_reset_handler = megaraid_reset,
|
||||
.eh_host_reset_handler = megaraid_reset,
|
||||
.no_write_same = 1,
|
||||
};
|
||||
|
||||
static int
|
||||
|
||||
@@ -367,6 +367,7 @@ static struct scsi_host_template megaraid_template_g = {
|
||||
.eh_host_reset_handler = megaraid_reset_handler,
|
||||
.change_queue_depth = megaraid_change_queue_depth,
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.no_write_same = 1,
|
||||
.sdev_attrs = megaraid_sdev_attrs,
|
||||
.shost_attrs = megaraid_shost_attrs,
|
||||
};
|
||||
|
||||
@@ -2099,6 +2099,7 @@ static struct scsi_host_template megasas_template = {
|
||||
.bios_param = megasas_bios_param,
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.change_queue_depth = megasas_change_queue_depth,
|
||||
.no_write_same = 1,
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -4328,6 +4328,7 @@ static struct scsi_host_template pmcraid_host_template = {
|
||||
.this_id = -1,
|
||||
.sg_tablesize = PMCRAID_MAX_IOADLS,
|
||||
.max_sectors = PMCRAID_IOA_MAX_SECTORS,
|
||||
.no_write_same = 1,
|
||||
.cmd_per_lun = PMCRAID_MAX_CMD_PER_LUN,
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.shost_attrs = pmcraid_host_attrs,
|
||||
|
||||
@@ -2639,6 +2639,12 @@ static void sd_read_write_same(struct scsi_disk *sdkp, unsigned char *buffer)
|
||||
{
|
||||
struct scsi_device *sdev = sdkp->device;
|
||||
|
||||
if (sdev->host->no_write_same) {
|
||||
sdev->no_write_same = 1;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (scsi_report_opcode(sdev, buffer, SD_BUF_SIZE, INQUIRY) < 0) {
|
||||
/* too large values might cause issues with arcmsr */
|
||||
int vpd_buf_len = 64;
|
||||
|
||||
@@ -1406,6 +1406,7 @@ static struct scsi_host_template scsi_driver = {
|
||||
.use_clustering = DISABLE_CLUSTERING,
|
||||
/* Make sure we dont get a sg segment crosses a page boundary */
|
||||
.dma_boundary = PAGE_SIZE-1,
|
||||
.no_write_same = 1,
|
||||
};
|
||||
|
||||
enum {
|
||||
|
||||
@@ -192,6 +192,9 @@ static int pc263_do_insn_bits(struct comedi_device *dev,
|
||||
outb(s->state & 0xFF, dev->iobase);
|
||||
outb(s->state >> 8, dev->iobase + 1);
|
||||
}
|
||||
|
||||
data[1] = s->state;
|
||||
|
||||
return insn->n;
|
||||
}
|
||||
|
||||
|
||||
@@ -908,12 +908,13 @@ static void pcmuio_detach(struct comedi_device *dev)
|
||||
|
||||
if (dev->iobase)
|
||||
release_region(dev->iobase, ASIC_IOSIZE * board->num_asics);
|
||||
for (i = 0; i < MAX_ASICS; ++i) {
|
||||
if (devpriv->asics[i].irq)
|
||||
free_irq(devpriv->asics[i].irq, dev);
|
||||
}
|
||||
if (devpriv && devpriv->sprivs)
|
||||
if (devpriv) {
|
||||
for (i = 0; i < MAX_ASICS; ++i) {
|
||||
if (devpriv->asics[i].irq)
|
||||
free_irq(devpriv->asics[i].irq, dev);
|
||||
}
|
||||
kfree(devpriv->sprivs);
|
||||
}
|
||||
}
|
||||
|
||||
static const struct pcmuio_board pcmuio_boards[] = {
|
||||
|
||||
@@ -87,11 +87,11 @@ static int dnp_dio_insn_bits(struct comedi_device *dev,
|
||||
|
||||
/* on return, data[1] contains the value of the digital input lines. */
|
||||
outb(PADR, CSCIR);
|
||||
data[0] = inb(CSCDR);
|
||||
data[1] = inb(CSCDR);
|
||||
outb(PBDR, CSCIR);
|
||||
data[0] += inb(CSCDR) << 8;
|
||||
data[1] += inb(CSCDR) << 8;
|
||||
outb(PCDR, CSCIR);
|
||||
data[0] += ((inb(CSCDR) & 0xF0) << 12);
|
||||
data[1] += ((inb(CSCDR) & 0xF0) << 12);
|
||||
|
||||
return insn->n;
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
menuconfig TIDSPBRIDGE
|
||||
tristate "DSP Bridge driver"
|
||||
depends on ARCH_OMAP3 && !ARCH_MULTIPLATFORM
|
||||
depends on ARCH_OMAP3 && BROKEN
|
||||
select OMAP_MBOX_FWK
|
||||
help
|
||||
DSP/BIOS Bridge is designed for platforms that contain a GPP and
|
||||
|
||||
@@ -976,6 +976,7 @@ BOOL BBbVT3184Init(PSDevice pDevice)
|
||||
PBYTE pbyAgc;
|
||||
WORD wLengthAgc;
|
||||
BYTE abyArray[256];
|
||||
u8 data;
|
||||
|
||||
ntStatus = CONTROLnsRequestIn(pDevice,
|
||||
MESSAGE_TYPE_READ,
|
||||
@@ -1144,6 +1145,16 @@ else {
|
||||
ControlvWriteByte(pDevice,MESSAGE_REQUEST_BBREG,0x0D,0x01);
|
||||
|
||||
RFbRFTableDownload(pDevice);
|
||||
|
||||
/* Fix for TX USB resets from vendors driver */
|
||||
CONTROLnsRequestIn(pDevice, MESSAGE_TYPE_READ, USB_REG4,
|
||||
MESSAGE_REQUEST_MEM, sizeof(data), &data);
|
||||
|
||||
data |= 0x2;
|
||||
|
||||
CONTROLnsRequestOut(pDevice, MESSAGE_TYPE_WRITE, USB_REG4,
|
||||
MESSAGE_REQUEST_MEM, sizeof(data), &data);
|
||||
|
||||
return TRUE;//ntStatus;
|
||||
}
|
||||
|
||||
|
||||
@@ -69,6 +69,7 @@
|
||||
|
||||
#define VIAUSB20_PACKET_HEADER 0x04
|
||||
|
||||
#define USB_REG4 0x604
|
||||
|
||||
/*--------------------- Export Classes ----------------------------*/
|
||||
|
||||
|
||||
@@ -431,7 +431,12 @@ static struct page *get_next_page(struct page *page)
|
||||
return next;
|
||||
}
|
||||
|
||||
/* Encode <page, obj_idx> as a single handle value */
|
||||
/*
|
||||
* Encode <page, obj_idx> as a single handle value.
|
||||
* On hardware platforms with physical memory starting at 0x0 the pfn
|
||||
* could be 0 so we ensure that the handle will never be 0 by adjusting the
|
||||
* encoded obj_idx value before encoding.
|
||||
*/
|
||||
static void *obj_location_to_handle(struct page *page, unsigned long obj_idx)
|
||||
{
|
||||
unsigned long handle;
|
||||
@@ -442,17 +447,21 @@ static void *obj_location_to_handle(struct page *page, unsigned long obj_idx)
|
||||
}
|
||||
|
||||
handle = page_to_pfn(page) << OBJ_INDEX_BITS;
|
||||
handle |= (obj_idx & OBJ_INDEX_MASK);
|
||||
handle |= ((obj_idx + 1) & OBJ_INDEX_MASK);
|
||||
|
||||
return (void *)handle;
|
||||
}
|
||||
|
||||
/* Decode <page, obj_idx> pair from the given object handle */
|
||||
/*
|
||||
* Decode <page, obj_idx> pair from the given object handle. We adjust the
|
||||
* decoded obj_idx back to its original value since it was adjusted in
|
||||
* obj_location_to_handle().
|
||||
*/
|
||||
static void obj_handle_to_location(unsigned long handle, struct page **page,
|
||||
unsigned long *obj_idx)
|
||||
{
|
||||
*page = pfn_to_page(handle >> OBJ_INDEX_BITS);
|
||||
*obj_idx = handle & OBJ_INDEX_MASK;
|
||||
*obj_idx = (handle & OBJ_INDEX_MASK) - 1;
|
||||
}
|
||||
|
||||
static unsigned long obj_idx_to_offset(struct page *page,
|
||||
|
||||
@@ -920,9 +920,10 @@ int gnttab_map_refs(struct gnttab_map_grant_ref *map_ops,
|
||||
ret = m2p_add_override(mfn, pages[i], kmap_ops ?
|
||||
&kmap_ops[i] : NULL);
|
||||
if (ret)
|
||||
return ret;
|
||||
goto out;
|
||||
}
|
||||
|
||||
out:
|
||||
if (lazy)
|
||||
arch_leave_lazy_mmu_mode();
|
||||
|
||||
@@ -953,9 +954,10 @@ int gnttab_unmap_refs(struct gnttab_unmap_grant_ref *unmap_ops,
|
||||
ret = m2p_remove_override(pages[i], kmap_ops ?
|
||||
&kmap_ops[i] : NULL);
|
||||
if (ret)
|
||||
return ret;
|
||||
goto out;
|
||||
}
|
||||
|
||||
out:
|
||||
if (lazy)
|
||||
arch_leave_lazy_mmu_mode();
|
||||
|
||||
|
||||
@@ -3975,8 +3975,7 @@ nfs4_async_handle_error(struct rpc_task *task, const struct nfs_server *server,
|
||||
dprintk("%s ERROR %d, Reset session\n", __func__,
|
||||
task->tk_status);
|
||||
nfs4_schedule_session_recovery(clp->cl_session, task->tk_status);
|
||||
task->tk_status = 0;
|
||||
return -EAGAIN;
|
||||
goto wait_on_recovery;
|
||||
#endif /* CONFIG_NFS_V4_1 */
|
||||
case -NFS4ERR_DELAY:
|
||||
nfs_inc_server_stats(server, NFSIOS_DELAY);
|
||||
@@ -4161,11 +4160,17 @@ static void nfs4_delegreturn_done(struct rpc_task *task, void *calldata)
|
||||
return;
|
||||
|
||||
switch (task->tk_status) {
|
||||
case -NFS4ERR_STALE_STATEID:
|
||||
case -NFS4ERR_EXPIRED:
|
||||
case 0:
|
||||
renew_lease(data->res.server, data->timestamp);
|
||||
break;
|
||||
case -NFS4ERR_ADMIN_REVOKED:
|
||||
case -NFS4ERR_DELEG_REVOKED:
|
||||
case -NFS4ERR_BAD_STATEID:
|
||||
case -NFS4ERR_OLD_STATEID:
|
||||
case -NFS4ERR_STALE_STATEID:
|
||||
case -NFS4ERR_EXPIRED:
|
||||
task->tk_status = 0;
|
||||
break;
|
||||
default:
|
||||
if (nfs4_async_handle_error(task, data->res.server, NULL) ==
|
||||
-EAGAIN) {
|
||||
|
||||
@@ -1606,6 +1606,12 @@ xfs_file_ioctl(
|
||||
case XFS_IOC_FREE_EOFBLOCKS: {
|
||||
struct xfs_eofblocks eofb;
|
||||
|
||||
if (!capable(CAP_SYS_ADMIN))
|
||||
return -EPERM;
|
||||
|
||||
if (mp->m_flags & XFS_MOUNT_RDONLY)
|
||||
return -XFS_ERROR(EROFS);
|
||||
|
||||
if (copy_from_user(&eofb, arg, sizeof(eofb)))
|
||||
return -XFS_ERROR(EFAULT);
|
||||
|
||||
|
||||
@@ -36,6 +36,7 @@ static inline void scatterwalk_sg_chain(struct scatterlist *sg1, int num,
|
||||
{
|
||||
sg_set_page(&sg1[num - 1], (void *)sg2, 0, 0);
|
||||
sg1[num - 1].page_link &= ~0x02;
|
||||
sg1[num - 1].page_link |= 0x01;
|
||||
}
|
||||
|
||||
static inline struct scatterlist *scatterwalk_sg_next(struct scatterlist *sg)
|
||||
@@ -43,7 +44,7 @@ static inline struct scatterlist *scatterwalk_sg_next(struct scatterlist *sg)
|
||||
if (sg_is_last(sg))
|
||||
return NULL;
|
||||
|
||||
return (++sg)->length ? sg : (void *)sg_page(sg);
|
||||
return (++sg)->length ? sg : sg_chain_ptr(sg);
|
||||
}
|
||||
|
||||
static inline void scatterwalk_crypto_chain(struct scatterlist *head,
|
||||
|
||||
@@ -163,6 +163,14 @@ struct proto_ops {
|
||||
#endif
|
||||
int (*sendmsg) (struct kiocb *iocb, struct socket *sock,
|
||||
struct msghdr *m, size_t total_len);
|
||||
/* Notes for implementing recvmsg:
|
||||
* ===============================
|
||||
* msg->msg_namelen should get updated by the recvmsg handlers
|
||||
* iff msg_name != NULL. It is by default 0 to prevent
|
||||
* returning uninitialized memory to user space. The recvfrom
|
||||
* handlers can assume that msg.msg_name is either NULL or has
|
||||
* a minimum size of sizeof(struct sockaddr_storage).
|
||||
*/
|
||||
int (*recvmsg) (struct kiocb *iocb, struct socket *sock,
|
||||
struct msghdr *m, size_t total_len,
|
||||
int flags);
|
||||
|
||||
@@ -57,9 +57,9 @@ static inline void prandom_seed_state(struct rnd_state *state, u64 seed)
|
||||
{
|
||||
u32 i = (seed >> 32) ^ (seed << 10) ^ seed;
|
||||
|
||||
state->s1 = __seed(i, 1);
|
||||
state->s2 = __seed(i, 7);
|
||||
state->s3 = __seed(i, 15);
|
||||
state->s1 = __seed(i, 2);
|
||||
state->s2 = __seed(i, 8);
|
||||
state->s3 = __seed(i, 16);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ARCH_RANDOM
|
||||
|
||||
@@ -454,7 +454,7 @@ extern int compat_ip_getsockopt(struct sock *sk, int level,
|
||||
int optname, char __user *optval, int __user *optlen);
|
||||
extern int ip_ra_control(struct sock *sk, unsigned char on, void (*destructor)(struct sock *));
|
||||
|
||||
extern int ip_recv_error(struct sock *sk, struct msghdr *msg, int len);
|
||||
extern int ip_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len);
|
||||
extern void ip_icmp_error(struct sock *sk, struct sk_buff *skb, int err,
|
||||
__be16 port, u32 info, u8 *payload);
|
||||
extern void ip_local_error(struct sock *sk, int err, __be32 daddr, __be16 dport,
|
||||
|
||||
@@ -693,8 +693,10 @@ extern int compat_ipv6_getsockopt(struct sock *sk,
|
||||
extern int ip6_datagram_connect(struct sock *sk,
|
||||
struct sockaddr *addr, int addr_len);
|
||||
|
||||
extern int ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len);
|
||||
extern int ipv6_recv_rxpmtu(struct sock *sk, struct msghdr *msg, int len);
|
||||
extern int ipv6_recv_error(struct sock *sk, struct msghdr *msg, int len,
|
||||
int *addr_len);
|
||||
extern int ipv6_recv_rxpmtu(struct sock *sk, struct msghdr *msg, int len,
|
||||
int *addr_len);
|
||||
extern void ipv6_icmp_error(struct sock *sk, struct sk_buff *skb, int err, __be16 port,
|
||||
u32 info, u8 *payload);
|
||||
extern void ipv6_local_error(struct sock *sk, int err, struct flowi6 *fl6, u32 info);
|
||||
|
||||
@@ -473,6 +473,9 @@ struct scsi_host_template {
|
||||
*/
|
||||
unsigned ordered_tag:1;
|
||||
|
||||
/* True if the controller does not support WRITE SAME */
|
||||
unsigned no_write_same:1;
|
||||
|
||||
/*
|
||||
* Countdown for host blocking with no commands outstanding.
|
||||
*/
|
||||
@@ -672,6 +675,9 @@ struct Scsi_Host {
|
||||
/* Don't resume host in EH */
|
||||
unsigned eh_noresume:1;
|
||||
|
||||
/* The controller does not support WRITE SAME */
|
||||
unsigned no_write_same:1;
|
||||
|
||||
/*
|
||||
* Optional work queue to be utilized by the transport
|
||||
*/
|
||||
|
||||
@@ -379,7 +379,8 @@ ftrace_define_fields_##call(struct ftrace_event_call *event_call) \
|
||||
__data_size += (len) * sizeof(type);
|
||||
|
||||
#undef __string
|
||||
#define __string(item, src) __dynamic_array(char, item, strlen(src) + 1)
|
||||
#define __string(item, src) __dynamic_array(char, item, \
|
||||
strlen((src) ? (const char *)(src) : "(null)") + 1)
|
||||
|
||||
#undef DECLARE_EVENT_CLASS
|
||||
#define DECLARE_EVENT_CLASS(call, proto, args, tstruct, assign, print) \
|
||||
@@ -504,7 +505,7 @@ static inline notrace int ftrace_get_offsets_##call( \
|
||||
|
||||
#undef __assign_str
|
||||
#define __assign_str(dst, src) \
|
||||
strcpy(__get_str(dst), src);
|
||||
strcpy(__get_str(dst), (src) ? (const char *)(src) : "(null)");
|
||||
|
||||
#undef TP_fast_assign
|
||||
#define TP_fast_assign(args...) args
|
||||
|
||||
@@ -989,8 +989,10 @@ static void cpuset_change_task_nodemask(struct task_struct *tsk,
|
||||
need_loop = task_has_mempolicy(tsk) ||
|
||||
!nodes_intersects(*newmems, tsk->mems_allowed);
|
||||
|
||||
if (need_loop)
|
||||
if (need_loop) {
|
||||
local_irq_disable();
|
||||
write_seqcount_begin(&tsk->mems_allowed_seq);
|
||||
}
|
||||
|
||||
nodes_or(tsk->mems_allowed, tsk->mems_allowed, *newmems);
|
||||
mpol_rebind_task(tsk, newmems, MPOL_REBIND_STEP1);
|
||||
@@ -998,8 +1000,10 @@ static void cpuset_change_task_nodemask(struct task_struct *tsk,
|
||||
mpol_rebind_task(tsk, newmems, MPOL_REBIND_STEP2);
|
||||
tsk->mems_allowed = *newmems;
|
||||
|
||||
if (need_loop)
|
||||
if (need_loop) {
|
||||
write_seqcount_end(&tsk->mems_allowed_seq);
|
||||
local_irq_enable();
|
||||
}
|
||||
|
||||
task_unlock(tsk);
|
||||
}
|
||||
|
||||
@@ -50,7 +50,7 @@ static void resume_irqs(bool want_early)
|
||||
bool is_early = desc->action &&
|
||||
desc->action->flags & IRQF_EARLY_RESUME;
|
||||
|
||||
if (is_early != want_early)
|
||||
if (!is_early && want_early)
|
||||
continue;
|
||||
|
||||
raw_spin_lock_irqsave(&desc->lock, flags);
|
||||
|
||||
@@ -231,7 +231,17 @@ void print_cfs_rq(struct seq_file *m, int cpu, struct cfs_rq *cfs_rq)
|
||||
SEQ_printf(m, " .%-30s: %d\n", "tg->runnable_avg",
|
||||
atomic_read(&cfs_rq->tg->runnable_avg));
|
||||
#endif
|
||||
#endif
|
||||
#ifdef CONFIG_CFS_BANDWIDTH
|
||||
SEQ_printf(m, " .%-30s: %d\n", "tg->cfs_bandwidth.timer_active",
|
||||
cfs_rq->tg->cfs_bandwidth.timer_active);
|
||||
SEQ_printf(m, " .%-30s: %d\n", "throttled",
|
||||
cfs_rq->throttled);
|
||||
SEQ_printf(m, " .%-30s: %d\n", "throttle_count",
|
||||
cfs_rq->throttle_count);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_FAIR_GROUP_SCHED
|
||||
print_cfs_group_stats(m, cpu, cfs_rq->tg);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -2268,6 +2268,8 @@ static void throttle_cfs_rq(struct cfs_rq *cfs_rq)
|
||||
cfs_rq->throttled_clock = rq->clock;
|
||||
raw_spin_lock(&cfs_b->lock);
|
||||
list_add_tail_rcu(&cfs_rq->throttled_list, &cfs_b->throttled_cfs_rq);
|
||||
if (!cfs_b->timer_active)
|
||||
__start_cfs_bandwidth(cfs_b);
|
||||
raw_spin_unlock(&cfs_b->lock);
|
||||
}
|
||||
|
||||
|
||||
@@ -1127,7 +1127,7 @@ static inline void old_vsyscall_fixup(struct timekeeper *tk)
|
||||
tk->xtime_nsec -= remainder;
|
||||
tk->xtime_nsec += 1ULL << tk->shift;
|
||||
tk->ntp_error += remainder << tk->ntp_error_shift;
|
||||
|
||||
tk->ntp_error -= (1ULL << tk->shift) << tk->ntp_error_shift;
|
||||
}
|
||||
#else
|
||||
#define old_vsyscall_fixup(tk)
|
||||
|
||||
@@ -141,7 +141,7 @@ void prandom_seed(u32 entropy)
|
||||
*/
|
||||
for_each_possible_cpu (i) {
|
||||
struct rnd_state *state = &per_cpu(net_rand_state, i);
|
||||
state->s1 = __seed(state->s1 ^ entropy, 1);
|
||||
state->s1 = __seed(state->s1 ^ entropy, 2);
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(prandom_seed);
|
||||
@@ -158,9 +158,9 @@ static int __init prandom_init(void)
|
||||
struct rnd_state *state = &per_cpu(net_rand_state,i);
|
||||
|
||||
#define LCG(x) ((x) * 69069) /* super-duper LCG */
|
||||
state->s1 = __seed(LCG(i + jiffies), 1);
|
||||
state->s2 = __seed(LCG(state->s1), 7);
|
||||
state->s3 = __seed(LCG(state->s2), 15);
|
||||
state->s1 = __seed(LCG(i + jiffies), 2);
|
||||
state->s2 = __seed(LCG(state->s1), 8);
|
||||
state->s3 = __seed(LCG(state->s2), 16);
|
||||
|
||||
/* "warm it up" */
|
||||
prandom_u32_state(state);
|
||||
@@ -187,9 +187,9 @@ static int __init prandom_reseed(void)
|
||||
u32 seeds[3];
|
||||
|
||||
get_random_bytes(&seeds, sizeof(seeds));
|
||||
state->s1 = __seed(seeds[0], 1);
|
||||
state->s2 = __seed(seeds[1], 7);
|
||||
state->s3 = __seed(seeds[2], 15);
|
||||
state->s1 = __seed(seeds[0], 2);
|
||||
state->s2 = __seed(seeds[1], 8);
|
||||
state->s3 = __seed(seeds[2], 16);
|
||||
|
||||
/* mix it in */
|
||||
prandom_u32_state(state);
|
||||
|
||||
@@ -600,7 +600,11 @@ pte_t *__page_check_address(struct page *page, struct mm_struct *mm,
|
||||
spinlock_t *ptl;
|
||||
|
||||
if (unlikely(PageHuge(page))) {
|
||||
/* when pud is not present, pte will be NULL */
|
||||
pte = huge_pte_offset(mm, address);
|
||||
if (!pte)
|
||||
return NULL;
|
||||
|
||||
ptl = &mm->page_table_lock;
|
||||
goto check;
|
||||
}
|
||||
|
||||
@@ -1738,7 +1738,6 @@ static int atalk_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr
|
||||
size_t size, int flags)
|
||||
{
|
||||
struct sock *sk = sock->sk;
|
||||
struct sockaddr_at *sat = (struct sockaddr_at *)msg->msg_name;
|
||||
struct ddpehdr *ddp;
|
||||
int copied = 0;
|
||||
int offset = 0;
|
||||
@@ -1767,14 +1766,13 @@ static int atalk_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr
|
||||
}
|
||||
err = skb_copy_datagram_iovec(skb, offset, msg->msg_iov, copied);
|
||||
|
||||
if (!err) {
|
||||
if (sat) {
|
||||
sat->sat_family = AF_APPLETALK;
|
||||
sat->sat_port = ddp->deh_sport;
|
||||
sat->sat_addr.s_node = ddp->deh_snode;
|
||||
sat->sat_addr.s_net = ddp->deh_snet;
|
||||
}
|
||||
msg->msg_namelen = sizeof(*sat);
|
||||
if (!err && msg->msg_name) {
|
||||
struct sockaddr_at *sat = msg->msg_name;
|
||||
sat->sat_family = AF_APPLETALK;
|
||||
sat->sat_port = ddp->deh_sport;
|
||||
sat->sat_addr.s_node = ddp->deh_snode;
|
||||
sat->sat_addr.s_net = ddp->deh_snet;
|
||||
msg->msg_namelen = sizeof(*sat);
|
||||
}
|
||||
|
||||
skb_free_datagram(sk, skb); /* Free the datagram. */
|
||||
|
||||
@@ -532,8 +532,6 @@ int vcc_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg,
|
||||
struct sk_buff *skb;
|
||||
int copied, error = -EINVAL;
|
||||
|
||||
msg->msg_namelen = 0;
|
||||
|
||||
if (sock->state != SS_CONNECTED)
|
||||
return -ENOTCONN;
|
||||
|
||||
|
||||
@@ -1641,11 +1641,11 @@ static int ax25_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
|
||||
skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
|
||||
|
||||
if (msg->msg_namelen != 0) {
|
||||
struct sockaddr_ax25 *sax = (struct sockaddr_ax25 *)msg->msg_name;
|
||||
if (msg->msg_name) {
|
||||
ax25_digi digi;
|
||||
ax25_address src;
|
||||
const unsigned char *mac = skb_mac_header(skb);
|
||||
struct sockaddr_ax25 *sax = msg->msg_name;
|
||||
|
||||
memset(sax, 0, sizeof(struct full_sockaddr_ax25));
|
||||
ax25_addr_parse(mac + 1, skb->data - mac - 1, &src, NULL,
|
||||
|
||||
@@ -230,8 +230,6 @@ int bt_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
if (flags & (MSG_OOB))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
msg->msg_namelen = 0;
|
||||
|
||||
skb = skb_recv_datagram(sk, flags, noblock, &err);
|
||||
if (!skb) {
|
||||
if (sk->sk_shutdown & RCV_SHUTDOWN)
|
||||
@@ -296,8 +294,6 @@ int bt_sock_stream_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
if (flags & MSG_OOB)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
msg->msg_namelen = 0;
|
||||
|
||||
BT_DBG("sk %p size %zu", sk, size);
|
||||
|
||||
lock_sock(sk);
|
||||
|
||||
@@ -757,8 +757,6 @@ static int hci_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
if (!skb)
|
||||
return err;
|
||||
|
||||
msg->msg_namelen = 0;
|
||||
|
||||
copied = skb->len;
|
||||
if (len < copied) {
|
||||
msg->msg_flags |= MSG_TRUNC;
|
||||
|
||||
@@ -610,7 +610,6 @@ static int rfcomm_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
|
||||
if (test_and_clear_bit(RFCOMM_DEFER_SETUP, &d->flags)) {
|
||||
rfcomm_dlc_accept(d);
|
||||
msg->msg_namelen = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -667,7 +667,6 @@ static int sco_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) {
|
||||
hci_conn_accept(pi->conn->hcon, 0);
|
||||
sk->sk_state = BT_CONFIG;
|
||||
msg->msg_namelen = 0;
|
||||
|
||||
release_sock(sk);
|
||||
return 0;
|
||||
|
||||
@@ -170,6 +170,8 @@ void br_dev_delete(struct net_device *dev, struct list_head *head)
|
||||
del_nbp(p);
|
||||
}
|
||||
|
||||
br_fdb_delete_by_port(br, NULL, 1);
|
||||
|
||||
del_timer_sync(&br->gc_timer);
|
||||
|
||||
br_sysfs_delbr(br->dev);
|
||||
|
||||
@@ -286,8 +286,6 @@ static int caif_seqpkt_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
if (m->msg_flags&MSG_OOB)
|
||||
goto read_error;
|
||||
|
||||
m->msg_namelen = 0;
|
||||
|
||||
skb = skb_recv_datagram(sk, flags, 0 , &ret);
|
||||
if (!skb)
|
||||
goto read_error;
|
||||
@@ -361,8 +359,6 @@ static int caif_stream_recvmsg(struct kiocb *iocb, struct socket *sock,
|
||||
if (flags&MSG_OOB)
|
||||
goto out;
|
||||
|
||||
msg->msg_namelen = 0;
|
||||
|
||||
/*
|
||||
* Lock the socket to prevent queue disordering
|
||||
* while sleeps in memcpy_tomsg
|
||||
|
||||
@@ -72,7 +72,7 @@ int get_compat_msghdr(struct msghdr *kmsg, struct compat_msghdr __user *umsg)
|
||||
__get_user(kmsg->msg_flags, &umsg->msg_flags))
|
||||
return -EFAULT;
|
||||
if (kmsg->msg_namelen > sizeof(struct sockaddr_storage))
|
||||
return -EINVAL;
|
||||
kmsg->msg_namelen = sizeof(struct sockaddr_storage);
|
||||
kmsg->msg_name = compat_ptr(tmp1);
|
||||
kmsg->msg_iov = compat_ptr(tmp2);
|
||||
kmsg->msg_control = compat_ptr(tmp3);
|
||||
@@ -93,7 +93,8 @@ int verify_compat_iovec(struct msghdr *kern_msg, struct iovec *kern_iov,
|
||||
if (err < 0)
|
||||
return err;
|
||||
}
|
||||
kern_msg->msg_name = kern_address;
|
||||
if (kern_msg->msg_name)
|
||||
kern_msg->msg_name = kern_address;
|
||||
} else
|
||||
kern_msg->msg_name = NULL;
|
||||
|
||||
|
||||
@@ -4673,7 +4673,7 @@ static void dev_change_rx_flags(struct net_device *dev, int flags)
|
||||
{
|
||||
const struct net_device_ops *ops = dev->netdev_ops;
|
||||
|
||||
if ((dev->flags & IFF_UP) && ops->ndo_change_rx_flags)
|
||||
if (ops->ndo_change_rx_flags)
|
||||
ops->ndo_change_rx_flags(dev, flags);
|
||||
}
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user