ASoC: Updates for v3.10
A few more bug fixes, the DAPM clock fix is actually a driver specific one since currently there's only one user of the clock support due to the problems relying on the clock API. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iQIcBAABAgAGBQJRg3/MAAoJELSic+t+oim9W+cP/3NERwICTNvllNOrZXii7akJ DnzzIaw0fEJ2+hIXJzU/lEI/KjqIT7SADQRWg+eid8ZrjaUB6LXUPPuv67V4TseD 1+8ClQp1cDg1KepBcD2S1liVjPKvW64IpXwZNgLGigW6PP21yK8+DoQvVKPVB+sP q72jntTzy9qWenmjygpPEYDeOfe5EM7hAaa2tFuYIPEL+EkMOXXvjx8ojylwQV6V 5xFQ+CBSS8WHz7CKlawF3JH8TkcFGZNT9Hibhv1fpGM+iJDCsh/+MNiBwOpO+1wk eCJSiCWWTGgVK+3AvlSIQr8ml0EDEbS8Aq6bbJb9w4wgV65oFt2hOxOpkcK/8NcP qnKNYc3nRQsb3H+dObMdQNPWDjOfwsolKUOjetxosRIq4Pzm8afY96gu06EqTnw9 XYXqoSAVpCuPDpmlu87Lajoj4T5XNq3G7ONAMpsAfMrl/xxmV11Wrs4/7S0o3Csb tNhO5XjLbFNTw9nVT6qZQViH7Bm1ItDM2B/tLb1yqnlgBAjNW/WlUyFg4bE4Qeyr hUg7DwvYPSVnr25t8RmPMmB2MdD4N+PfRy+aIEIuE9KMeYUTPVr5kFdDP7uA7Yw2 Dn7lmAdDEq33zfTGYhGWs87IdxhD3VyEWveR6alrtBW0LS7ArtsPlWKhA074XuJj AmAU6RS3+75nymA9ucY+ =WQzu -----END PGP SIGNATURE----- Merge tag 'asoc-v3.10-4' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-next ASoC: Updates for v3.10 A few more bug fixes, the DAPM clock fix is actually a driver specific one since currently there's only one user of the clock support due to the problems relying on the clock API.
This commit is contained in:
commit
f91eeeb595
2
Makefile
2
Makefile
@ -1,7 +1,7 @@
|
|||||||
VERSION = 3
|
VERSION = 3
|
||||||
PATCHLEVEL = 9
|
PATCHLEVEL = 9
|
||||||
SUBLEVEL = 0
|
SUBLEVEL = 0
|
||||||
EXTRAVERSION = -rc8
|
EXTRAVERSION =
|
||||||
NAME = Unicycling Gorilla
|
NAME = Unicycling Gorilla
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
|
@ -2714,16 +2714,22 @@ static struct omap_ocp2scp_dev ocp2scp_dev_attr[] = {
|
|||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct omap_hwmod_opt_clk ocp2scp_usb_phy_opt_clks[] = {
|
|
||||||
{ .role = "48mhz", .clk = "ocp2scp_usb_phy_phy_48m" },
|
|
||||||
};
|
|
||||||
|
|
||||||
/* ocp2scp_usb_phy */
|
/* ocp2scp_usb_phy */
|
||||||
static struct omap_hwmod omap44xx_ocp2scp_usb_phy_hwmod = {
|
static struct omap_hwmod omap44xx_ocp2scp_usb_phy_hwmod = {
|
||||||
.name = "ocp2scp_usb_phy",
|
.name = "ocp2scp_usb_phy",
|
||||||
.class = &omap44xx_ocp2scp_hwmod_class,
|
.class = &omap44xx_ocp2scp_hwmod_class,
|
||||||
.clkdm_name = "l3_init_clkdm",
|
.clkdm_name = "l3_init_clkdm",
|
||||||
.main_clk = "func_48m_fclk",
|
/*
|
||||||
|
* ocp2scp_usb_phy_phy_48m is provided by the OMAP4 PRCM IP
|
||||||
|
* block as an "optional clock," and normally should never be
|
||||||
|
* specified as the main_clk for an OMAP IP block. However it
|
||||||
|
* turns out that this clock is actually the main clock for
|
||||||
|
* the ocp2scp_usb_phy IP block:
|
||||||
|
* http://lists.infradead.org/pipermail/linux-arm-kernel/2012-September/119943.html
|
||||||
|
* So listing ocp2scp_usb_phy_phy_48m as a main_clk here seems
|
||||||
|
* to be the best workaround.
|
||||||
|
*/
|
||||||
|
.main_clk = "ocp2scp_usb_phy_phy_48m",
|
||||||
.prcm = {
|
.prcm = {
|
||||||
.omap4 = {
|
.omap4 = {
|
||||||
.clkctrl_offs = OMAP4_CM_L3INIT_USBPHYOCP2SCP_CLKCTRL_OFFSET,
|
.clkctrl_offs = OMAP4_CM_L3INIT_USBPHYOCP2SCP_CLKCTRL_OFFSET,
|
||||||
@ -2732,8 +2738,6 @@ static struct omap_hwmod omap44xx_ocp2scp_usb_phy_hwmod = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
.dev_attr = ocp2scp_dev_attr,
|
.dev_attr = ocp2scp_dev_attr,
|
||||||
.opt_clks = ocp2scp_usb_phy_opt_clks,
|
|
||||||
.opt_clks_cnt = ARRAY_SIZE(ocp2scp_usb_phy_opt_clks),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
#define PAGE_SHIFT 16
|
#define PAGE_SHIFT 16
|
||||||
#endif
|
#endif
|
||||||
#define PAGE_SIZE (_AC(1,UL) << PAGE_SHIFT)
|
#define PAGE_SIZE (_AC(1,UL) << PAGE_SHIFT)
|
||||||
#define PAGE_MASK (~(PAGE_SIZE - 1))
|
#define PAGE_MASK (~((1 << PAGE_SHIFT) - 1))
|
||||||
|
|
||||||
#ifdef CONFIG_MIPS_HUGE_TLB_SUPPORT
|
#ifdef CONFIG_MIPS_HUGE_TLB_SUPPORT
|
||||||
#define HPAGE_SHIFT (PAGE_SHIFT + PAGE_SHIFT - 3)
|
#define HPAGE_SHIFT (PAGE_SHIFT + PAGE_SHIFT - 3)
|
||||||
|
@ -65,8 +65,10 @@ ifndef CONFIG_FUNCTION_TRACER
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
# Use long jumps instead of long branches (needed if your linker fails to
|
# Use long jumps instead of long branches (needed if your linker fails to
|
||||||
# link a too big vmlinux executable)
|
# link a too big vmlinux executable). Not enabled for building modules.
|
||||||
cflags-$(CONFIG_MLONGCALLS) += -mlong-calls
|
ifdef CONFIG_MLONGCALLS
|
||||||
|
KBUILD_CFLAGS_KERNEL += -mlong-calls
|
||||||
|
endif
|
||||||
|
|
||||||
# select which processor to optimise for
|
# select which processor to optimise for
|
||||||
cflags-$(CONFIG_PA7100) += -march=1.1 -mschedule=7100
|
cflags-$(CONFIG_PA7100) += -march=1.1 -mschedule=7100
|
||||||
|
@ -140,7 +140,10 @@ static inline void *kmap(struct page *page)
|
|||||||
return page_address(page);
|
return page_address(page);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define kunmap(page) kunmap_parisc(page_address(page))
|
static inline void kunmap(struct page *page)
|
||||||
|
{
|
||||||
|
kunmap_parisc(page_address(page));
|
||||||
|
}
|
||||||
|
|
||||||
static inline void *kmap_atomic(struct page *page)
|
static inline void *kmap_atomic(struct page *page)
|
||||||
{
|
{
|
||||||
|
@ -16,6 +16,8 @@
|
|||||||
#include <asm/processor.h>
|
#include <asm/processor.h>
|
||||||
#include <asm/cache.h>
|
#include <asm/cache.h>
|
||||||
|
|
||||||
|
extern spinlock_t pa_dbit_lock;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* kern_addr_valid(ADDR) tests if ADDR is pointing to valid kernel
|
* kern_addr_valid(ADDR) tests if ADDR is pointing to valid kernel
|
||||||
* memory. For the return value to be meaningful, ADDR must be >=
|
* memory. For the return value to be meaningful, ADDR must be >=
|
||||||
@ -44,8 +46,11 @@ extern void purge_tlb_entries(struct mm_struct *, unsigned long);
|
|||||||
|
|
||||||
#define set_pte_at(mm, addr, ptep, pteval) \
|
#define set_pte_at(mm, addr, ptep, pteval) \
|
||||||
do { \
|
do { \
|
||||||
|
unsigned long flags; \
|
||||||
|
spin_lock_irqsave(&pa_dbit_lock, flags); \
|
||||||
set_pte(ptep, pteval); \
|
set_pte(ptep, pteval); \
|
||||||
purge_tlb_entries(mm, addr); \
|
purge_tlb_entries(mm, addr); \
|
||||||
|
spin_unlock_irqrestore(&pa_dbit_lock, flags); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#endif /* !__ASSEMBLY__ */
|
#endif /* !__ASSEMBLY__ */
|
||||||
@ -435,48 +440,46 @@ extern void update_mmu_cache(struct vm_area_struct *, unsigned long, pte_t *);
|
|||||||
|
|
||||||
static inline int ptep_test_and_clear_young(struct vm_area_struct *vma, unsigned long addr, pte_t *ptep)
|
static inline int ptep_test_and_clear_young(struct vm_area_struct *vma, unsigned long addr, pte_t *ptep)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_SMP
|
pte_t pte;
|
||||||
|
unsigned long flags;
|
||||||
|
|
||||||
if (!pte_young(*ptep))
|
if (!pte_young(*ptep))
|
||||||
return 0;
|
return 0;
|
||||||
return test_and_clear_bit(xlate_pabit(_PAGE_ACCESSED_BIT), &pte_val(*ptep));
|
|
||||||
#else
|
|
||||||
pte_t pte = *ptep;
|
|
||||||
if (!pte_young(pte))
|
|
||||||
return 0;
|
|
||||||
set_pte_at(vma->vm_mm, addr, ptep, pte_mkold(pte));
|
|
||||||
return 1;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
extern spinlock_t pa_dbit_lock;
|
spin_lock_irqsave(&pa_dbit_lock, flags);
|
||||||
|
pte = *ptep;
|
||||||
|
if (!pte_young(pte)) {
|
||||||
|
spin_unlock_irqrestore(&pa_dbit_lock, flags);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
set_pte(ptep, pte_mkold(pte));
|
||||||
|
purge_tlb_entries(vma->vm_mm, addr);
|
||||||
|
spin_unlock_irqrestore(&pa_dbit_lock, flags);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
struct mm_struct;
|
struct mm_struct;
|
||||||
static inline pte_t ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep)
|
static inline pte_t ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep)
|
||||||
{
|
{
|
||||||
pte_t old_pte;
|
pte_t old_pte;
|
||||||
|
unsigned long flags;
|
||||||
|
|
||||||
spin_lock(&pa_dbit_lock);
|
spin_lock_irqsave(&pa_dbit_lock, flags);
|
||||||
old_pte = *ptep;
|
old_pte = *ptep;
|
||||||
pte_clear(mm,addr,ptep);
|
pte_clear(mm,addr,ptep);
|
||||||
spin_unlock(&pa_dbit_lock);
|
purge_tlb_entries(mm, addr);
|
||||||
|
spin_unlock_irqrestore(&pa_dbit_lock, flags);
|
||||||
|
|
||||||
return old_pte;
|
return old_pte;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void ptep_set_wrprotect(struct mm_struct *mm, unsigned long addr, pte_t *ptep)
|
static inline void ptep_set_wrprotect(struct mm_struct *mm, unsigned long addr, pte_t *ptep)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_SMP
|
unsigned long flags;
|
||||||
unsigned long new, old;
|
spin_lock_irqsave(&pa_dbit_lock, flags);
|
||||||
|
set_pte(ptep, pte_wrprotect(*ptep));
|
||||||
do {
|
|
||||||
old = pte_val(*ptep);
|
|
||||||
new = pte_val(pte_wrprotect(__pte (old)));
|
|
||||||
} while (cmpxchg((unsigned long *) ptep, old, new) != old);
|
|
||||||
purge_tlb_entries(mm, addr);
|
purge_tlb_entries(mm, addr);
|
||||||
#else
|
spin_unlock_irqrestore(&pa_dbit_lock, flags);
|
||||||
pte_t old_pte = *ptep;
|
|
||||||
set_pte_at(mm, addr, ptep, pte_wrprotect(old_pte));
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#define pte_same(A,B) (pte_val(A) == pte_val(B))
|
#define pte_same(A,B) (pte_val(A) == pte_val(B))
|
||||||
|
@ -181,30 +181,24 @@ struct exception_data {
|
|||||||
#if !defined(CONFIG_64BIT)
|
#if !defined(CONFIG_64BIT)
|
||||||
|
|
||||||
#define __put_kernel_asm64(__val,ptr) do { \
|
#define __put_kernel_asm64(__val,ptr) do { \
|
||||||
u64 __val64 = (u64)(__val); \
|
|
||||||
u32 hi = (__val64) >> 32; \
|
|
||||||
u32 lo = (__val64) & 0xffffffff; \
|
|
||||||
__asm__ __volatile__ ( \
|
__asm__ __volatile__ ( \
|
||||||
"\n1:\tstw %2,0(%1)" \
|
"\n1:\tstw %2,0(%1)" \
|
||||||
"\n2:\tstw %3,4(%1)\n\t" \
|
"\n2:\tstw %R2,4(%1)\n\t" \
|
||||||
ASM_EXCEPTIONTABLE_ENTRY(1b,fixup_put_user_skip_2)\
|
ASM_EXCEPTIONTABLE_ENTRY(1b,fixup_put_user_skip_2)\
|
||||||
ASM_EXCEPTIONTABLE_ENTRY(2b,fixup_put_user_skip_1)\
|
ASM_EXCEPTIONTABLE_ENTRY(2b,fixup_put_user_skip_1)\
|
||||||
: "=r"(__pu_err) \
|
: "=r"(__pu_err) \
|
||||||
: "r"(ptr), "r"(hi), "r"(lo), "0"(__pu_err) \
|
: "r"(ptr), "r"(__val), "0"(__pu_err) \
|
||||||
: "r1"); \
|
: "r1"); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define __put_user_asm64(__val,ptr) do { \
|
#define __put_user_asm64(__val,ptr) do { \
|
||||||
u64 __val64 = (u64)(__val); \
|
|
||||||
u32 hi = (__val64) >> 32; \
|
|
||||||
u32 lo = (__val64) & 0xffffffff; \
|
|
||||||
__asm__ __volatile__ ( \
|
__asm__ __volatile__ ( \
|
||||||
"\n1:\tstw %2,0(%%sr3,%1)" \
|
"\n1:\tstw %2,0(%%sr3,%1)" \
|
||||||
"\n2:\tstw %3,4(%%sr3,%1)\n\t" \
|
"\n2:\tstw %R2,4(%%sr3,%1)\n\t" \
|
||||||
ASM_EXCEPTIONTABLE_ENTRY(1b,fixup_put_user_skip_2)\
|
ASM_EXCEPTIONTABLE_ENTRY(1b,fixup_put_user_skip_2)\
|
||||||
ASM_EXCEPTIONTABLE_ENTRY(2b,fixup_put_user_skip_1)\
|
ASM_EXCEPTIONTABLE_ENTRY(2b,fixup_put_user_skip_1)\
|
||||||
: "=r"(__pu_err) \
|
: "=r"(__pu_err) \
|
||||||
: "r"(ptr), "r"(hi), "r"(lo), "0"(__pu_err) \
|
: "r"(ptr), "r"(__val), "0"(__pu_err) \
|
||||||
: "r1"); \
|
: "r1"); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
@ -421,14 +421,11 @@ void purge_tlb_entries(struct mm_struct *mm, unsigned long addr)
|
|||||||
/* Note: purge_tlb_entries can be called at startup with
|
/* Note: purge_tlb_entries can be called at startup with
|
||||||
no context. */
|
no context. */
|
||||||
|
|
||||||
/* Disable preemption while we play with %sr1. */
|
|
||||||
preempt_disable();
|
|
||||||
mtsp(mm->context, 1);
|
|
||||||
purge_tlb_start(flags);
|
purge_tlb_start(flags);
|
||||||
|
mtsp(mm->context, 1);
|
||||||
pdtlb(addr);
|
pdtlb(addr);
|
||||||
pitlb(addr);
|
pitlb(addr);
|
||||||
purge_tlb_end(flags);
|
purge_tlb_end(flags);
|
||||||
preempt_enable();
|
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(purge_tlb_entries);
|
EXPORT_SYMBOL(purge_tlb_entries);
|
||||||
|
|
||||||
|
@ -120,11 +120,13 @@ extern void __ashrdi3(void);
|
|||||||
extern void __ashldi3(void);
|
extern void __ashldi3(void);
|
||||||
extern void __lshrdi3(void);
|
extern void __lshrdi3(void);
|
||||||
extern void __muldi3(void);
|
extern void __muldi3(void);
|
||||||
|
extern void __ucmpdi2(void);
|
||||||
|
|
||||||
EXPORT_SYMBOL(__ashrdi3);
|
EXPORT_SYMBOL(__ashrdi3);
|
||||||
EXPORT_SYMBOL(__ashldi3);
|
EXPORT_SYMBOL(__ashldi3);
|
||||||
EXPORT_SYMBOL(__lshrdi3);
|
EXPORT_SYMBOL(__lshrdi3);
|
||||||
EXPORT_SYMBOL(__muldi3);
|
EXPORT_SYMBOL(__muldi3);
|
||||||
|
EXPORT_SYMBOL(__ucmpdi2);
|
||||||
|
|
||||||
asmlinkage void * __canonicalize_funcptr_for_compare(void *);
|
asmlinkage void * __canonicalize_funcptr_for_compare(void *);
|
||||||
EXPORT_SYMBOL(__canonicalize_funcptr_for_compare);
|
EXPORT_SYMBOL(__canonicalize_funcptr_for_compare);
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
# Makefile for parisc-specific library files
|
# Makefile for parisc-specific library files
|
||||||
#
|
#
|
||||||
|
|
||||||
lib-y := lusercopy.o bitops.o checksum.o io.o memset.o fixup.o memcpy.o
|
lib-y := lusercopy.o bitops.o checksum.o io.o memset.o fixup.o memcpy.o \
|
||||||
|
ucmpdi2.o
|
||||||
|
|
||||||
obj-y := iomap.o
|
obj-y := iomap.o
|
||||||
|
25
arch/parisc/lib/ucmpdi2.c
Normal file
25
arch/parisc/lib/ucmpdi2.c
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
#include <linux/module.h>
|
||||||
|
|
||||||
|
union ull_union {
|
||||||
|
unsigned long long ull;
|
||||||
|
struct {
|
||||||
|
unsigned int high;
|
||||||
|
unsigned int low;
|
||||||
|
} ui;
|
||||||
|
};
|
||||||
|
|
||||||
|
int __ucmpdi2(unsigned long long a, unsigned long long b)
|
||||||
|
{
|
||||||
|
union ull_union au = {.ull = a};
|
||||||
|
union ull_union bu = {.ull = b};
|
||||||
|
|
||||||
|
if (au.ui.high < bu.ui.high)
|
||||||
|
return 0;
|
||||||
|
else if (au.ui.high > bu.ui.high)
|
||||||
|
return 2;
|
||||||
|
if (au.ui.low < bu.ui.low)
|
||||||
|
return 0;
|
||||||
|
else if (au.ui.low > bu.ui.low)
|
||||||
|
return 2;
|
||||||
|
return 1;
|
||||||
|
}
|
@ -87,7 +87,7 @@ static void tlb_batch_add_one(struct mm_struct *mm, unsigned long vaddr,
|
|||||||
if (!tb->active) {
|
if (!tb->active) {
|
||||||
global_flush_tlb_page(mm, vaddr);
|
global_flush_tlb_page(mm, vaddr);
|
||||||
flush_tsb_user_page(mm, vaddr);
|
flush_tsb_user_page(mm, vaddr);
|
||||||
return;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nr == 0)
|
if (nr == 0)
|
||||||
@ -98,6 +98,7 @@ static void tlb_batch_add_one(struct mm_struct *mm, unsigned long vaddr,
|
|||||||
if (nr >= TLB_BATCH_NR)
|
if (nr >= TLB_BATCH_NR)
|
||||||
flush_tlb_pending();
|
flush_tlb_pending();
|
||||||
|
|
||||||
|
out:
|
||||||
put_cpu_var(tlb_batch);
|
put_cpu_var(tlb_batch);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -258,7 +258,7 @@ static efi_status_t setup_efi_vars(struct boot_params *params)
|
|||||||
u64 store_size, remaining_size, var_size;
|
u64 store_size, remaining_size, var_size;
|
||||||
efi_status_t status;
|
efi_status_t status;
|
||||||
|
|
||||||
if (!sys_table->runtime->query_variable_info)
|
if (sys_table->runtime->hdr.revision < EFI_2_00_SYSTEM_TABLE_REVISION)
|
||||||
return EFI_UNSUPPORTED;
|
return EFI_UNSUPPORTED;
|
||||||
|
|
||||||
data = (struct setup_data *)(unsigned long)params->hdr.setup_data;
|
data = (struct setup_data *)(unsigned long)params->hdr.setup_data;
|
||||||
@ -266,7 +266,7 @@ static efi_status_t setup_efi_vars(struct boot_params *params)
|
|||||||
while (data && data->next)
|
while (data && data->next)
|
||||||
data = (struct setup_data *)(unsigned long)data->next;
|
data = (struct setup_data *)(unsigned long)data->next;
|
||||||
|
|
||||||
status = efi_call_phys4(sys_table->runtime->query_variable_info,
|
status = efi_call_phys4((void *)sys_table->runtime->query_variable_info,
|
||||||
EFI_VARIABLE_NON_VOLATILE |
|
EFI_VARIABLE_NON_VOLATILE |
|
||||||
EFI_VARIABLE_BOOTSERVICE_ACCESS |
|
EFI_VARIABLE_BOOTSERVICE_ACCESS |
|
||||||
EFI_VARIABLE_RUNTIME_ACCESS, &store_size,
|
EFI_VARIABLE_RUNTIME_ACCESS, &store_size,
|
||||||
|
@ -161,6 +161,8 @@ static int hash_recvmsg(struct kiocb *unused, struct socket *sock,
|
|||||||
else if (len < ds)
|
else if (len < ds)
|
||||||
msg->msg_flags |= MSG_TRUNC;
|
msg->msg_flags |= MSG_TRUNC;
|
||||||
|
|
||||||
|
msg->msg_namelen = 0;
|
||||||
|
|
||||||
lock_sock(sk);
|
lock_sock(sk);
|
||||||
if (ctx->more) {
|
if (ctx->more) {
|
||||||
ctx->more = 0;
|
ctx->more = 0;
|
||||||
|
@ -432,6 +432,7 @@ static int skcipher_recvmsg(struct kiocb *unused, struct socket *sock,
|
|||||||
long copied = 0;
|
long copied = 0;
|
||||||
|
|
||||||
lock_sock(sk);
|
lock_sock(sk);
|
||||||
|
msg->msg_namelen = 0;
|
||||||
for (iov = msg->msg_iov, iovlen = msg->msg_iovlen; iovlen > 0;
|
for (iov = msg->msg_iov, iovlen = msg->msg_iovlen; iovlen > 0;
|
||||||
iovlen--, iov++) {
|
iovlen--, iov++) {
|
||||||
unsigned long seglen = iov->iov_len;
|
unsigned long seglen = iov->iov_len;
|
||||||
|
@ -1628,10 +1628,11 @@ static ssize_t efivar_delete(struct file *filp, struct kobject *kobj,
|
|||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool variable_is_present(efi_char16_t *variable_name, efi_guid_t *vendor)
|
static bool variable_is_present(struct efivars *efivars,
|
||||||
|
efi_char16_t *variable_name,
|
||||||
|
efi_guid_t *vendor)
|
||||||
{
|
{
|
||||||
struct efivar_entry *entry, *n;
|
struct efivar_entry *entry, *n;
|
||||||
struct efivars *efivars = &__efivars;
|
|
||||||
unsigned long strsize1, strsize2;
|
unsigned long strsize1, strsize2;
|
||||||
bool found = false;
|
bool found = false;
|
||||||
|
|
||||||
@ -1703,8 +1704,8 @@ static void efivar_update_sysfs_entries(struct work_struct *work)
|
|||||||
if (status != EFI_SUCCESS) {
|
if (status != EFI_SUCCESS) {
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
if (!variable_is_present(variable_name,
|
if (!variable_is_present(efivars,
|
||||||
&vendor)) {
|
variable_name, &vendor)) {
|
||||||
found = true;
|
found = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -2008,7 +2009,8 @@ int register_efivars(struct efivars *efivars,
|
|||||||
* we'll ever see a different variable name,
|
* we'll ever see a different variable name,
|
||||||
* and may end up looping here forever.
|
* and may end up looping here forever.
|
||||||
*/
|
*/
|
||||||
if (variable_is_present(variable_name, &vendor_guid)) {
|
if (variable_is_present(efivars, variable_name,
|
||||||
|
&vendor_guid)) {
|
||||||
dup_variable_bug(variable_name, &vendor_guid,
|
dup_variable_bug(variable_name, &vendor_guid,
|
||||||
variable_name_size);
|
variable_name_size);
|
||||||
status = EFI_NOT_FOUND;
|
status = EFI_NOT_FOUND;
|
||||||
|
@ -642,7 +642,12 @@ static struct platform_driver pxa_gpio_driver = {
|
|||||||
.of_match_table = of_match_ptr(pxa_gpio_dt_ids),
|
.of_match_table = of_match_ptr(pxa_gpio_dt_ids),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
module_platform_driver(pxa_gpio_driver);
|
|
||||||
|
static int __init pxa_gpio_init(void)
|
||||||
|
{
|
||||||
|
return platform_driver_register(&pxa_gpio_driver);
|
||||||
|
}
|
||||||
|
postcore_initcall(pxa_gpio_init);
|
||||||
|
|
||||||
#ifdef CONFIG_PM
|
#ifdef CONFIG_PM
|
||||||
static int pxa_gpio_suspend(void)
|
static int pxa_gpio_suspend(void)
|
||||||
|
@ -610,7 +610,7 @@ static void mb86a20s_layer_bitrate(struct dvb_frontend *fe, u32 layer,
|
|||||||
__func__, 'A' + layer, segment * isdbt_rate[m][f][i]/1000,
|
__func__, 'A' + layer, segment * isdbt_rate[m][f][i]/1000,
|
||||||
rate, rate);
|
rate, rate);
|
||||||
|
|
||||||
state->estimated_rate[i] = rate;
|
state->estimated_rate[layer] = rate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -461,7 +461,7 @@ int cx25821_video_register(struct cx25821_dev *dev)
|
|||||||
|
|
||||||
spin_lock_init(&dev->slock);
|
spin_lock_init(&dev->slock);
|
||||||
|
|
||||||
for (i = 0; i < MAX_VID_CHANNEL_NUM - 1; ++i) {
|
for (i = 0; i < VID_CHANNEL_NUM; ++i) {
|
||||||
cx25821_init_controls(dev, i);
|
cx25821_init_controls(dev, i);
|
||||||
|
|
||||||
cx25821_risc_stopper(dev->pci, &dev->channels[i].vidq.stopper,
|
cx25821_risc_stopper(dev->pci, &dev->channels[i].vidq.stopper,
|
||||||
|
@ -941,6 +941,14 @@ void start_tty(struct tty_struct *tty)
|
|||||||
|
|
||||||
EXPORT_SYMBOL(start_tty);
|
EXPORT_SYMBOL(start_tty);
|
||||||
|
|
||||||
|
static void tty_update_time(struct timespec *time)
|
||||||
|
{
|
||||||
|
unsigned long sec = get_seconds();
|
||||||
|
sec -= sec % 60;
|
||||||
|
if ((long)(sec - time->tv_sec) > 0)
|
||||||
|
time->tv_sec = sec;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* tty_read - read method for tty device files
|
* tty_read - read method for tty device files
|
||||||
* @file: pointer to tty file
|
* @file: pointer to tty file
|
||||||
@ -960,10 +968,11 @@ static ssize_t tty_read(struct file *file, char __user *buf, size_t count,
|
|||||||
loff_t *ppos)
|
loff_t *ppos)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
struct inode *inode = file_inode(file);
|
||||||
struct tty_struct *tty = file_tty(file);
|
struct tty_struct *tty = file_tty(file);
|
||||||
struct tty_ldisc *ld;
|
struct tty_ldisc *ld;
|
||||||
|
|
||||||
if (tty_paranoia_check(tty, file_inode(file), "tty_read"))
|
if (tty_paranoia_check(tty, inode, "tty_read"))
|
||||||
return -EIO;
|
return -EIO;
|
||||||
if (!tty || (test_bit(TTY_IO_ERROR, &tty->flags)))
|
if (!tty || (test_bit(TTY_IO_ERROR, &tty->flags)))
|
||||||
return -EIO;
|
return -EIO;
|
||||||
@ -977,6 +986,9 @@ static ssize_t tty_read(struct file *file, char __user *buf, size_t count,
|
|||||||
i = -EIO;
|
i = -EIO;
|
||||||
tty_ldisc_deref(ld);
|
tty_ldisc_deref(ld);
|
||||||
|
|
||||||
|
if (i > 0)
|
||||||
|
tty_update_time(&inode->i_atime);
|
||||||
|
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1077,8 +1089,10 @@ static inline ssize_t do_tty_write(
|
|||||||
break;
|
break;
|
||||||
cond_resched();
|
cond_resched();
|
||||||
}
|
}
|
||||||
if (written)
|
if (written) {
|
||||||
|
tty_update_time(&file_inode(file)->i_mtime);
|
||||||
ret = written;
|
ret = written;
|
||||||
|
}
|
||||||
out:
|
out:
|
||||||
tty_write_unlock(tty);
|
tty_write_unlock(tty);
|
||||||
return ret;
|
return ret;
|
||||||
|
2
fs/aio.c
2
fs/aio.c
@ -1029,9 +1029,9 @@ static int aio_read_evt(struct kioctx *ioctx, struct io_event *ent)
|
|||||||
spin_unlock(&info->ring_lock);
|
spin_unlock(&info->ring_lock);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
kunmap_atomic(ring);
|
|
||||||
dprintk("leaving aio_read_evt: %d h%lu t%lu\n", ret,
|
dprintk("leaving aio_read_evt: %d h%lu t%lu\n", ret,
|
||||||
(unsigned long)ring->head, (unsigned long)ring->tail);
|
(unsigned long)ring->head, (unsigned long)ring->tail);
|
||||||
|
kunmap_atomic(ring);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
1
kernel/.gitignore
vendored
1
kernel/.gitignore
vendored
@ -4,3 +4,4 @@
|
|||||||
config_data.h
|
config_data.h
|
||||||
config_data.gz
|
config_data.gz
|
||||||
timeconst.h
|
timeconst.h
|
||||||
|
hz.bc
|
||||||
|
@ -4596,6 +4596,7 @@ void perf_event_comm(struct task_struct *task)
|
|||||||
struct perf_event_context *ctx;
|
struct perf_event_context *ctx;
|
||||||
int ctxn;
|
int ctxn;
|
||||||
|
|
||||||
|
rcu_read_lock();
|
||||||
for_each_task_context_nr(ctxn) {
|
for_each_task_context_nr(ctxn) {
|
||||||
ctx = task->perf_event_ctxp[ctxn];
|
ctx = task->perf_event_ctxp[ctxn];
|
||||||
if (!ctx)
|
if (!ctx)
|
||||||
@ -4603,6 +4604,7 @@ void perf_event_comm(struct task_struct *task)
|
|||||||
|
|
||||||
perf_event_enable_on_exec(ctx);
|
perf_event_enable_on_exec(ctx);
|
||||||
}
|
}
|
||||||
|
rcu_read_unlock();
|
||||||
|
|
||||||
if (!atomic_read(&nr_comm_events))
|
if (!atomic_read(&nr_comm_events))
|
||||||
return;
|
return;
|
||||||
|
10
mm/nommu.c
10
mm/nommu.c
@ -1838,6 +1838,16 @@ int remap_pfn_range(struct vm_area_struct *vma, unsigned long addr,
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL(remap_pfn_range);
|
EXPORT_SYMBOL(remap_pfn_range);
|
||||||
|
|
||||||
|
int vm_iomap_memory(struct vm_area_struct *vma, phys_addr_t start, unsigned long len)
|
||||||
|
{
|
||||||
|
unsigned long pfn = start >> PAGE_SHIFT;
|
||||||
|
unsigned long vm_len = vma->vm_end - vma->vm_start;
|
||||||
|
|
||||||
|
pfn += vma->vm_pgoff;
|
||||||
|
return io_remap_pfn_range(vma, vma->vm_start, pfn, vm_len, vma->vm_page_prot);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(vm_iomap_memory);
|
||||||
|
|
||||||
int remap_vmalloc_range(struct vm_area_struct *vma, void *addr,
|
int remap_vmalloc_range(struct vm_area_struct *vma, void *addr,
|
||||||
unsigned long pgoff)
|
unsigned long pgoff)
|
||||||
{
|
{
|
||||||
|
@ -2882,6 +2882,7 @@ static int wm8994_aif3_hw_params(struct snd_pcm_substream *substream,
|
|||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -505,7 +505,10 @@ static int davinci_mcasp_set_dai_fmt(struct snd_soc_dai *cpu_dai,
|
|||||||
mcasp_set_bits(base + DAVINCI_MCASP_ACLKRCTL_REG, ACLKRE);
|
mcasp_set_bits(base + DAVINCI_MCASP_ACLKRCTL_REG, ACLKRE);
|
||||||
mcasp_set_bits(base + DAVINCI_MCASP_RXFMCTL_REG, AFSRE);
|
mcasp_set_bits(base + DAVINCI_MCASP_RXFMCTL_REG, AFSRE);
|
||||||
|
|
||||||
mcasp_set_bits(base + DAVINCI_MCASP_PDIR_REG, ACLKX | AFSX);
|
mcasp_set_bits(base + DAVINCI_MCASP_PDIR_REG,
|
||||||
|
ACLKX | ACLKR);
|
||||||
|
mcasp_set_bits(base + DAVINCI_MCASP_PDIR_REG,
|
||||||
|
AFSX | AFSR);
|
||||||
break;
|
break;
|
||||||
case SND_SOC_DAIFMT_CBM_CFS:
|
case SND_SOC_DAIFMT_CBM_CFS:
|
||||||
/* codec is clock master and frame slave */
|
/* codec is clock master and frame slave */
|
||||||
@ -565,7 +568,7 @@ static int davinci_mcasp_set_dai_fmt(struct snd_soc_dai *cpu_dai,
|
|||||||
mcasp_set_bits(base + DAVINCI_MCASP_ACLKXCTL_REG, ACLKXPOL);
|
mcasp_set_bits(base + DAVINCI_MCASP_ACLKXCTL_REG, ACLKXPOL);
|
||||||
mcasp_clr_bits(base + DAVINCI_MCASP_TXFMCTL_REG, FSXPOL);
|
mcasp_clr_bits(base + DAVINCI_MCASP_TXFMCTL_REG, FSXPOL);
|
||||||
|
|
||||||
mcasp_clr_bits(base + DAVINCI_MCASP_ACLKRCTL_REG, ACLKRPOL);
|
mcasp_set_bits(base + DAVINCI_MCASP_ACLKRCTL_REG, ACLKRPOL);
|
||||||
mcasp_clr_bits(base + DAVINCI_MCASP_RXFMCTL_REG, FSRPOL);
|
mcasp_clr_bits(base + DAVINCI_MCASP_RXFMCTL_REG, FSRPOL);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1095,9 +1095,9 @@ int dapm_clock_event(struct snd_soc_dapm_widget *w,
|
|||||||
|
|
||||||
#ifdef CONFIG_HAVE_CLK
|
#ifdef CONFIG_HAVE_CLK
|
||||||
if (SND_SOC_DAPM_EVENT_ON(event)) {
|
if (SND_SOC_DAPM_EVENT_ON(event)) {
|
||||||
return clk_enable(w->clk);
|
return clk_prepare_enable(w->clk);
|
||||||
} else {
|
} else {
|
||||||
clk_disable(w->clk);
|
clk_disable_unprepare(w->clk);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user