mirror of
https://github.com/adulau/aha.git
synced 2024-12-27 19:26:25 +00:00
Merge branch 'master' into for-2.6.31
Conflicts: drivers/ide/ide-io.c Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
This commit is contained in:
commit
9bd7de51ee
99 changed files with 559 additions and 384 deletions
|
@ -133,4 +133,4 @@ RAM/SWAP in 10240 inodes and it is only accessible by root.
|
|||
Author:
|
||||
Christoph Rohland <cr@sap.com>, 1.12.01
|
||||
Updated:
|
||||
Hugh Dickins <hugh@veritas.com>, 4 June 2007
|
||||
Hugh Dickins, 4 June 2007
|
||||
|
|
|
@ -1266,13 +1266,22 @@ sctp_rmem - vector of 3 INTEGERs: min, default, max
|
|||
sctp_wmem - vector of 3 INTEGERs: min, default, max
|
||||
See tcp_wmem for a description.
|
||||
|
||||
UNDOCUMENTED:
|
||||
|
||||
/proc/sys/net/core/*
|
||||
dev_weight FIXME
|
||||
dev_weight - INTEGER
|
||||
The maximum number of packets that kernel can handle on a NAPI
|
||||
interrupt, it's a Per-CPU variable.
|
||||
|
||||
Default: 64
|
||||
|
||||
/proc/sys/net/unix/*
|
||||
max_dgram_qlen FIXME
|
||||
max_dgram_qlen - INTEGER
|
||||
The maximum length of dgram socket receive queue
|
||||
|
||||
Default: 10
|
||||
|
||||
|
||||
UNDOCUMENTED:
|
||||
|
||||
/proc/sys/net/irda/*
|
||||
fast_poll_increase FIXME
|
||||
|
|
|
@ -5579,6 +5579,14 @@ M: ian@mnementh.co.uk
|
|||
S: Maintained
|
||||
F: drivers/mmc/host/tmio_mmc.*
|
||||
|
||||
TMPFS (SHMEM FILESYSTEM)
|
||||
P: Hugh Dickins
|
||||
M: hugh.dickins@tiscali.co.uk
|
||||
L: linux-mm@kvack.org
|
||||
S: Maintained
|
||||
F: include/linux/shmem_fs.h
|
||||
F: mm/shmem.c
|
||||
|
||||
TPM DEVICE DRIVER
|
||||
P: Debora Velarde
|
||||
M: debora@linux.vnet.ibm.com
|
||||
|
|
|
@ -273,6 +273,7 @@ config ARCH_EP93XX
|
|||
select HAVE_CLK
|
||||
select COMMON_CLKDEV
|
||||
select ARCH_REQUIRE_GPIOLIB
|
||||
select ARCH_HAS_HOLES_MEMORYMODEL
|
||||
help
|
||||
This enables support for the Cirrus EP93xx series of CPUs.
|
||||
|
||||
|
@ -976,10 +977,9 @@ config OABI_COMPAT
|
|||
UNPREDICTABLE (in fact it can be predicted that it won't work
|
||||
at all). If in doubt say Y.
|
||||
|
||||
config ARCH_FLATMEM_HAS_HOLES
|
||||
config ARCH_HAS_HOLES_MEMORYMODEL
|
||||
bool
|
||||
default y
|
||||
depends on FLATMEM
|
||||
default n
|
||||
|
||||
# Discontigmem is deprecated
|
||||
config ARCH_DISCONTIGMEM_ENABLE
|
||||
|
|
|
@ -253,9 +253,9 @@ void __cpuinit gic_cpu_init(unsigned int gic_nr, void __iomem *base)
|
|||
}
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
void gic_raise_softirq(cpumask_t cpumask, unsigned int irq)
|
||||
void gic_raise_softirq(const struct cpumask *mask, unsigned int irq)
|
||||
{
|
||||
unsigned long map = *cpus_addr(cpumask);
|
||||
unsigned long map = *cpus_addr(*mask);
|
||||
|
||||
/* this always happens on GIC0 */
|
||||
writel(map << 16 | irq, gic_data[0].dist_base + GIC_DIST_SOFTINT);
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
void gic_dist_init(unsigned int gic_nr, void __iomem *base, unsigned int irq_start);
|
||||
void gic_cpu_init(unsigned int gic_nr, void __iomem *base);
|
||||
void gic_cascade_irq(unsigned int gic_nr, unsigned int irq);
|
||||
void gic_raise_softirq(cpumask_t cpumask, unsigned int irq);
|
||||
void gic_raise_softirq(const struct cpumask *mask, unsigned int irq);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
@ -53,17 +53,12 @@ extern void smp_store_cpu_info(unsigned int cpuid);
|
|||
/*
|
||||
* Raise an IPI cross call on CPUs in callmap.
|
||||
*/
|
||||
extern void smp_cross_call(cpumask_t callmap);
|
||||
|
||||
/*
|
||||
* Broadcast a timer interrupt to the other CPUs.
|
||||
*/
|
||||
extern void smp_send_timer(void);
|
||||
extern void smp_cross_call(const struct cpumask *mask);
|
||||
|
||||
/*
|
||||
* Broadcast a clock event to other CPUs.
|
||||
*/
|
||||
extern void smp_timer_broadcast(cpumask_t mask);
|
||||
extern void smp_timer_broadcast(const struct cpumask *mask);
|
||||
|
||||
/*
|
||||
* Boot a secondary CPU, and assign it the specified idle task.
|
||||
|
@ -102,7 +97,8 @@ extern int platform_cpu_kill(unsigned int cpu);
|
|||
extern void platform_cpu_enable(unsigned int cpu);
|
||||
|
||||
extern void arch_send_call_function_single_ipi(int cpu);
|
||||
extern void arch_send_call_function_ipi(cpumask_t mask);
|
||||
extern void arch_send_call_function_ipi_mask(const struct cpumask *mask);
|
||||
#define arch_send_call_function_ipi_mask arch_send_call_function_ipi_mask
|
||||
|
||||
/*
|
||||
* Local timer interrupt handling function (can be IPI'ed).
|
||||
|
|
|
@ -326,14 +326,14 @@ void __init smp_prepare_boot_cpu(void)
|
|||
per_cpu(cpu_data, cpu).idle = current;
|
||||
}
|
||||
|
||||
static void send_ipi_message(cpumask_t callmap, enum ipi_msg_type msg)
|
||||
static void send_ipi_message(const struct cpumask *mask, enum ipi_msg_type msg)
|
||||
{
|
||||
unsigned long flags;
|
||||
unsigned int cpu;
|
||||
|
||||
local_irq_save(flags);
|
||||
|
||||
for_each_cpu_mask(cpu, callmap) {
|
||||
for_each_cpu(cpu, mask) {
|
||||
struct ipi_data *ipi = &per_cpu(ipi_data, cpu);
|
||||
|
||||
spin_lock(&ipi->lock);
|
||||
|
@ -344,19 +344,19 @@ static void send_ipi_message(cpumask_t callmap, enum ipi_msg_type msg)
|
|||
/*
|
||||
* Call the platform specific cross-CPU call function.
|
||||
*/
|
||||
smp_cross_call(callmap);
|
||||
smp_cross_call(mask);
|
||||
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
|
||||
void arch_send_call_function_ipi(cpumask_t mask)
|
||||
void arch_send_call_function_ipi_mask(const struct cpumask *mask)
|
||||
{
|
||||
send_ipi_message(mask, IPI_CALL_FUNC);
|
||||
}
|
||||
|
||||
void arch_send_call_function_single_ipi(int cpu)
|
||||
{
|
||||
send_ipi_message(cpumask_of_cpu(cpu), IPI_CALL_FUNC_SINGLE);
|
||||
send_ipi_message(cpumask_of(cpu), IPI_CALL_FUNC_SINGLE);
|
||||
}
|
||||
|
||||
void show_ipi_list(struct seq_file *p)
|
||||
|
@ -498,17 +498,10 @@ asmlinkage void __exception do_IPI(struct pt_regs *regs)
|
|||
|
||||
void smp_send_reschedule(int cpu)
|
||||
{
|
||||
send_ipi_message(cpumask_of_cpu(cpu), IPI_RESCHEDULE);
|
||||
send_ipi_message(cpumask_of(cpu), IPI_RESCHEDULE);
|
||||
}
|
||||
|
||||
void smp_send_timer(void)
|
||||
{
|
||||
cpumask_t mask = cpu_online_map;
|
||||
cpu_clear(smp_processor_id(), mask);
|
||||
send_ipi_message(mask, IPI_TIMER);
|
||||
}
|
||||
|
||||
void smp_timer_broadcast(cpumask_t mask)
|
||||
void smp_timer_broadcast(const struct cpumask *mask)
|
||||
{
|
||||
send_ipi_message(mask, IPI_TIMER);
|
||||
}
|
||||
|
@ -517,7 +510,7 @@ void smp_send_stop(void)
|
|||
{
|
||||
cpumask_t mask = cpu_online_map;
|
||||
cpu_clear(smp_processor_id(), mask);
|
||||
send_ipi_message(mask, IPI_CPU_STOP);
|
||||
send_ipi_message(&mask, IPI_CPU_STOP);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -528,20 +521,17 @@ int setup_profiling_timer(unsigned int multiplier)
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
static int
|
||||
on_each_cpu_mask(void (*func)(void *), void *info, int wait, cpumask_t mask)
|
||||
static void
|
||||
on_each_cpu_mask(void (*func)(void *), void *info, int wait,
|
||||
const struct cpumask *mask)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
preempt_disable();
|
||||
|
||||
ret = smp_call_function_mask(mask, func, info, wait);
|
||||
if (cpu_isset(smp_processor_id(), mask))
|
||||
smp_call_function_many(mask, func, info, wait);
|
||||
if (cpumask_test_cpu(smp_processor_id(), mask))
|
||||
func(info);
|
||||
|
||||
preempt_enable();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**********************************************************************/
|
||||
|
@ -602,20 +592,17 @@ void flush_tlb_all(void)
|
|||
|
||||
void flush_tlb_mm(struct mm_struct *mm)
|
||||
{
|
||||
cpumask_t mask = mm->cpu_vm_mask;
|
||||
|
||||
on_each_cpu_mask(ipi_flush_tlb_mm, mm, 1, mask);
|
||||
on_each_cpu_mask(ipi_flush_tlb_mm, mm, 1, &mm->cpu_vm_mask);
|
||||
}
|
||||
|
||||
void flush_tlb_page(struct vm_area_struct *vma, unsigned long uaddr)
|
||||
{
|
||||
cpumask_t mask = vma->vm_mm->cpu_vm_mask;
|
||||
struct tlb_args ta;
|
||||
|
||||
ta.ta_vma = vma;
|
||||
ta.ta_start = uaddr;
|
||||
|
||||
on_each_cpu_mask(ipi_flush_tlb_page, &ta, 1, mask);
|
||||
on_each_cpu_mask(ipi_flush_tlb_page, &ta, 1, &vma->vm_mm->cpu_vm_mask);
|
||||
}
|
||||
|
||||
void flush_tlb_kernel_page(unsigned long kaddr)
|
||||
|
@ -630,14 +617,13 @@ void flush_tlb_kernel_page(unsigned long kaddr)
|
|||
void flush_tlb_range(struct vm_area_struct *vma,
|
||||
unsigned long start, unsigned long end)
|
||||
{
|
||||
cpumask_t mask = vma->vm_mm->cpu_vm_mask;
|
||||
struct tlb_args ta;
|
||||
|
||||
ta.ta_vma = vma;
|
||||
ta.ta_start = start;
|
||||
ta.ta_end = end;
|
||||
|
||||
on_each_cpu_mask(ipi_flush_tlb_range, &ta, 1, mask);
|
||||
on_each_cpu_mask(ipi_flush_tlb_range, &ta, 1, &vma->vm_mm->cpu_vm_mask);
|
||||
}
|
||||
|
||||
void flush_tlb_kernel_range(unsigned long start, unsigned long end)
|
||||
|
|
|
@ -21,15 +21,50 @@
|
|||
#include <asm/div64.h>
|
||||
#include <mach/hardware.h>
|
||||
|
||||
|
||||
/*
|
||||
* The EP93xx has two external crystal oscillators. To generate the
|
||||
* required high-frequency clocks, the processor uses two phase-locked-
|
||||
* loops (PLLs) to multiply the incoming external clock signal to much
|
||||
* higher frequencies that are then divided down by programmable dividers
|
||||
* to produce the needed clocks. The PLLs operate independently of one
|
||||
* another.
|
||||
*/
|
||||
#define EP93XX_EXT_CLK_RATE 14745600
|
||||
#define EP93XX_EXT_RTC_RATE 32768
|
||||
|
||||
|
||||
struct clk {
|
||||
unsigned long rate;
|
||||
int users;
|
||||
int sw_locked;
|
||||
u32 enable_reg;
|
||||
u32 enable_mask;
|
||||
|
||||
unsigned long (*get_rate)(struct clk *clk);
|
||||
};
|
||||
|
||||
static struct clk clk_uart = {
|
||||
.rate = 14745600,
|
||||
|
||||
static unsigned long get_uart_rate(struct clk *clk);
|
||||
|
||||
|
||||
static struct clk clk_uart1 = {
|
||||
.sw_locked = 1,
|
||||
.enable_reg = EP93XX_SYSCON_DEVICE_CONFIG,
|
||||
.enable_mask = EP93XX_SYSCON_DEVICE_CONFIG_U1EN,
|
||||
.get_rate = get_uart_rate,
|
||||
};
|
||||
static struct clk clk_uart2 = {
|
||||
.sw_locked = 1,
|
||||
.enable_reg = EP93XX_SYSCON_DEVICE_CONFIG,
|
||||
.enable_mask = EP93XX_SYSCON_DEVICE_CONFIG_U2EN,
|
||||
.get_rate = get_uart_rate,
|
||||
};
|
||||
static struct clk clk_uart3 = {
|
||||
.sw_locked = 1,
|
||||
.enable_reg = EP93XX_SYSCON_DEVICE_CONFIG,
|
||||
.enable_mask = EP93XX_SYSCON_DEVICE_CONFIG_U3EN,
|
||||
.get_rate = get_uart_rate,
|
||||
};
|
||||
static struct clk clk_pll1;
|
||||
static struct clk clk_f;
|
||||
|
@ -95,9 +130,9 @@ static struct clk clk_m2m1 = {
|
|||
{ .dev_id = dev, .con_id = con, .clk = ck }
|
||||
|
||||
static struct clk_lookup clocks[] = {
|
||||
INIT_CK("apb:uart1", NULL, &clk_uart),
|
||||
INIT_CK("apb:uart2", NULL, &clk_uart),
|
||||
INIT_CK("apb:uart3", NULL, &clk_uart),
|
||||
INIT_CK("apb:uart1", NULL, &clk_uart1),
|
||||
INIT_CK("apb:uart2", NULL, &clk_uart2),
|
||||
INIT_CK("apb:uart3", NULL, &clk_uart3),
|
||||
INIT_CK(NULL, "pll1", &clk_pll1),
|
||||
INIT_CK(NULL, "fclk", &clk_f),
|
||||
INIT_CK(NULL, "hclk", &clk_h),
|
||||
|
@ -125,6 +160,8 @@ int clk_enable(struct clk *clk)
|
|||
u32 value;
|
||||
|
||||
value = __raw_readl(clk->enable_reg);
|
||||
if (clk->sw_locked)
|
||||
__raw_writel(0xaa, EP93XX_SYSCON_SWLOCK);
|
||||
__raw_writel(value | clk->enable_mask, clk->enable_reg);
|
||||
}
|
||||
|
||||
|
@ -138,13 +175,29 @@ void clk_disable(struct clk *clk)
|
|||
u32 value;
|
||||
|
||||
value = __raw_readl(clk->enable_reg);
|
||||
if (clk->sw_locked)
|
||||
__raw_writel(0xaa, EP93XX_SYSCON_SWLOCK);
|
||||
__raw_writel(value & ~clk->enable_mask, clk->enable_reg);
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(clk_disable);
|
||||
|
||||
static unsigned long get_uart_rate(struct clk *clk)
|
||||
{
|
||||
u32 value;
|
||||
|
||||
value = __raw_readl(EP93XX_SYSCON_CLOCK_CONTROL);
|
||||
if (value & EP93XX_SYSCON_CLOCK_UARTBAUD)
|
||||
return EP93XX_EXT_CLK_RATE;
|
||||
else
|
||||
return EP93XX_EXT_CLK_RATE / 2;
|
||||
}
|
||||
|
||||
unsigned long clk_get_rate(struct clk *clk)
|
||||
{
|
||||
if (clk->get_rate)
|
||||
return clk->get_rate(clk);
|
||||
|
||||
return clk->rate;
|
||||
}
|
||||
EXPORT_SYMBOL(clk_get_rate);
|
||||
|
@ -162,7 +215,7 @@ static unsigned long calc_pll_rate(u32 config_word)
|
|||
unsigned long long rate;
|
||||
int i;
|
||||
|
||||
rate = 14745600;
|
||||
rate = EP93XX_EXT_CLK_RATE;
|
||||
rate *= ((config_word >> 11) & 0x1f) + 1; /* X1FBD */
|
||||
rate *= ((config_word >> 5) & 0x3f) + 1; /* X2FBD */
|
||||
do_div(rate, (config_word & 0x1f) + 1); /* X2IPD */
|
||||
|
@ -195,7 +248,7 @@ static int __init ep93xx_clock_init(void)
|
|||
|
||||
value = __raw_readl(EP93XX_SYSCON_CLOCK_SET1);
|
||||
if (!(value & 0x00800000)) { /* PLL1 bypassed? */
|
||||
clk_pll1.rate = 14745600;
|
||||
clk_pll1.rate = EP93XX_EXT_CLK_RATE;
|
||||
} else {
|
||||
clk_pll1.rate = calc_pll_rate(value);
|
||||
}
|
||||
|
@ -206,7 +259,7 @@ static int __init ep93xx_clock_init(void)
|
|||
|
||||
value = __raw_readl(EP93XX_SYSCON_CLOCK_SET2);
|
||||
if (!(value & 0x00080000)) { /* PLL2 bypassed? */
|
||||
clk_pll2.rate = 14745600;
|
||||
clk_pll2.rate = EP93XX_EXT_CLK_RATE;
|
||||
} else if (value & 0x00040000) { /* PLL2 enabled? */
|
||||
clk_pll2.rate = calc_pll_rate(value);
|
||||
} else {
|
||||
|
|
|
@ -159,7 +159,10 @@
|
|||
#define EP93XX_SYSCON_CLOCK_SET1 EP93XX_SYSCON_REG(0x20)
|
||||
#define EP93XX_SYSCON_CLOCK_SET2 EP93XX_SYSCON_REG(0x24)
|
||||
#define EP93XX_SYSCON_DEVICE_CONFIG EP93XX_SYSCON_REG(0x80)
|
||||
#define EP93XX_SYSCON_DEVICE_CONFIG_CRUNCH_ENABLE 0x00800000
|
||||
#define EP93XX_SYSCON_DEVICE_CONFIG_U3EN (1<<24)
|
||||
#define EP93XX_SYSCON_DEVICE_CONFIG_CRUNCH_ENABLE (1<<23)
|
||||
#define EP93XX_SYSCON_DEVICE_CONFIG_U2EN (1<<20)
|
||||
#define EP93XX_SYSCON_DEVICE_CONFIG_U1EN (1<<18)
|
||||
#define EP93XX_SYSCON_SWLOCK EP93XX_SYSCON_REG(0xc0)
|
||||
|
||||
#define EP93XX_WATCHDOG_BASE (EP93XX_APB_VIRT_BASE + 0x00140000)
|
||||
|
|
|
@ -121,7 +121,7 @@ static struct clk uartclk = {
|
|||
.rate = 14745600,
|
||||
};
|
||||
|
||||
static struct clk_lookup lookups[] __initdata = {
|
||||
static struct clk_lookup lookups[] = {
|
||||
{ /* UART0 */
|
||||
.dev_id = "mb:16",
|
||||
.clk = &uartclk,
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
|
||||
/* IO_START and IO_BASE are defined in hardware.h */
|
||||
|
||||
#define SYS_CLOCK_START (IO_START + SYS_CLCOK_OFF) /* Physical address */
|
||||
#define SYS_CLOCK_START (IO_START + SYS_CLOCK_OFF) /* Physical address */
|
||||
#define SYS_CLOCK_BASE (IO_BASE + SYS_CLOCK_OFF) /* Virtual address */
|
||||
|
||||
/* Define the interface to the SYS_CLOCK */
|
||||
|
|
|
@ -103,10 +103,10 @@ static struct omap_clk omap24xx_clks[] = {
|
|||
CLK(NULL, "mdm_ick", &mdm_ick, CK_243X),
|
||||
CLK(NULL, "mdm_osc_ck", &mdm_osc_ck, CK_243X),
|
||||
/* DSS domain clocks */
|
||||
CLK(NULL, "dss_ick", &dss_ick, CK_243X | CK_242X),
|
||||
CLK(NULL, "dss1_fck", &dss1_fck, CK_243X | CK_242X),
|
||||
CLK(NULL, "dss2_fck", &dss2_fck, CK_243X | CK_242X),
|
||||
CLK(NULL, "dss_54m_fck", &dss_54m_fck, CK_243X | CK_242X),
|
||||
CLK("omapfb", "ick", &dss_ick, CK_243X | CK_242X),
|
||||
CLK("omapfb", "dss1_fck", &dss1_fck, CK_243X | CK_242X),
|
||||
CLK("omapfb", "dss2_fck", &dss2_fck, CK_243X | CK_242X),
|
||||
CLK("omapfb", "tv_fck", &dss_54m_fck, CK_243X | CK_242X),
|
||||
/* L3 domain clocks */
|
||||
CLK(NULL, "core_l3_ck", &core_l3_ck, CK_243X | CK_242X),
|
||||
CLK(NULL, "ssi_fck", &ssi_ssr_sst_fck, CK_243X | CK_242X),
|
||||
|
@ -206,7 +206,7 @@ static struct omap_clk omap24xx_clks[] = {
|
|||
CLK(NULL, "aes_ick", &aes_ick, CK_243X | CK_242X),
|
||||
CLK(NULL, "pka_ick", &pka_ick, CK_243X | CK_242X),
|
||||
CLK(NULL, "usb_fck", &usb_fck, CK_243X | CK_242X),
|
||||
CLK(NULL, "usbhs_ick", &usbhs_ick, CK_243X),
|
||||
CLK("musb_hdrc", "ick", &usbhs_ick, CK_243X),
|
||||
CLK("mmci-omap-hs.0", "ick", &mmchs1_ick, CK_243X),
|
||||
CLK("mmci-omap-hs.0", "fck", &mmchs1_fck, CK_243X),
|
||||
CLK("mmci-omap-hs.1", "ick", &mmchs2_ick, CK_243X),
|
||||
|
|
|
@ -157,7 +157,7 @@ static struct omap_clk omap34xx_clks[] = {
|
|||
CLK(NULL, "ssi_ssr_fck", &ssi_ssr_fck, CK_343X),
|
||||
CLK(NULL, "ssi_sst_fck", &ssi_sst_fck, CK_343X),
|
||||
CLK(NULL, "core_l3_ick", &core_l3_ick, CK_343X),
|
||||
CLK(NULL, "hsotgusb_ick", &hsotgusb_ick, CK_343X),
|
||||
CLK("musb_hdrc", "ick", &hsotgusb_ick, CK_343X),
|
||||
CLK(NULL, "sdrc_ick", &sdrc_ick, CK_343X),
|
||||
CLK(NULL, "gpmc_fck", &gpmc_fck, CK_343X),
|
||||
CLK(NULL, "security_l3_ick", &security_l3_ick, CK_343X),
|
||||
|
@ -197,11 +197,11 @@ static struct omap_clk omap34xx_clks[] = {
|
|||
CLK("omap_rng", "ick", &rng_ick, CK_343X),
|
||||
CLK(NULL, "sha11_ick", &sha11_ick, CK_343X),
|
||||
CLK(NULL, "des1_ick", &des1_ick, CK_343X),
|
||||
CLK(NULL, "dss1_alwon_fck", &dss1_alwon_fck, CK_343X),
|
||||
CLK(NULL, "dss_tv_fck", &dss_tv_fck, CK_343X),
|
||||
CLK(NULL, "dss_96m_fck", &dss_96m_fck, CK_343X),
|
||||
CLK(NULL, "dss2_alwon_fck", &dss2_alwon_fck, CK_343X),
|
||||
CLK(NULL, "dss_ick", &dss_ick, CK_343X),
|
||||
CLK("omapfb", "dss1_fck", &dss1_alwon_fck, CK_343X),
|
||||
CLK("omapfb", "tv_fck", &dss_tv_fck, CK_343X),
|
||||
CLK("omapfb", "video_fck", &dss_96m_fck, CK_343X),
|
||||
CLK("omapfb", "dss2_fck", &dss2_alwon_fck, CK_343X),
|
||||
CLK("omapfb", "ick", &dss_ick, CK_343X),
|
||||
CLK(NULL, "cam_mclk", &cam_mclk, CK_343X),
|
||||
CLK(NULL, "cam_ick", &cam_ick, CK_343X),
|
||||
CLK(NULL, "csi2_96m_fck", &csi2_96m_fck, CK_343X),
|
||||
|
|
|
@ -2182,7 +2182,7 @@ static struct clk wkup_32k_fck = {
|
|||
|
||||
static struct clk gpio1_dbck = {
|
||||
.name = "gpio1_dbck",
|
||||
.ops = &clkops_omap2_dflt_wait,
|
||||
.ops = &clkops_omap2_dflt,
|
||||
.parent = &wkup_32k_fck,
|
||||
.enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_FCLKEN),
|
||||
.enable_bit = OMAP3430_EN_GPIO1_SHIFT,
|
||||
|
@ -2427,7 +2427,7 @@ static struct clk per_32k_alwon_fck = {
|
|||
|
||||
static struct clk gpio6_dbck = {
|
||||
.name = "gpio6_dbck",
|
||||
.ops = &clkops_omap2_dflt_wait,
|
||||
.ops = &clkops_omap2_dflt,
|
||||
.parent = &per_32k_alwon_fck,
|
||||
.enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
|
||||
.enable_bit = OMAP3430_EN_GPIO6_SHIFT,
|
||||
|
@ -2437,7 +2437,7 @@ static struct clk gpio6_dbck = {
|
|||
|
||||
static struct clk gpio5_dbck = {
|
||||
.name = "gpio5_dbck",
|
||||
.ops = &clkops_omap2_dflt_wait,
|
||||
.ops = &clkops_omap2_dflt,
|
||||
.parent = &per_32k_alwon_fck,
|
||||
.enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
|
||||
.enable_bit = OMAP3430_EN_GPIO5_SHIFT,
|
||||
|
@ -2447,7 +2447,7 @@ static struct clk gpio5_dbck = {
|
|||
|
||||
static struct clk gpio4_dbck = {
|
||||
.name = "gpio4_dbck",
|
||||
.ops = &clkops_omap2_dflt_wait,
|
||||
.ops = &clkops_omap2_dflt,
|
||||
.parent = &per_32k_alwon_fck,
|
||||
.enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
|
||||
.enable_bit = OMAP3430_EN_GPIO4_SHIFT,
|
||||
|
@ -2457,7 +2457,7 @@ static struct clk gpio4_dbck = {
|
|||
|
||||
static struct clk gpio3_dbck = {
|
||||
.name = "gpio3_dbck",
|
||||
.ops = &clkops_omap2_dflt_wait,
|
||||
.ops = &clkops_omap2_dflt,
|
||||
.parent = &per_32k_alwon_fck,
|
||||
.enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
|
||||
.enable_bit = OMAP3430_EN_GPIO3_SHIFT,
|
||||
|
@ -2467,7 +2467,7 @@ static struct clk gpio3_dbck = {
|
|||
|
||||
static struct clk gpio2_dbck = {
|
||||
.name = "gpio2_dbck",
|
||||
.ops = &clkops_omap2_dflt_wait,
|
||||
.ops = &clkops_omap2_dflt,
|
||||
.parent = &per_32k_alwon_fck,
|
||||
.enable_reg = OMAP_CM_REGADDR(OMAP3430_PER_MOD, CM_FCLKEN),
|
||||
.enable_bit = OMAP3430_EN_GPIO2_SHIFT,
|
||||
|
|
|
@ -354,9 +354,11 @@ static void omap_init_mcspi(void)
|
|||
platform_device_register(&omap2_mcspi1);
|
||||
platform_device_register(&omap2_mcspi2);
|
||||
#if defined(CONFIG_ARCH_OMAP2430) || defined(CONFIG_ARCH_OMAP3)
|
||||
if (cpu_is_omap2430() || cpu_is_omap343x())
|
||||
platform_device_register(&omap2_mcspi3);
|
||||
#endif
|
||||
#ifdef CONFIG_ARCH_OMAP3
|
||||
if (cpu_is_omap343x())
|
||||
platform_device_register(&omap2_mcspi4);
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -409,7 +409,7 @@
|
|||
/* PM_PREPWSTST_CAM specific bits */
|
||||
|
||||
/* PM_PWSTCTRL_USBHOST specific bits */
|
||||
#define OMAP3430ES2_SAVEANDRESTORE_SHIFT (1 << 4)
|
||||
#define OMAP3430ES2_SAVEANDRESTORE_SHIFT 4
|
||||
|
||||
/* RM_RSTST_PER specific bits */
|
||||
|
||||
|
|
|
@ -187,7 +187,7 @@ int tusb6010_platform_retime(unsigned is_refclk)
|
|||
unsigned sysclk_ps;
|
||||
int status;
|
||||
|
||||
if (!refclk_psec || sysclk_ps == 0)
|
||||
if (!refclk_psec || fclk_ps == 0)
|
||||
return -ENODEV;
|
||||
|
||||
sysclk_ps = is_refclk ? refclk_psec : TUSB6010_OSCCLK_60;
|
||||
|
|
|
@ -46,6 +46,7 @@
|
|||
#include <mach/audio.h>
|
||||
#include <mach/pxafb.h>
|
||||
#include <mach/i2c.h>
|
||||
#include <mach/regs-uart.h>
|
||||
#include <mach/viper.h>
|
||||
|
||||
#include <asm/setup.h>
|
||||
|
|
|
@ -750,14 +750,6 @@ void __init realview_timer_init(unsigned int timer_irq)
|
|||
{
|
||||
u32 val;
|
||||
|
||||
#ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST
|
||||
/*
|
||||
* The dummy clock device has to be registered before the main device
|
||||
* so that the latter will broadcast the clock events
|
||||
*/
|
||||
local_timer_setup();
|
||||
#endif
|
||||
|
||||
/*
|
||||
* set clock frequency:
|
||||
* REALVIEW_REFCLK is 32KHz
|
||||
|
|
|
@ -15,16 +15,9 @@
|
|||
/*
|
||||
* We use IRQ1 as the IPI
|
||||
*/
|
||||
static inline void smp_cross_call(cpumask_t callmap)
|
||||
{
|
||||
gic_raise_softirq(callmap, 1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Do nothing on MPcore.
|
||||
*/
|
||||
static inline void smp_cross_call_done(cpumask_t callmap)
|
||||
static inline void smp_cross_call(const struct cpumask *mask)
|
||||
{
|
||||
gic_raise_softirq(mask, 1);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -189,8 +189,10 @@ void __cpuinit local_timer_setup(void)
|
|||
struct clock_event_device *clk = &per_cpu(local_clockevent, cpu);
|
||||
|
||||
clk->name = "dummy_timer";
|
||||
clk->features = CLOCK_EVT_FEAT_DUMMY;
|
||||
clk->rating = 200;
|
||||
clk->features = CLOCK_EVT_FEAT_ONESHOT |
|
||||
CLOCK_EVT_FEAT_PERIODIC |
|
||||
CLOCK_EVT_FEAT_DUMMY;
|
||||
clk->rating = 400;
|
||||
clk->mult = 1;
|
||||
clk->set_mode = dummy_timer_set_mode;
|
||||
clk->broadcast = smp_timer_broadcast;
|
||||
|
|
|
@ -77,13 +77,6 @@ void __cpuinit platform_secondary_init(unsigned int cpu)
|
|||
{
|
||||
trace_hardirqs_off();
|
||||
|
||||
/*
|
||||
* the primary core may have used a "cross call" soft interrupt
|
||||
* to get this processor out of WFI in the BootMonitor - make
|
||||
* sure that we are no longer being sent this soft interrupt
|
||||
*/
|
||||
smp_cross_call_done(cpumask_of_cpu(cpu));
|
||||
|
||||
/*
|
||||
* if any interrupts are already enabled for the primary
|
||||
* core (e.g. timer irq), then they will not have been enabled
|
||||
|
@ -136,7 +129,7 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
|
|||
* Use smp_cross_call() for this, since there's little
|
||||
* point duplicating the code here
|
||||
*/
|
||||
smp_cross_call(cpumask_of_cpu(cpu));
|
||||
smp_cross_call(cpumask_of(cpu));
|
||||
|
||||
timeout = jiffies + (1 * HZ);
|
||||
while (time_before(jiffies, timeout)) {
|
||||
|
@ -224,11 +217,9 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
|
|||
if (max_cpus > ncores)
|
||||
max_cpus = ncores;
|
||||
|
||||
#ifdef CONFIG_LOCAL_TIMERS
|
||||
#if defined(CONFIG_LOCAL_TIMERS) || defined(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST)
|
||||
/*
|
||||
* Enable the local timer for primary CPU. If the device is
|
||||
* dummy (!CONFIG_LOCAL_TIMERS), it was already registers in
|
||||
* realview_timer_init
|
||||
* Enable the local timer or broadcast device for the boot CPU.
|
||||
*/
|
||||
local_timer_setup();
|
||||
#endif
|
||||
|
|
|
@ -588,8 +588,6 @@ static void __init bast_map_io(void)
|
|||
|
||||
s3c_device_nand.dev.platform_data = &bast_nand_info;
|
||||
|
||||
s3c_i2c0_set_platdata(&bast_i2c_info);
|
||||
|
||||
s3c24xx_init_io(bast_iodesc, ARRAY_SIZE(bast_iodesc));
|
||||
s3c24xx_init_clocks(0);
|
||||
s3c24xx_init_uarts(bast_uartcfgs, ARRAY_SIZE(bast_uartcfgs));
|
||||
|
@ -602,6 +600,7 @@ static void __init bast_init(void)
|
|||
sysdev_class_register(&bast_pm_sysclass);
|
||||
sysdev_register(&bast_pm_sysdev);
|
||||
|
||||
s3c_i2c0_set_platdata(&bast_i2c_info);
|
||||
s3c24xx_fb_set_platdata(&bast_fb_info);
|
||||
platform_add_devices(bast_devices, ARRAY_SIZE(bast_devices));
|
||||
|
||||
|
|
|
@ -413,7 +413,7 @@ static struct clk ref24_clk = {
|
|||
.rate = 24000000,
|
||||
};
|
||||
|
||||
static struct clk_lookup lookups[] __initdata = {
|
||||
static struct clk_lookup lookups[] = {
|
||||
{ /* UART0 */
|
||||
.dev_id = "dev:f1",
|
||||
.clk = &ref24_clk,
|
||||
|
|
|
@ -114,4 +114,8 @@ extern unsigned int SingleCPDO(struct roundingData *roundData,
|
|||
extern unsigned int DoubleCPDO(struct roundingData *roundData,
|
||||
const unsigned int opcode, FPREG * rFd);
|
||||
|
||||
/* extneded_cpdo.c */
|
||||
extern unsigned int ExtendedCPDO(struct roundingData *roundData,
|
||||
const unsigned int opcode, FPREG * rFd);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -27,10 +27,6 @@
|
|||
#include "fpmodule.inl"
|
||||
#include "softfloat.h"
|
||||
|
||||
#ifdef CONFIG_FPE_NWFPE_XP
|
||||
extern flag floatx80_is_nan(floatx80);
|
||||
#endif
|
||||
|
||||
unsigned int PerformFLT(const unsigned int opcode);
|
||||
unsigned int PerformFIX(const unsigned int opcode);
|
||||
|
||||
|
|
|
@ -226,6 +226,8 @@ char floatx80_le_quiet( floatx80, floatx80 );
|
|||
char floatx80_lt_quiet( floatx80, floatx80 );
|
||||
char floatx80_is_signaling_nan( floatx80 );
|
||||
|
||||
extern flag floatx80_is_nan(floatx80);
|
||||
|
||||
#endif
|
||||
|
||||
static inline flag extractFloat32Sign(float32 a)
|
||||
|
|
|
@ -206,9 +206,10 @@ void __init omapfb_reserve_sdram(void)
|
|||
config_invalid = 1;
|
||||
return;
|
||||
}
|
||||
if (rg.paddr)
|
||||
if (rg.paddr) {
|
||||
reserve_bootmem(rg.paddr, rg.size, BOOTMEM_DEFAULT);
|
||||
reserved += rg.size;
|
||||
}
|
||||
omapfb_config.mem_desc.region[i] = rg;
|
||||
configured_regions++;
|
||||
}
|
||||
|
|
|
@ -307,7 +307,7 @@ static inline int gpio_valid(int gpio)
|
|||
return 0;
|
||||
if (cpu_is_omap24xx() && gpio < 128)
|
||||
return 0;
|
||||
if (cpu_is_omap34xx() && gpio < 160)
|
||||
if (cpu_is_omap34xx() && gpio < 192)
|
||||
return 0;
|
||||
return -1;
|
||||
}
|
||||
|
|
|
@ -306,8 +306,6 @@ struct clk s3c24xx_uclk = {
|
|||
|
||||
int s3c24xx_register_clock(struct clk *clk)
|
||||
{
|
||||
clk->owner = THIS_MODULE;
|
||||
|
||||
if (clk->enable == NULL)
|
||||
clk->enable = clk_null_enable;
|
||||
|
||||
|
|
|
@ -1235,7 +1235,7 @@ int s3c2410_dma_getposition(unsigned int channel, dma_addr_t *src, dma_addr_t *d
|
|||
|
||||
EXPORT_SYMBOL(s3c2410_dma_getposition);
|
||||
|
||||
static struct s3c2410_dma_chan *to_dma_chan(struct sys_device *dev)
|
||||
static inline struct s3c2410_dma_chan *to_dma_chan(struct sys_device *dev)
|
||||
{
|
||||
return container_of(dev, struct s3c2410_dma_chan, dev);
|
||||
}
|
||||
|
|
|
@ -57,7 +57,7 @@
|
|||
#if 1
|
||||
#define gpio_dbg(x...) do { } while(0)
|
||||
#else
|
||||
#define gpio_dbg(x...) printk(KERN_DEBUG ## x)
|
||||
#define gpio_dbg(x...) printk(KERN_DEBUG x)
|
||||
#endif
|
||||
|
||||
/* The s3c64xx_gpiolib_4bit routines are to control the gpio banks where
|
||||
|
|
|
@ -61,14 +61,14 @@
|
|||
#define S3C64XX_GPH7_ADDR_CF1 (0x06 << 28)
|
||||
#define S3C64XX_GPH7_EINT_G6_7 (0x07 << 28)
|
||||
|
||||
#define S3C64XX_GPH8_MMC1_DATA6 (0x02 << 32)
|
||||
#define S3C64XX_GPH8_MMC2_DATA2 (0x03 << 32)
|
||||
#define S3C64XX_GPH8_I2S_V40_LRCLK (0x05 << 32)
|
||||
#define S3C64XX_GPH8_ADDR_CF2 (0x06 << 32)
|
||||
#define S3C64XX_GPH8_EINT_G6_8 (0x07 << 32)
|
||||
|
||||
#define S3C64XX_GPH9_MMC1_DATA7 (0x02 << 36)
|
||||
#define S3C64XX_GPH9_MMC2_DATA3 (0x03 << 36)
|
||||
#define S3C64XX_GPH9_I2S_V40_DI (0x05 << 36)
|
||||
#define S3C64XX_GPH9_EINT_G6_9 (0x07 << 36)
|
||||
#define S3C64XX_GPH8_MMC1_DATA6 (0x02 << 0)
|
||||
#define S3C64XX_GPH8_MMC2_DATA2 (0x03 << 0)
|
||||
#define S3C64XX_GPH8_I2S_V40_LRCLK (0x05 << 0)
|
||||
#define S3C64XX_GPH8_ADDR_CF2 (0x06 << 0)
|
||||
#define S3C64XX_GPH8_EINT_G6_8 (0x07 << 0)
|
||||
|
||||
#define S3C64XX_GPH9_OUTPUT (0x01 << 4)
|
||||
#define S3C64XX_GPH9_MMC1_DATA7 (0x02 << 4)
|
||||
#define S3C64XX_GPH9_MMC2_DATA3 (0x03 << 4)
|
||||
#define S3C64XX_GPH9_I2S_V40_DI (0x05 << 4)
|
||||
#define S3C64XX_GPH9_EINT_G6_9 (0x07 << 4)
|
||||
|
|
|
@ -473,12 +473,12 @@ endif
|
|||
# Simplified: what IP22 does at 128MB+ in ksegN, IP28 does at 512MB+ in xkphys
|
||||
#
|
||||
ifdef CONFIG_SGI_IP28
|
||||
ifeq ($(call cc-option-yn,-mr10k-cache-barrier=1), n)
|
||||
$(error gcc doesn't support needed option -mr10k-cache-barrier=1)
|
||||
ifeq ($(call cc-option-yn,-mr10k-cache-barrier=store), n)
|
||||
$(error gcc doesn't support needed option -mr10k-cache-barrier=store)
|
||||
endif
|
||||
endif
|
||||
core-$(CONFIG_SGI_IP28) += arch/mips/sgi-ip22/
|
||||
cflags-$(CONFIG_SGI_IP28) += -mr10k-cache-barrier=1 -I$(srctree)/arch/mips/include/asm/mach-ip28
|
||||
cflags-$(CONFIG_SGI_IP28) += -mr10k-cache-barrier=store -I$(srctree)/arch/mips/include/asm/mach-ip28
|
||||
load-$(CONFIG_SGI_IP28) += 0xa800000020004000
|
||||
|
||||
#
|
||||
|
|
|
@ -956,7 +956,7 @@ __clear_user(void __user *addr, __kernel_size_t size)
|
|||
void __user * __cl_addr = (addr); \
|
||||
unsigned long __cl_size = (n); \
|
||||
if (__cl_size && access_ok(VERIFY_WRITE, \
|
||||
((unsigned long)(__cl_addr)), __cl_size)) \
|
||||
__cl_addr, __cl_size)) \
|
||||
__cl_size = __clear_user(__cl_addr, __cl_size); \
|
||||
__cl_size; \
|
||||
})
|
||||
|
|
|
@ -82,8 +82,7 @@ void local_flush_tlb_range(struct vm_area_struct *vma, unsigned long start,
|
|||
int cpu = smp_processor_id();
|
||||
|
||||
if (cpu_context(cpu, mm) != 0) {
|
||||
unsigned long flags;
|
||||
int size;
|
||||
unsigned long size, flags;
|
||||
|
||||
#ifdef DEBUG_TLB
|
||||
printk("[tlbrange<%lu,0x%08lx,0x%08lx>]",
|
||||
|
@ -121,8 +120,7 @@ void local_flush_tlb_range(struct vm_area_struct *vma, unsigned long start,
|
|||
|
||||
void local_flush_tlb_kernel_range(unsigned long start, unsigned long end)
|
||||
{
|
||||
unsigned long flags;
|
||||
int size;
|
||||
unsigned long size, flags;
|
||||
|
||||
#ifdef DEBUG_TLB
|
||||
printk("[tlbrange<%lu,0x%08lx,0x%08lx>]", start, end);
|
||||
|
|
|
@ -117,8 +117,7 @@ void local_flush_tlb_range(struct vm_area_struct *vma, unsigned long start,
|
|||
int cpu = smp_processor_id();
|
||||
|
||||
if (cpu_context(cpu, mm) != 0) {
|
||||
unsigned long flags;
|
||||
int size;
|
||||
unsigned long size, flags;
|
||||
|
||||
ENTER_CRITICAL(flags);
|
||||
size = (end - start + (PAGE_SIZE - 1)) >> PAGE_SHIFT;
|
||||
|
@ -160,8 +159,7 @@ void local_flush_tlb_range(struct vm_area_struct *vma, unsigned long start,
|
|||
|
||||
void local_flush_tlb_kernel_range(unsigned long start, unsigned long end)
|
||||
{
|
||||
unsigned long flags;
|
||||
int size;
|
||||
unsigned long size, flags;
|
||||
|
||||
ENTER_CRITICAL(flags);
|
||||
size = (end - start + (PAGE_SIZE - 1)) >> PAGE_SHIFT;
|
||||
|
|
|
@ -111,8 +111,7 @@ out_restore:
|
|||
/* Usable for KV1 addresses only! */
|
||||
void local_flush_tlb_kernel_range(unsigned long start, unsigned long end)
|
||||
{
|
||||
unsigned long flags;
|
||||
int size;
|
||||
unsigned long size, flags;
|
||||
|
||||
size = (end - start + (PAGE_SIZE - 1)) >> PAGE_SHIFT;
|
||||
size = (size + 1) >> 1;
|
||||
|
|
|
@ -148,7 +148,7 @@ static irqreturn_t panel_int(int irq, void *dev_id)
|
|||
|
||||
if (sgint->istat1 & SGINT_ISTAT1_PWR) {
|
||||
/* Wait until interrupt goes away */
|
||||
disable_irq(SGI_PANEL_IRQ);
|
||||
disable_irq_nosync(SGI_PANEL_IRQ);
|
||||
init_timer(&debounce_timer);
|
||||
debounce_timer.function = debounce;
|
||||
debounce_timer.expires = jiffies + 5;
|
||||
|
|
|
@ -53,7 +53,7 @@ static inline void ip32_machine_halt(void)
|
|||
|
||||
static void ip32_machine_power_off(void)
|
||||
{
|
||||
volatile unsigned char reg_a, xctrl_a, xctrl_b;
|
||||
unsigned char reg_a, xctrl_a, xctrl_b;
|
||||
|
||||
disable_irq(MACEISA_RTC_IRQ);
|
||||
reg_a = CMOS_READ(RTC_REG_A);
|
||||
|
@ -91,9 +91,10 @@ static void blink_timeout(unsigned long data)
|
|||
|
||||
static void debounce(unsigned long data)
|
||||
{
|
||||
volatile unsigned char reg_a, reg_c, xctrl_a;
|
||||
unsigned char reg_a, reg_c, xctrl_a;
|
||||
|
||||
reg_c = CMOS_READ(RTC_INTR_FLAGS);
|
||||
reg_a = CMOS_READ(RTC_REG_A);
|
||||
CMOS_WRITE(reg_a | DS_REGA_DV0, RTC_REG_A);
|
||||
wbflush();
|
||||
xctrl_a = CMOS_READ(DS_B1_XCTRL4A);
|
||||
|
@ -137,7 +138,7 @@ static inline void ip32_power_button(void)
|
|||
|
||||
static irqreturn_t ip32_rtc_int(int irq, void *dev_id)
|
||||
{
|
||||
volatile unsigned char reg_c;
|
||||
unsigned char reg_c;
|
||||
|
||||
reg_c = CMOS_READ(RTC_INTR_FLAGS);
|
||||
if (!(reg_c & RTC_IRQF)) {
|
||||
|
@ -145,7 +146,7 @@ static irqreturn_t ip32_rtc_int(int irq, void *dev_id)
|
|||
"%s: RTC IRQ without RTC_IRQF\n", __func__);
|
||||
}
|
||||
/* Wait until interrupt goes away */
|
||||
disable_irq(MACEISA_RTC_IRQ);
|
||||
disable_irq_nosync(MACEISA_RTC_IRQ);
|
||||
init_timer(&debounce_timer);
|
||||
debounce_timer.function = debounce;
|
||||
debounce_timer.expires = jiffies + 50;
|
||||
|
|
|
@ -592,3 +592,17 @@ int maple_pci_get_legacy_ide_irq(struct pci_dev *pdev, int channel)
|
|||
}
|
||||
return irq;
|
||||
}
|
||||
|
||||
static void __devinit quirk_ipr_msi(struct pci_dev *dev)
|
||||
{
|
||||
/* Something prevents MSIs from the IPR from working on Bimini,
|
||||
* and the driver has no smarts to recover. So disable MSI
|
||||
* on it for now. */
|
||||
|
||||
if (machine_is(maple)) {
|
||||
dev->no_msi = 1;
|
||||
dev_info(&dev->dev, "Quirk disabled MSI\n");
|
||||
}
|
||||
}
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_OBSIDIAN,
|
||||
quirk_ipr_msi);
|
||||
|
|
|
@ -263,6 +263,9 @@ static int camera_probe(void)
|
|||
struct i2c_msg msg;
|
||||
int ret;
|
||||
|
||||
if (!a)
|
||||
return -ENODEV;
|
||||
|
||||
camera_power(1);
|
||||
msg.addr = 0x6e;
|
||||
msg.buf = camera_ncm03j_magic;
|
||||
|
|
|
@ -932,8 +932,6 @@ static void blkfront_closing(struct xenbus_device *dev)
|
|||
|
||||
spin_lock_irqsave(&blkif_io_lock, flags);
|
||||
|
||||
del_gendisk(info->gd);
|
||||
|
||||
/* No more blkif_request(). */
|
||||
blk_stop_queue(info->rq);
|
||||
|
||||
|
@ -947,6 +945,8 @@ static void blkfront_closing(struct xenbus_device *dev)
|
|||
blk_cleanup_queue(info->rq);
|
||||
info->rq = NULL;
|
||||
|
||||
del_gendisk(info->gd);
|
||||
|
||||
out:
|
||||
xenbus_frontend_closed(dev);
|
||||
}
|
||||
|
@ -975,8 +975,10 @@ static void backend_changed(struct xenbus_device *dev,
|
|||
break;
|
||||
|
||||
case XenbusStateClosing:
|
||||
if (info->gd == NULL)
|
||||
xenbus_dev_fatal(dev, -ENODEV, "gd is NULL");
|
||||
if (info->gd == NULL) {
|
||||
xenbus_frontend_closed(dev);
|
||||
break;
|
||||
}
|
||||
bd = bdget_disk(info->gd, 0);
|
||||
if (bd == NULL)
|
||||
xenbus_dev_fatal(dev, -ENODEV, "bdget failed");
|
||||
|
|
|
@ -570,7 +570,7 @@ static int viocd_probe(struct vio_dev *vdev, const struct vio_device_id *id)
|
|||
struct device_node *node = vdev->dev.archdata.of_node;
|
||||
|
||||
deviceno = vdev->unit_address;
|
||||
if (deviceno > VIOCD_MAX_CD)
|
||||
if (deviceno >= VIOCD_MAX_CD)
|
||||
return -ENODEV;
|
||||
if (!node)
|
||||
return -ENODEV;
|
||||
|
|
|
@ -2856,6 +2856,7 @@ int ipmi_register_smi(struct ipmi_smi_handlers *handlers,
|
|||
/* Assume a single IPMB channel at zero. */
|
||||
intf->channels[0].medium = IPMI_CHANNEL_MEDIUM_IPMB;
|
||||
intf->channels[0].protocol = IPMI_CHANNEL_PROTOCOL_IPMB;
|
||||
intf->curr_channel = IPMI_MAX_CHANNELS;
|
||||
}
|
||||
|
||||
if (rv == 0)
|
||||
|
@ -3648,13 +3649,13 @@ static int handle_new_recv_msg(ipmi_smi_t intf,
|
|||
}
|
||||
|
||||
/*
|
||||
** We need to make sure the channels have been initialized.
|
||||
** The channel_handler routine will set the "curr_channel"
|
||||
** equal to or greater than IPMI_MAX_CHANNELS when all the
|
||||
** channels for this interface have been initialized.
|
||||
* We need to make sure the channels have been initialized.
|
||||
* The channel_handler routine will set the "curr_channel"
|
||||
* equal to or greater than IPMI_MAX_CHANNELS when all the
|
||||
* channels for this interface have been initialized.
|
||||
*/
|
||||
if (intf->curr_channel < IPMI_MAX_CHANNELS) {
|
||||
requeue = 1; /* Just put the message back for now */
|
||||
requeue = 0; /* Throw the message away */
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
|
|
@ -212,7 +212,8 @@ static int get_event_name(char *dest, struct tcpa_event *event,
|
|||
unsigned char * event_entry)
|
||||
{
|
||||
const char *name = "";
|
||||
char data[40] = "";
|
||||
/* 41 so there is room for 40 data and 1 nul */
|
||||
char data[41] = "";
|
||||
int i, n_len = 0, d_len = 0;
|
||||
struct tcpa_pc_event *pc_event;
|
||||
|
||||
|
|
|
@ -170,6 +170,14 @@ static int drm_addmap_core(struct drm_device * dev, resource_size_t offset,
|
|||
}
|
||||
DRM_DEBUG("offset = 0x%08llx, size = 0x%08lx, type = %d\n",
|
||||
(unsigned long long)map->offset, map->size, map->type);
|
||||
|
||||
/* page-align _DRM_SHM maps. They are allocated here so there is no security
|
||||
* hole created by that and it works around various broken drivers that use
|
||||
* a non-aligned quantity to map the SAREA. --BenH
|
||||
*/
|
||||
if (map->type == _DRM_SHM)
|
||||
map->size = PAGE_ALIGN(map->size);
|
||||
|
||||
if ((map->offset & (~(resource_size_t)PAGE_MASK)) || (map->size & (~PAGE_MASK))) {
|
||||
drm_free(map, sizeof(*map), DRM_MEM_MAPS);
|
||||
return -EINVAL;
|
||||
|
|
|
@ -481,7 +481,7 @@ int drm_ioctl(struct inode *inode, struct file *filp,
|
|||
}
|
||||
retcode = func(dev, kdata, file_priv);
|
||||
|
||||
if ((retcode == 0) && (cmd & IOC_OUT)) {
|
||||
if (cmd & IOC_OUT) {
|
||||
if (copy_to_user((void __user *)arg, kdata,
|
||||
_IOC_SIZE(cmd)) != 0)
|
||||
retcode = -EFAULT;
|
||||
|
|
|
@ -704,7 +704,7 @@ void ide_timer_expiry (unsigned long data)
|
|||
}
|
||||
spin_lock_irq(&hwif->lock);
|
||||
enable_irq(hwif->irq);
|
||||
if (startstop == ide_stopped) {
|
||||
if (startstop == ide_stopped && hwif->polling == 0) {
|
||||
rq_in_flight = hwif->rq;
|
||||
hwif->rq = NULL;
|
||||
ide_unlock_port(hwif);
|
||||
|
@ -879,7 +879,7 @@ irqreturn_t ide_intr (int irq, void *dev_id)
|
|||
* same irq as is currently being serviced here, and Linux
|
||||
* won't allow another of the same (on any CPU) until we return.
|
||||
*/
|
||||
if (startstop == ide_stopped) {
|
||||
if (startstop == ide_stopped && hwif->polling == 0) {
|
||||
BUG_ON(hwif->handler);
|
||||
rq_in_flight = hwif->rq;
|
||||
hwif->rq = NULL;
|
||||
|
|
|
@ -206,8 +206,6 @@ EXPORT_SYMBOL_GPL(ide_in_drive_list);
|
|||
|
||||
/*
|
||||
* Early UDMA66 devices don't set bit14 to 1, only bit13 is valid.
|
||||
* We list them here and depend on the device side cable detection for them.
|
||||
*
|
||||
* Some optical devices with the buggy firmwares have the same problem.
|
||||
*/
|
||||
static const struct drive_list_entry ivb_list[] = {
|
||||
|
@ -251,10 +249,25 @@ u8 eighty_ninty_three(ide_drive_t *drive)
|
|||
* - force bit13 (80c cable present) check also for !ivb devices
|
||||
* (unless the slave device is pre-ATA3)
|
||||
*/
|
||||
if ((id[ATA_ID_HW_CONFIG] & 0x4000) ||
|
||||
(ivb && (id[ATA_ID_HW_CONFIG] & 0x2000)))
|
||||
if (id[ATA_ID_HW_CONFIG] & 0x4000)
|
||||
return 1;
|
||||
|
||||
if (ivb) {
|
||||
const char *model = (char *)&id[ATA_ID_PROD];
|
||||
|
||||
if (strstr(model, "TSSTcorp CDDVDW SH-S202")) {
|
||||
/*
|
||||
* These ATAPI devices always report 80c cable
|
||||
* so we have to depend on the host in this case.
|
||||
*/
|
||||
if (hwif->cbl == ATA_CBL_PATA80)
|
||||
return 1;
|
||||
} else {
|
||||
/* Depend on the device side cable detection. */
|
||||
if (id[ATA_ID_HW_CONFIG] & 0x2000)
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
no_80w:
|
||||
if (drive->dev_flags & IDE_DFLAG_UDMA33_WARNED)
|
||||
return 0;
|
||||
|
|
|
@ -31,24 +31,6 @@ void ide_toggle_bounce(ide_drive_t *drive, int on)
|
|||
blk_queue_bounce_limit(drive->queue, addr);
|
||||
}
|
||||
|
||||
static void ide_dump_opcode(ide_drive_t *drive)
|
||||
{
|
||||
struct request *rq = drive->hwif->rq;
|
||||
struct ide_cmd *cmd = NULL;
|
||||
|
||||
if (!rq)
|
||||
return;
|
||||
|
||||
if (rq->cmd_type == REQ_TYPE_ATA_TASKFILE)
|
||||
cmd = rq->special;
|
||||
|
||||
printk(KERN_ERR "ide: failed opcode was: ");
|
||||
if (cmd == NULL)
|
||||
printk(KERN_CONT "unknown\n");
|
||||
else
|
||||
printk(KERN_CONT "0x%02x\n", cmd->tf.command);
|
||||
}
|
||||
|
||||
u64 ide_get_lba_addr(struct ide_cmd *cmd, int lba48)
|
||||
{
|
||||
struct ide_taskfile *tf = &cmd->tf;
|
||||
|
@ -91,7 +73,7 @@ static void ide_dump_sector(ide_drive_t *drive)
|
|||
|
||||
static void ide_dump_ata_error(ide_drive_t *drive, u8 err)
|
||||
{
|
||||
printk(KERN_ERR "{ ");
|
||||
printk(KERN_CONT "{ ");
|
||||
if (err & ATA_ABORTED)
|
||||
printk(KERN_CONT "DriveStatusError ");
|
||||
if (err & ATA_ICRC)
|
||||
|
@ -121,7 +103,7 @@ static void ide_dump_ata_error(ide_drive_t *drive, u8 err)
|
|||
|
||||
static void ide_dump_atapi_error(ide_drive_t *drive, u8 err)
|
||||
{
|
||||
printk(KERN_ERR "{ ");
|
||||
printk(KERN_CONT "{ ");
|
||||
if (err & ATAPI_ILI)
|
||||
printk(KERN_CONT "IllegalLengthIndication ");
|
||||
if (err & ATAPI_EOM)
|
||||
|
@ -179,7 +161,10 @@ u8 ide_dump_status(ide_drive_t *drive, const char *msg, u8 stat)
|
|||
else
|
||||
ide_dump_atapi_error(drive, err);
|
||||
}
|
||||
ide_dump_opcode(drive);
|
||||
|
||||
printk(KERN_ERR "%s: possibly failed opcode: 0x%02x\n",
|
||||
drive->name, drive->hwif->cmd.tf.command);
|
||||
|
||||
return err;
|
||||
}
|
||||
EXPORT_SYMBOL(ide_dump_status);
|
||||
|
|
|
@ -295,7 +295,7 @@ int ide_dev_read_id(ide_drive_t *drive, u8 cmd, u16 *id)
|
|||
|
||||
timeout = ((cmd == ATA_CMD_ID_ATA) ? WAIT_WORSTCASE : WAIT_PIDENTIFY) / 2;
|
||||
|
||||
if (ide_busy_sleep(hwif, timeout, use_altstatus))
|
||||
if (ide_busy_sleep(drive, timeout, use_altstatus))
|
||||
return 1;
|
||||
|
||||
/* wait for IRQ and ATA_DRQ */
|
||||
|
@ -316,8 +316,9 @@ int ide_dev_read_id(ide_drive_t *drive, u8 cmd, u16 *id)
|
|||
return rc;
|
||||
}
|
||||
|
||||
int ide_busy_sleep(ide_hwif_t *hwif, unsigned long timeout, int altstatus)
|
||||
int ide_busy_sleep(ide_drive_t *drive, unsigned long timeout, int altstatus)
|
||||
{
|
||||
ide_hwif_t *hwif = drive->hwif;
|
||||
u8 stat;
|
||||
|
||||
timeout += jiffies;
|
||||
|
@ -330,6 +331,8 @@ int ide_busy_sleep(ide_hwif_t *hwif, unsigned long timeout, int altstatus)
|
|||
return 0;
|
||||
} while (time_before(jiffies, timeout));
|
||||
|
||||
printk(KERN_ERR "%s: timeout in %s\n", drive->name, __func__);
|
||||
|
||||
return 1; /* drive timed-out */
|
||||
}
|
||||
|
||||
|
@ -420,7 +423,7 @@ static int do_probe (ide_drive_t *drive, u8 cmd)
|
|||
tp_ops->dev_select(drive);
|
||||
msleep(50);
|
||||
tp_ops->exec_command(hwif, ATA_CMD_DEV_RESET);
|
||||
(void)ide_busy_sleep(hwif, WAIT_WORSTCASE, 0);
|
||||
(void)ide_busy_sleep(drive, WAIT_WORSTCASE, 0);
|
||||
rc = ide_dev_read_id(drive, cmd, id);
|
||||
}
|
||||
|
||||
|
|
|
@ -67,6 +67,7 @@ static struct via_isa_bridge {
|
|||
u8 udma_mask;
|
||||
u8 flags;
|
||||
} via_isa_bridges[] = {
|
||||
{ "vx855", PCI_DEVICE_ID_VIA_VX855, 0x00, 0x2f, ATA_UDMA6, VIA_BAD_AST },
|
||||
{ "vx800", PCI_DEVICE_ID_VIA_VX800, 0x00, 0x2f, ATA_UDMA6, VIA_BAD_AST },
|
||||
{ "cx700", PCI_DEVICE_ID_VIA_CX700, 0x00, 0x2f, ATA_UDMA6, VIA_BAD_AST },
|
||||
{ "vt8237s", PCI_DEVICE_ID_VIA_8237S, 0x00, 0x2f, ATA_UDMA6, VIA_BAD_AST },
|
||||
|
@ -474,6 +475,7 @@ static const struct pci_device_id via_pci_tbl[] = {
|
|||
{ PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_82C576_1), 0 },
|
||||
{ PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_82C586_1), 0 },
|
||||
{ PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_CX700_IDE), 0 },
|
||||
{ PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_VX855_IDE), 0 },
|
||||
{ PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_6410), 1 },
|
||||
{ PCI_VDEVICE(VIA, PCI_DEVICE_ID_VIA_SATA_EIDE), 1 },
|
||||
{ 0, },
|
||||
|
|
|
@ -107,7 +107,7 @@ static void amba_kmi_close(struct serio *io)
|
|||
clk_disable(kmi->clk);
|
||||
}
|
||||
|
||||
static int amba_kmi_probe(struct amba_device *dev, void *id)
|
||||
static int amba_kmi_probe(struct amba_device *dev, struct amba_id *id)
|
||||
{
|
||||
struct amba_kmi_port *kmi;
|
||||
struct serio *io;
|
||||
|
|
|
@ -443,7 +443,7 @@ static irqreturn_t pcf50633_irq(int irq, void *data)
|
|||
dev_dbg(pcf->dev, "pcf50633_irq\n");
|
||||
|
||||
get_device(pcf->dev);
|
||||
disable_irq(pcf->irq);
|
||||
disable_irq_nosync(pcf->irq);
|
||||
schedule_work(&pcf->irq_work);
|
||||
|
||||
return IRQ_HANDLED;
|
||||
|
|
|
@ -79,10 +79,6 @@ static int wm8350_phys_read(struct wm8350 *wm8350, u8 reg, int num_regs,
|
|||
/* Cache is CPU endian */
|
||||
dest[i - reg] = be16_to_cpu(dest[i - reg]);
|
||||
|
||||
/* Satisfy non-volatile bits from cache */
|
||||
dest[i - reg] &= wm8350_reg_io_map[i].vol;
|
||||
dest[i - reg] |= wm8350->reg_cache[i];
|
||||
|
||||
/* Mask out non-readable bits */
|
||||
dest[i - reg] &= wm8350_reg_io_map[i].readable;
|
||||
}
|
||||
|
@ -182,9 +178,6 @@ static int wm8350_write(struct wm8350 *wm8350, u8 reg, int num_regs, u16 *src)
|
|||
(wm8350->reg_cache[i] & ~wm8350_reg_io_map[i].writable)
|
||||
| src[i - reg];
|
||||
|
||||
/* Don't store volatile bits */
|
||||
wm8350->reg_cache[i] &= ~wm8350_reg_io_map[i].vol;
|
||||
|
||||
src[i - reg] = cpu_to_be16(src[i - reg]);
|
||||
}
|
||||
|
||||
|
@ -1261,7 +1254,6 @@ static int wm8350_create_cache(struct wm8350 *wm8350, int type, int mode)
|
|||
(i < WM8350_CLOCK_CONTROL_1 || i > WM8350_AIF_TEST)) {
|
||||
value = be16_to_cpu(wm8350->reg_cache[i]);
|
||||
value &= wm8350_reg_io_map[i].readable;
|
||||
value &= ~wm8350_reg_io_map[i].vol;
|
||||
wm8350->reg_cache[i] = value;
|
||||
} else
|
||||
wm8350->reg_cache[i] = reg_map[i];
|
||||
|
|
|
@ -490,7 +490,7 @@ static void mmci_check_status(unsigned long data)
|
|||
mod_timer(&host->timer, jiffies + HZ);
|
||||
}
|
||||
|
||||
static int __devinit mmci_probe(struct amba_device *dev, void *id)
|
||||
static int __devinit mmci_probe(struct amba_device *dev, struct amba_id *id)
|
||||
{
|
||||
struct mmc_platform_data *plat = dev->dev.platform_data;
|
||||
struct mmci_host *host;
|
||||
|
|
|
@ -35,8 +35,22 @@
|
|||
#define DRV_VER "2.0.348"
|
||||
#define DRV_NAME "be2net"
|
||||
#define BE_NAME "ServerEngines BladeEngine2 10Gbps NIC"
|
||||
#define OC_NAME "Emulex OneConnect 10Gbps NIC"
|
||||
#define DRV_DESC BE_NAME "Driver"
|
||||
|
||||
#define BE_VENDOR_ID 0x19a2
|
||||
#define BE_DEVICE_ID1 0x211
|
||||
#define OC_DEVICE_ID1 0x700
|
||||
#define OC_DEVICE_ID2 0x701
|
||||
|
||||
static inline char *nic_name(struct pci_dev *pdev)
|
||||
{
|
||||
if (pdev->device == OC_DEVICE_ID1 || pdev->device == OC_DEVICE_ID2)
|
||||
return OC_NAME;
|
||||
else
|
||||
return BE_NAME;
|
||||
}
|
||||
|
||||
/* Number of bytes of an RX frame that are copied to skb->data */
|
||||
#define BE_HDR_LEN 64
|
||||
#define BE_MAX_JUMBO_FRAME_SIZE 9018
|
||||
|
|
|
@ -28,10 +28,10 @@ static unsigned int rx_frag_size = 2048;
|
|||
module_param(rx_frag_size, uint, S_IRUGO);
|
||||
MODULE_PARM_DESC(rx_frag_size, "Size of a fragment that holds rcvd data.");
|
||||
|
||||
#define BE_VENDOR_ID 0x19a2
|
||||
#define BE2_DEVICE_ID_1 0x0211
|
||||
static DEFINE_PCI_DEVICE_TABLE(be_dev_ids) = {
|
||||
{ PCI_DEVICE(BE_VENDOR_ID, BE2_DEVICE_ID_1) },
|
||||
{ PCI_DEVICE(BE_VENDOR_ID, BE_DEVICE_ID1) },
|
||||
{ PCI_DEVICE(BE_VENDOR_ID, OC_DEVICE_ID1) },
|
||||
{ PCI_DEVICE(BE_VENDOR_ID, OC_DEVICE_ID2) },
|
||||
{ 0 }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(pci, be_dev_ids);
|
||||
|
@ -1859,7 +1859,7 @@ static int __devinit be_probe(struct pci_dev *pdev,
|
|||
if (status != 0)
|
||||
goto stats_clean;
|
||||
|
||||
dev_info(&pdev->dev, BE_NAME " port %d\n", adapter->port_num);
|
||||
dev_info(&pdev->dev, "%s port %d\n", nic_name(pdev), adapter->port_num);
|
||||
return 0;
|
||||
|
||||
stats_clean:
|
||||
|
@ -1873,7 +1873,7 @@ rel_reg:
|
|||
disable_dev:
|
||||
pci_disable_device(pdev);
|
||||
do_none:
|
||||
dev_warn(&pdev->dev, BE_NAME " initialization failed\n");
|
||||
dev_err(&pdev->dev, "%s initialization failed\n", nic_name(pdev));
|
||||
return status;
|
||||
}
|
||||
|
||||
|
|
|
@ -1465,6 +1465,12 @@ static struct aggregator *ad_agg_selection_test(struct aggregator *best,
|
|||
return best;
|
||||
}
|
||||
|
||||
static int agg_device_up(const struct aggregator *agg)
|
||||
{
|
||||
return (netif_running(agg->slave->dev) &&
|
||||
netif_carrier_ok(agg->slave->dev));
|
||||
}
|
||||
|
||||
/**
|
||||
* ad_agg_selection_logic - select an aggregation group for a team
|
||||
* @aggregator: the aggregator we're looking at
|
||||
|
@ -1496,14 +1502,13 @@ static void ad_agg_selection_logic(struct aggregator *agg)
|
|||
struct port *port;
|
||||
|
||||
origin = agg;
|
||||
|
||||
active = __get_active_agg(agg);
|
||||
best = active;
|
||||
best = (active && agg_device_up(active)) ? active : NULL;
|
||||
|
||||
do {
|
||||
agg->is_active = 0;
|
||||
|
||||
if (agg->num_of_ports)
|
||||
if (agg->num_of_ports && agg_device_up(agg))
|
||||
best = ad_agg_selection_test(best, agg);
|
||||
|
||||
} while ((agg = __get_next_agg(agg)));
|
||||
|
|
|
@ -127,11 +127,11 @@ static unsigned long mdio_read(struct meth_private *priv, unsigned long phyreg)
|
|||
static int mdio_probe(struct meth_private *priv)
|
||||
{
|
||||
int i;
|
||||
unsigned long p2, p3;
|
||||
unsigned long p2, p3, flags;
|
||||
/* check if phy is detected already */
|
||||
if(priv->phy_addr>=0&&priv->phy_addr<32)
|
||||
return 0;
|
||||
spin_lock(&priv->meth_lock);
|
||||
spin_lock_irqsave(&priv->meth_lock, flags);
|
||||
for (i=0;i<32;++i){
|
||||
priv->phy_addr=i;
|
||||
p2=mdio_read(priv,2);
|
||||
|
@ -157,7 +157,7 @@ static int mdio_probe(struct meth_private *priv)
|
|||
break;
|
||||
}
|
||||
}
|
||||
spin_unlock(&priv->meth_lock);
|
||||
spin_unlock_irqrestore(&priv->meth_lock, flags);
|
||||
if(priv->phy_addr<32) {
|
||||
return 0;
|
||||
}
|
||||
|
@ -373,14 +373,14 @@ static int meth_release(struct net_device *dev)
|
|||
static void meth_rx(struct net_device* dev, unsigned long int_status)
|
||||
{
|
||||
struct sk_buff *skb;
|
||||
unsigned long status;
|
||||
unsigned long status, flags;
|
||||
struct meth_private *priv = netdev_priv(dev);
|
||||
unsigned long fifo_rptr = (int_status & METH_INT_RX_RPTR_MASK) >> 8;
|
||||
|
||||
spin_lock(&priv->meth_lock);
|
||||
spin_lock_irqsave(&priv->meth_lock, flags);
|
||||
priv->dma_ctrl &= ~METH_DMA_RX_INT_EN;
|
||||
mace->eth.dma_ctrl = priv->dma_ctrl;
|
||||
spin_unlock(&priv->meth_lock);
|
||||
spin_unlock_irqrestore(&priv->meth_lock, flags);
|
||||
|
||||
if (int_status & METH_INT_RX_UNDERFLOW) {
|
||||
fifo_rptr = (fifo_rptr - 1) & 0x0f;
|
||||
|
@ -452,12 +452,12 @@ static void meth_rx(struct net_device* dev, unsigned long int_status)
|
|||
mace->eth.rx_fifo = priv->rx_ring_dmas[priv->rx_write];
|
||||
ADVANCE_RX_PTR(priv->rx_write);
|
||||
}
|
||||
spin_lock(&priv->meth_lock);
|
||||
spin_lock_irqsave(&priv->meth_lock, flags);
|
||||
/* In case there was underflow, and Rx DMA was disabled */
|
||||
priv->dma_ctrl |= METH_DMA_RX_INT_EN | METH_DMA_RX_EN;
|
||||
mace->eth.dma_ctrl = priv->dma_ctrl;
|
||||
mace->eth.int_stat = METH_INT_RX_THRESHOLD;
|
||||
spin_unlock(&priv->meth_lock);
|
||||
spin_unlock_irqrestore(&priv->meth_lock, flags);
|
||||
}
|
||||
|
||||
static int meth_tx_full(struct net_device *dev)
|
||||
|
@ -470,11 +470,11 @@ static int meth_tx_full(struct net_device *dev)
|
|||
static void meth_tx_cleanup(struct net_device* dev, unsigned long int_status)
|
||||
{
|
||||
struct meth_private *priv = netdev_priv(dev);
|
||||
unsigned long status;
|
||||
unsigned long status, flags;
|
||||
struct sk_buff *skb;
|
||||
unsigned long rptr = (int_status&TX_INFO_RPTR) >> 16;
|
||||
|
||||
spin_lock(&priv->meth_lock);
|
||||
spin_lock_irqsave(&priv->meth_lock, flags);
|
||||
|
||||
/* Stop DMA notification */
|
||||
priv->dma_ctrl &= ~(METH_DMA_TX_INT_EN);
|
||||
|
@ -527,12 +527,13 @@ static void meth_tx_cleanup(struct net_device* dev, unsigned long int_status)
|
|||
}
|
||||
|
||||
mace->eth.int_stat = METH_INT_TX_EMPTY | METH_INT_TX_PKT;
|
||||
spin_unlock(&priv->meth_lock);
|
||||
spin_unlock_irqrestore(&priv->meth_lock, flags);
|
||||
}
|
||||
|
||||
static void meth_error(struct net_device* dev, unsigned status)
|
||||
{
|
||||
struct meth_private *priv = netdev_priv(dev);
|
||||
unsigned long flags;
|
||||
|
||||
printk(KERN_WARNING "meth: error status: 0x%08x\n",status);
|
||||
/* check for errors too... */
|
||||
|
@ -547,7 +548,7 @@ static void meth_error(struct net_device* dev, unsigned status)
|
|||
printk(KERN_WARNING "meth: Rx overflow\n");
|
||||
if (status & (METH_INT_RX_UNDERFLOW)) {
|
||||
printk(KERN_WARNING "meth: Rx underflow\n");
|
||||
spin_lock(&priv->meth_lock);
|
||||
spin_lock_irqsave(&priv->meth_lock, flags);
|
||||
mace->eth.int_stat = METH_INT_RX_UNDERFLOW;
|
||||
/* more underflow interrupts will be delivered,
|
||||
* effectively throwing us into an infinite loop.
|
||||
|
@ -555,7 +556,7 @@ static void meth_error(struct net_device* dev, unsigned status)
|
|||
priv->dma_ctrl &= ~METH_DMA_RX_EN;
|
||||
mace->eth.dma_ctrl = priv->dma_ctrl;
|
||||
DPRINTK("Disabled meth Rx DMA temporarily\n");
|
||||
spin_unlock(&priv->meth_lock);
|
||||
spin_unlock_irqrestore(&priv->meth_lock, flags);
|
||||
}
|
||||
mace->eth.int_stat = METH_INT_ERROR;
|
||||
}
|
||||
|
|
|
@ -125,8 +125,10 @@ void mlx4_en_deactivate_cq(struct mlx4_en_priv *priv, struct mlx4_en_cq *cq)
|
|||
|
||||
if (cq->is_tx)
|
||||
del_timer(&cq->timer);
|
||||
else
|
||||
else {
|
||||
napi_disable(&cq->napi);
|
||||
netif_napi_del(&cq->napi);
|
||||
}
|
||||
|
||||
mlx4_cq_free(mdev->dev, &cq->mcq);
|
||||
}
|
||||
|
|
|
@ -569,7 +569,7 @@ static int rxq_process(struct rx_queue *rxq, int budget)
|
|||
if (rxq->rx_curr_desc == rxq->rx_ring_size)
|
||||
rxq->rx_curr_desc = 0;
|
||||
|
||||
dma_unmap_single(NULL, rx_desc->buf_ptr,
|
||||
dma_unmap_single(mp->dev->dev.parent, rx_desc->buf_ptr,
|
||||
rx_desc->buf_size, DMA_FROM_DEVICE);
|
||||
rxq->rx_desc_count--;
|
||||
rx++;
|
||||
|
@ -678,8 +678,9 @@ static int rxq_refill(struct rx_queue *rxq, int budget)
|
|||
|
||||
rx_desc = rxq->rx_desc_area + rx;
|
||||
|
||||
rx_desc->buf_ptr = dma_map_single(NULL, skb->data,
|
||||
mp->skb_size, DMA_FROM_DEVICE);
|
||||
rx_desc->buf_ptr = dma_map_single(mp->dev->dev.parent,
|
||||
skb->data, mp->skb_size,
|
||||
DMA_FROM_DEVICE);
|
||||
rx_desc->buf_size = mp->skb_size;
|
||||
rxq->rx_skb[rx] = skb;
|
||||
wmb();
|
||||
|
@ -718,6 +719,7 @@ static inline unsigned int has_tiny_unaligned_frags(struct sk_buff *skb)
|
|||
|
||||
static void txq_submit_frag_skb(struct tx_queue *txq, struct sk_buff *skb)
|
||||
{
|
||||
struct mv643xx_eth_private *mp = txq_to_mp(txq);
|
||||
int nr_frags = skb_shinfo(skb)->nr_frags;
|
||||
int frag;
|
||||
|
||||
|
@ -746,10 +748,10 @@ static void txq_submit_frag_skb(struct tx_queue *txq, struct sk_buff *skb)
|
|||
|
||||
desc->l4i_chk = 0;
|
||||
desc->byte_cnt = this_frag->size;
|
||||
desc->buf_ptr = dma_map_page(NULL, this_frag->page,
|
||||
desc->buf_ptr = dma_map_page(mp->dev->dev.parent,
|
||||
this_frag->page,
|
||||
this_frag->page_offset,
|
||||
this_frag->size,
|
||||
DMA_TO_DEVICE);
|
||||
this_frag->size, DMA_TO_DEVICE);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -826,7 +828,8 @@ no_csum:
|
|||
|
||||
desc->l4i_chk = l4i_chk;
|
||||
desc->byte_cnt = length;
|
||||
desc->buf_ptr = dma_map_single(NULL, skb->data, length, DMA_TO_DEVICE);
|
||||
desc->buf_ptr = dma_map_single(mp->dev->dev.parent, skb->data,
|
||||
length, DMA_TO_DEVICE);
|
||||
|
||||
__skb_queue_tail(&txq->tx_skb, skb);
|
||||
|
||||
|
@ -956,10 +959,10 @@ static int txq_reclaim(struct tx_queue *txq, int budget, int force)
|
|||
}
|
||||
|
||||
if (cmd_sts & TX_FIRST_DESC) {
|
||||
dma_unmap_single(NULL, desc->buf_ptr,
|
||||
dma_unmap_single(mp->dev->dev.parent, desc->buf_ptr,
|
||||
desc->byte_cnt, DMA_TO_DEVICE);
|
||||
} else {
|
||||
dma_unmap_page(NULL, desc->buf_ptr,
|
||||
dma_unmap_page(mp->dev->dev.parent, desc->buf_ptr,
|
||||
desc->byte_cnt, DMA_TO_DEVICE);
|
||||
}
|
||||
|
||||
|
@ -1894,8 +1897,8 @@ static int rxq_init(struct mv643xx_eth_private *mp, int index)
|
|||
mp->rx_desc_sram_size);
|
||||
rxq->rx_desc_dma = mp->rx_desc_sram_addr;
|
||||
} else {
|
||||
rxq->rx_desc_area = dma_alloc_coherent(NULL, size,
|
||||
&rxq->rx_desc_dma,
|
||||
rxq->rx_desc_area = dma_alloc_coherent(mp->dev->dev.parent,
|
||||
size, &rxq->rx_desc_dma,
|
||||
GFP_KERNEL);
|
||||
}
|
||||
|
||||
|
@ -1947,7 +1950,7 @@ out_free:
|
|||
if (index == 0 && size <= mp->rx_desc_sram_size)
|
||||
iounmap(rxq->rx_desc_area);
|
||||
else
|
||||
dma_free_coherent(NULL, size,
|
||||
dma_free_coherent(mp->dev->dev.parent, size,
|
||||
rxq->rx_desc_area,
|
||||
rxq->rx_desc_dma);
|
||||
|
||||
|
@ -1979,7 +1982,7 @@ static void rxq_deinit(struct rx_queue *rxq)
|
|||
rxq->rx_desc_area_size <= mp->rx_desc_sram_size)
|
||||
iounmap(rxq->rx_desc_area);
|
||||
else
|
||||
dma_free_coherent(NULL, rxq->rx_desc_area_size,
|
||||
dma_free_coherent(mp->dev->dev.parent, rxq->rx_desc_area_size,
|
||||
rxq->rx_desc_area, rxq->rx_desc_dma);
|
||||
|
||||
kfree(rxq->rx_skb);
|
||||
|
@ -2007,8 +2010,8 @@ static int txq_init(struct mv643xx_eth_private *mp, int index)
|
|||
mp->tx_desc_sram_size);
|
||||
txq->tx_desc_dma = mp->tx_desc_sram_addr;
|
||||
} else {
|
||||
txq->tx_desc_area = dma_alloc_coherent(NULL, size,
|
||||
&txq->tx_desc_dma,
|
||||
txq->tx_desc_area = dma_alloc_coherent(mp->dev->dev.parent,
|
||||
size, &txq->tx_desc_dma,
|
||||
GFP_KERNEL);
|
||||
}
|
||||
|
||||
|
@ -2053,7 +2056,7 @@ static void txq_deinit(struct tx_queue *txq)
|
|||
txq->tx_desc_area_size <= mp->tx_desc_sram_size)
|
||||
iounmap(txq->tx_desc_area);
|
||||
else
|
||||
dma_free_coherent(NULL, txq->tx_desc_area_size,
|
||||
dma_free_coherent(mp->dev->dev.parent, txq->tx_desc_area_size,
|
||||
txq->tx_desc_area, txq->tx_desc_dma);
|
||||
}
|
||||
|
||||
|
|
|
@ -115,7 +115,7 @@ enum vxge_hw_status vxge_hw_vpath_intr_enable(struct __vxge_hw_vpath_handle *vp)
|
|||
VXGE_HW_KDFCCTL_ERRORS_REG_KDFCCTL_FIFO1_POISON|
|
||||
VXGE_HW_KDFCCTL_ERRORS_REG_KDFCCTL_FIFO2_POISON|
|
||||
VXGE_HW_KDFCCTL_ERRORS_REG_KDFCCTL_FIFO1_DMA_ERR|
|
||||
VXGE_HW_KDFCCTL_ERRORS_REG_KDFCCTL_FIFO1_DMA_ERR), 0, 32),
|
||||
VXGE_HW_KDFCCTL_ERRORS_REG_KDFCCTL_FIFO2_DMA_ERR), 0, 32),
|
||||
&vp_reg->kdfcctl_errors_mask);
|
||||
|
||||
__vxge_hw_pio_mem_write32_upper(0, &vp_reg->vpath_ppif_int_mask);
|
||||
|
|
|
@ -819,10 +819,9 @@ void i2400m_roq_queue_update_ws(struct i2400m *i2400m, struct i2400m_roq *roq,
|
|||
roq_data = (struct i2400m_roq_data *) &skb->cb;
|
||||
i2400m_net_erx(i2400m, skb, roq_data->cs);
|
||||
}
|
||||
else {
|
||||
else
|
||||
__i2400m_roq_queue(i2400m, roq, skb, sn, nsn);
|
||||
__i2400m_roq_update_ws(i2400m, roq, sn + 1);
|
||||
}
|
||||
i2400m_roq_log_add(i2400m, roq, I2400M_RO_TYPE_PACKET_WS,
|
||||
old_ws, len, sn, nsn, roq->ws);
|
||||
}
|
||||
|
|
|
@ -557,7 +557,8 @@ static int pci_platform_power_transition(struct pci_dev *dev, pci_power_t state)
|
|||
} else {
|
||||
error = -ENODEV;
|
||||
/* Fall back to PCI_D0 if native PM is not supported */
|
||||
pci_update_current_state(dev, PCI_D0);
|
||||
if (!dev->pm_cap)
|
||||
dev->current_state = PCI_D0;
|
||||
}
|
||||
|
||||
return error;
|
||||
|
|
|
@ -102,7 +102,7 @@ static const struct rtc_class_ops pl030_ops = {
|
|||
.set_alarm = pl030_set_alarm,
|
||||
};
|
||||
|
||||
static int pl030_probe(struct amba_device *dev, void *id)
|
||||
static int pl030_probe(struct amba_device *dev, struct amba_id *id)
|
||||
{
|
||||
struct pl030_rtc *rtc;
|
||||
int ret;
|
||||
|
|
|
@ -127,7 +127,7 @@ static int pl031_remove(struct amba_device *adev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int pl031_probe(struct amba_device *adev, void *id)
|
||||
static int pl031_probe(struct amba_device *adev, struct amba_id *id)
|
||||
{
|
||||
int ret;
|
||||
struct pl031_local *ldata;
|
||||
|
|
|
@ -665,7 +665,7 @@ static struct uart_driver amba_reg = {
|
|||
.cons = AMBA_CONSOLE,
|
||||
};
|
||||
|
||||
static int pl010_probe(struct amba_device *dev, void *id)
|
||||
static int pl010_probe(struct amba_device *dev, struct amba_id *id)
|
||||
{
|
||||
struct uart_amba_port *uap;
|
||||
void __iomem *base;
|
||||
|
|
|
@ -729,7 +729,7 @@ static struct uart_driver amba_reg = {
|
|||
.cons = AMBA_CONSOLE,
|
||||
};
|
||||
|
||||
static int pl011_probe(struct amba_device *dev, void *id)
|
||||
static int pl011_probe(struct amba_device *dev, struct amba_id *id)
|
||||
{
|
||||
struct uart_amba_port *uap;
|
||||
void __iomem *base;
|
||||
|
|
|
@ -437,7 +437,7 @@ static int clcdfb_register(struct clcd_fb *fb)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int clcdfb_probe(struct amba_device *dev, void *id)
|
||||
static int clcdfb_probe(struct amba_device *dev, struct amba_id *id)
|
||||
{
|
||||
struct clcd_board *board = dev->dev.platform_data;
|
||||
struct clcd_fb *fb;
|
||||
|
|
|
@ -880,20 +880,22 @@ static irqreturn_t omap_dispc_irq_handler(int irq, void *dev)
|
|||
|
||||
static int get_dss_clocks(void)
|
||||
{
|
||||
if (IS_ERR((dispc.dss_ick = clk_get(dispc.fbdev->dev, "dss_ick")))) {
|
||||
dev_err(dispc.fbdev->dev, "can't get dss_ick\n");
|
||||
dispc.dss_ick = clk_get(dispc.fbdev->dev, "ick");
|
||||
if (IS_ERR(dispc.dss_ick)) {
|
||||
dev_err(dispc.fbdev->dev, "can't get ick\n");
|
||||
return PTR_ERR(dispc.dss_ick);
|
||||
}
|
||||
|
||||
if (IS_ERR((dispc.dss1_fck = clk_get(dispc.fbdev->dev, "dss1_fck")))) {
|
||||
dispc.dss1_fck = clk_get(dispc.fbdev->dev, "dss1_fck");
|
||||
if (IS_ERR(dispc.dss1_fck)) {
|
||||
dev_err(dispc.fbdev->dev, "can't get dss1_fck\n");
|
||||
clk_put(dispc.dss_ick);
|
||||
return PTR_ERR(dispc.dss1_fck);
|
||||
}
|
||||
|
||||
if (IS_ERR((dispc.dss_54m_fck =
|
||||
clk_get(dispc.fbdev->dev, "dss_54m_fck")))) {
|
||||
dev_err(dispc.fbdev->dev, "can't get dss_54m_fck\n");
|
||||
dispc.dss_54m_fck = clk_get(dispc.fbdev->dev, "tv_fck");
|
||||
if (IS_ERR(dispc.dss_54m_fck)) {
|
||||
dev_err(dispc.fbdev->dev, "can't get tv_fck\n");
|
||||
clk_put(dispc.dss_ick);
|
||||
clk_put(dispc.dss1_fck);
|
||||
return PTR_ERR(dispc.dss_54m_fck);
|
||||
|
|
|
@ -83,12 +83,14 @@ static inline u32 rfbi_read_reg(int idx)
|
|||
|
||||
static int rfbi_get_clocks(void)
|
||||
{
|
||||
if (IS_ERR((rfbi.dss_ick = clk_get(rfbi.fbdev->dev, "dss_ick")))) {
|
||||
dev_err(rfbi.fbdev->dev, "can't get dss_ick\n");
|
||||
rfbi.dss_ick = clk_get(rfbi.fbdev->dev, "ick");
|
||||
if (IS_ERR(rfbi.dss_ick)) {
|
||||
dev_err(rfbi.fbdev->dev, "can't get ick\n");
|
||||
return PTR_ERR(rfbi.dss_ick);
|
||||
}
|
||||
|
||||
if (IS_ERR((rfbi.dss1_fck = clk_get(rfbi.fbdev->dev, "dss1_fck")))) {
|
||||
rfbi.dss1_fck = clk_get(rfbi.fbdev->dev, "dss1_fck");
|
||||
if (IS_ERR(rfbi.dss1_fck)) {
|
||||
dev_err(rfbi.fbdev->dev, "can't get dss1_fck\n");
|
||||
clk_put(rfbi.dss_ick);
|
||||
return PTR_ERR(rfbi.dss1_fck);
|
||||
|
|
|
@ -47,6 +47,7 @@ struct sh_mobile_lcdc_priv {
|
|||
#endif
|
||||
unsigned long lddckr;
|
||||
struct sh_mobile_lcdc_chan ch[2];
|
||||
int started;
|
||||
};
|
||||
|
||||
/* shared registers */
|
||||
|
@ -451,6 +452,7 @@ static int sh_mobile_lcdc_start(struct sh_mobile_lcdc_priv *priv)
|
|||
|
||||
/* start the lcdc */
|
||||
sh_mobile_lcdc_start_stop(priv, 1);
|
||||
priv->started = 1;
|
||||
|
||||
/* tell the board code to enable the panel */
|
||||
for (k = 0; k < ARRAY_SIZE(priv->ch); k++) {
|
||||
|
@ -493,7 +495,10 @@ static void sh_mobile_lcdc_stop(struct sh_mobile_lcdc_priv *priv)
|
|||
}
|
||||
|
||||
/* stop the lcdc */
|
||||
if (priv->started) {
|
||||
sh_mobile_lcdc_start_stop(priv, 0);
|
||||
priv->started = 0;
|
||||
}
|
||||
|
||||
/* stop clocks */
|
||||
for (k = 0; k < ARRAY_SIZE(priv->ch); k++)
|
||||
|
|
|
@ -2475,7 +2475,7 @@ querySymLinkRetry:
|
|||
/* BB FIXME investigate remapping reserved chars here */
|
||||
*symlinkinfo = cifs_strndup_from_ucs(data_start, count,
|
||||
is_unicode, nls_codepage);
|
||||
if (!symlinkinfo)
|
||||
if (!*symlinkinfo)
|
||||
rc = -ENOMEM;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -225,6 +225,7 @@ int cifs_posix_open(char *full_path, struct inode **pinode,
|
|||
if (!(oflags & FMODE_READ))
|
||||
write_only = true;
|
||||
|
||||
mode &= ~current_umask();
|
||||
rc = CIFSPOSIXCreate(xid, cifs_sb->tcon, posix_flags, mode,
|
||||
pnetfid, presp_data, &oplock, full_path,
|
||||
cifs_sb->local_nls, cifs_sb->mnt_cifs_flags &
|
||||
|
@ -310,7 +311,6 @@ cifs_create(struct inode *inode, struct dentry *direntry, int mode,
|
|||
return -ENOMEM;
|
||||
}
|
||||
|
||||
mode &= ~current_umask();
|
||||
if (oplockEnabled)
|
||||
oplock = REQ_OPLOCK;
|
||||
|
||||
|
@ -336,7 +336,7 @@ cifs_create(struct inode *inode, struct dentry *direntry, int mode,
|
|||
else /* success, no need to query */
|
||||
goto cifs_create_set_dentry;
|
||||
} else if ((rc != -EIO) && (rc != -EREMOTE) &&
|
||||
(rc != -EOPNOTSUPP)) /* path not found or net err */
|
||||
(rc != -EOPNOTSUPP) && (rc != -EINVAL))
|
||||
goto cifs_create_out;
|
||||
/* else fallthrough to retry, using older open call, this is
|
||||
case where server does not support this SMB level, and
|
||||
|
@ -609,7 +609,6 @@ cifs_lookup(struct inode *parent_dir_inode, struct dentry *direntry,
|
|||
int xid;
|
||||
int rc = 0; /* to get around spurious gcc warning, set to zero here */
|
||||
int oplock = 0;
|
||||
int mode;
|
||||
__u16 fileHandle = 0;
|
||||
bool posix_open = false;
|
||||
struct cifs_sb_info *cifs_sb;
|
||||
|
@ -660,13 +659,12 @@ cifs_lookup(struct inode *parent_dir_inode, struct dentry *direntry,
|
|||
|
||||
if (pTcon->unix_ext) {
|
||||
if (!(nd->flags & (LOOKUP_PARENT | LOOKUP_DIRECTORY)) &&
|
||||
(nd->flags & LOOKUP_OPEN)) {
|
||||
(nd->flags & LOOKUP_OPEN) && !pTcon->broken_posix_open) {
|
||||
if (!((nd->intent.open.flags & O_CREAT) &&
|
||||
(nd->intent.open.flags & O_EXCL))) {
|
||||
mode = nd->intent.open.create_mode &
|
||||
~current_umask();
|
||||
rc = cifs_posix_open(full_path, &newInode,
|
||||
parent_dir_inode->i_sb, mode,
|
||||
parent_dir_inode->i_sb,
|
||||
nd->intent.open.create_mode,
|
||||
nd->intent.open.flags, &oplock,
|
||||
&fileHandle, xid);
|
||||
/*
|
||||
|
@ -681,6 +679,8 @@ cifs_lookup(struct inode *parent_dir_inode, struct dentry *direntry,
|
|||
*/
|
||||
if ((rc != -EINVAL) && (rc != -EOPNOTSUPP))
|
||||
posix_open = true;
|
||||
else
|
||||
pTcon->broken_posix_open = true;
|
||||
}
|
||||
}
|
||||
if (!posix_open)
|
||||
|
|
|
@ -130,10 +130,6 @@ static inline int cifs_posix_open_inode_helper(struct inode *inode,
|
|||
struct cifsFileInfo *pCifsFile, int oplock, u16 netfid)
|
||||
{
|
||||
|
||||
file->private_data = kmalloc(sizeof(struct cifsFileInfo), GFP_KERNEL);
|
||||
if (file->private_data == NULL)
|
||||
return -ENOMEM;
|
||||
pCifsFile = cifs_init_private(file->private_data, inode, file, netfid);
|
||||
write_lock(&GlobalSMBSeslock);
|
||||
|
||||
pCifsInode = CIFS_I(file->f_path.dentry->d_inode);
|
||||
|
@ -184,6 +180,38 @@ psx_client_can_cache:
|
|||
return 0;
|
||||
}
|
||||
|
||||
static struct cifsFileInfo *
|
||||
cifs_fill_filedata(struct file *file)
|
||||
{
|
||||
struct list_head *tmp;
|
||||
struct cifsFileInfo *pCifsFile = NULL;
|
||||
struct cifsInodeInfo *pCifsInode = NULL;
|
||||
|
||||
/* search inode for this file and fill in file->private_data */
|
||||
pCifsInode = CIFS_I(file->f_path.dentry->d_inode);
|
||||
read_lock(&GlobalSMBSeslock);
|
||||
list_for_each(tmp, &pCifsInode->openFileList) {
|
||||
pCifsFile = list_entry(tmp, struct cifsFileInfo, flist);
|
||||
if ((pCifsFile->pfile == NULL) &&
|
||||
(pCifsFile->pid == current->tgid)) {
|
||||
/* mode set in cifs_create */
|
||||
|
||||
/* needed for writepage */
|
||||
pCifsFile->pfile = file;
|
||||
file->private_data = pCifsFile;
|
||||
break;
|
||||
}
|
||||
}
|
||||
read_unlock(&GlobalSMBSeslock);
|
||||
|
||||
if (file->private_data != NULL) {
|
||||
return pCifsFile;
|
||||
} else if ((file->f_flags & O_CREAT) && (file->f_flags & O_EXCL))
|
||||
cERROR(1, ("could not find file instance for "
|
||||
"new file %p", file));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* all arguments to this function must be checked for validity in caller */
|
||||
static inline int cifs_open_inode_helper(struct inode *inode, struct file *file,
|
||||
struct cifsInodeInfo *pCifsInode, struct cifsFileInfo *pCifsFile,
|
||||
|
@ -258,7 +286,6 @@ int cifs_open(struct inode *inode, struct file *file)
|
|||
struct cifsTconInfo *tcon;
|
||||
struct cifsFileInfo *pCifsFile;
|
||||
struct cifsInodeInfo *pCifsInode;
|
||||
struct list_head *tmp;
|
||||
char *full_path = NULL;
|
||||
int desiredAccess;
|
||||
int disposition;
|
||||
|
@ -270,32 +297,12 @@ int cifs_open(struct inode *inode, struct file *file)
|
|||
cifs_sb = CIFS_SB(inode->i_sb);
|
||||
tcon = cifs_sb->tcon;
|
||||
|
||||
/* search inode for this file and fill in file->private_data */
|
||||
pCifsInode = CIFS_I(file->f_path.dentry->d_inode);
|
||||
read_lock(&GlobalSMBSeslock);
|
||||
list_for_each(tmp, &pCifsInode->openFileList) {
|
||||
pCifsFile = list_entry(tmp, struct cifsFileInfo,
|
||||
flist);
|
||||
if ((pCifsFile->pfile == NULL) &&
|
||||
(pCifsFile->pid == current->tgid)) {
|
||||
/* mode set in cifs_create */
|
||||
|
||||
/* needed for writepage */
|
||||
pCifsFile->pfile = file;
|
||||
|
||||
file->private_data = pCifsFile;
|
||||
break;
|
||||
}
|
||||
}
|
||||
read_unlock(&GlobalSMBSeslock);
|
||||
|
||||
if (file->private_data != NULL) {
|
||||
rc = 0;
|
||||
pCifsFile = cifs_fill_filedata(file);
|
||||
if (pCifsFile) {
|
||||
FreeXid(xid);
|
||||
return rc;
|
||||
} else if ((file->f_flags & O_CREAT) && (file->f_flags & O_EXCL))
|
||||
cERROR(1, ("could not find file instance for "
|
||||
"new file %p", file));
|
||||
return 0;
|
||||
}
|
||||
|
||||
full_path = build_path_from_dentry(file->f_path.dentry);
|
||||
if (full_path == NULL) {
|
||||
|
@ -325,6 +332,7 @@ int cifs_open(struct inode *inode, struct file *file)
|
|||
/* no need for special case handling of setting mode
|
||||
on read only files needed here */
|
||||
|
||||
pCifsFile = cifs_fill_filedata(file);
|
||||
cifs_posix_open_inode_helper(inode, file, pCifsInode,
|
||||
pCifsFile, oplock, netfid);
|
||||
goto out;
|
||||
|
|
|
@ -107,48 +107,48 @@ void *
|
|||
cifs_follow_link(struct dentry *direntry, struct nameidata *nd)
|
||||
{
|
||||
struct inode *inode = direntry->d_inode;
|
||||
int rc = -EACCES;
|
||||
int rc = -ENOMEM;
|
||||
int xid;
|
||||
char *full_path = NULL;
|
||||
char *target_path = ERR_PTR(-ENOMEM);
|
||||
struct cifs_sb_info *cifs_sb;
|
||||
struct cifsTconInfo *pTcon;
|
||||
char *target_path = NULL;
|
||||
struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
|
||||
struct cifsTconInfo *tcon = cifs_sb->tcon;
|
||||
|
||||
xid = GetXid();
|
||||
|
||||
full_path = build_path_from_dentry(direntry);
|
||||
/*
|
||||
* For now, we just handle symlinks with unix extensions enabled.
|
||||
* Eventually we should handle NTFS reparse points, and MacOS
|
||||
* symlink support. For instance...
|
||||
*
|
||||
* rc = CIFSSMBQueryReparseLinkInfo(...)
|
||||
*
|
||||
* For now, just return -EACCES when the server doesn't support posix
|
||||
* extensions. Note that we still allow querying symlinks when posix
|
||||
* extensions are manually disabled. We could disable these as well
|
||||
* but there doesn't seem to be any harm in allowing the client to
|
||||
* read them.
|
||||
*/
|
||||
if (!(tcon->ses->capabilities & CAP_UNIX)) {
|
||||
rc = -EACCES;
|
||||
goto out;
|
||||
}
|
||||
|
||||
full_path = build_path_from_dentry(direntry);
|
||||
if (!full_path)
|
||||
goto out;
|
||||
|
||||
cFYI(1, ("Full path: %s inode = 0x%p", full_path, inode));
|
||||
cifs_sb = CIFS_SB(inode->i_sb);
|
||||
pTcon = cifs_sb->tcon;
|
||||
|
||||
/* We could change this to:
|
||||
if (pTcon->unix_ext)
|
||||
but there does not seem any point in refusing to
|
||||
get symlink info if we can, even if unix extensions
|
||||
turned off for this mount */
|
||||
|
||||
if (pTcon->ses->capabilities & CAP_UNIX)
|
||||
rc = CIFSSMBUnixQuerySymLink(xid, pTcon, full_path,
|
||||
&target_path,
|
||||
rc = CIFSSMBUnixQuerySymLink(xid, tcon, full_path, &target_path,
|
||||
cifs_sb->local_nls);
|
||||
else {
|
||||
/* BB add read reparse point symlink code here */
|
||||
/* rc = CIFSSMBQueryReparseLinkInfo */
|
||||
/* BB Add code to Query ReparsePoint info */
|
||||
/* BB Add MAC style xsymlink check here if enabled */
|
||||
}
|
||||
|
||||
kfree(full_path);
|
||||
out:
|
||||
if (rc != 0) {
|
||||
kfree(target_path);
|
||||
target_path = ERR_PTR(rc);
|
||||
}
|
||||
|
||||
kfree(full_path);
|
||||
out:
|
||||
FreeXid(xid);
|
||||
nd_set_link(nd, target_path);
|
||||
return NULL;
|
||||
|
|
|
@ -576,7 +576,7 @@ static int nilfs_ioctl_clean_segments(struct inode *inode, struct file *filp,
|
|||
ret = nilfs_clean_segments(inode->i_sb, argv, kbufs);
|
||||
|
||||
out_free:
|
||||
while (--n > 0)
|
||||
while (--n >= 0)
|
||||
vfree(kbufs[n]);
|
||||
kfree(kbufs[4]);
|
||||
return ret;
|
||||
|
|
|
@ -28,7 +28,7 @@ struct amba_id {
|
|||
|
||||
struct amba_driver {
|
||||
struct device_driver drv;
|
||||
int (*probe)(struct amba_device *, void *);
|
||||
int (*probe)(struct amba_device *, struct amba_id *);
|
||||
int (*remove)(struct amba_device *);
|
||||
void (*shutdown)(struct amba_device *);
|
||||
int (*suspend)(struct amba_device *, pm_message_t);
|
||||
|
|
|
@ -1103,7 +1103,7 @@ void ide_fix_driveid(u16 *);
|
|||
|
||||
extern void ide_fixstring(u8 *, const int, const int);
|
||||
|
||||
int ide_busy_sleep(ide_hwif_t *, unsigned long, int);
|
||||
int ide_busy_sleep(ide_drive_t *, unsigned long, int);
|
||||
|
||||
int ide_wait_stat(ide_startstop_t *, ide_drive_t *, u8, u8, unsigned long);
|
||||
|
||||
|
|
|
@ -1097,6 +1097,32 @@ unsigned long __init node_memmap_size_bytes(int, unsigned long, unsigned long);
|
|||
#define pfn_valid_within(pfn) (1)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ARCH_HAS_HOLES_MEMORYMODEL
|
||||
/*
|
||||
* pfn_valid() is meant to be able to tell if a given PFN has valid memmap
|
||||
* associated with it or not. In FLATMEM, it is expected that holes always
|
||||
* have valid memmap as long as there is valid PFNs either side of the hole.
|
||||
* In SPARSEMEM, it is assumed that a valid section has a memmap for the
|
||||
* entire section.
|
||||
*
|
||||
* However, an ARM, and maybe other embedded architectures in the future
|
||||
* free memmap backing holes to save memory on the assumption the memmap is
|
||||
* never used. The page_zone linkages are then broken even though pfn_valid()
|
||||
* returns true. A walker of the full memmap must then do this additional
|
||||
* check to ensure the memmap they are looking at is sane by making sure
|
||||
* the zone and PFN linkages are still valid. This is expensive, but walkers
|
||||
* of the full memmap are extremely rare.
|
||||
*/
|
||||
int memmap_valid_within(unsigned long pfn,
|
||||
struct page *page, struct zone *zone);
|
||||
#else
|
||||
static inline int memmap_valid_within(unsigned long pfn,
|
||||
struct page *page, struct zone *zone)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
#endif /* CONFIG_ARCH_HAS_HOLES_MEMORYMODEL */
|
||||
|
||||
#endif /* !__GENERATING_BOUNDS.H */
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
#endif /* _LINUX_MMZONE_H */
|
||||
|
|
|
@ -1406,7 +1406,7 @@
|
|||
#define PCI_DEVICE_ID_VIA_82C598_1 0x8598
|
||||
#define PCI_DEVICE_ID_VIA_838X_1 0xB188
|
||||
#define PCI_DEVICE_ID_VIA_83_87XX_1 0xB198
|
||||
#define PCI_DEVICE_ID_VIA_C409_IDE 0XC409
|
||||
#define PCI_DEVICE_ID_VIA_VX855_IDE 0xC409
|
||||
#define PCI_DEVICE_ID_VIA_ANON 0xFFFF
|
||||
|
||||
#define PCI_VENDOR_ID_SIEMENS 0x110A
|
||||
|
|
|
@ -193,6 +193,7 @@ static void drop_futex_key_refs(union futex_key *key)
|
|||
* @uaddr: virtual address of the futex
|
||||
* @fshared: 0 for a PROCESS_PRIVATE futex, 1 for PROCESS_SHARED
|
||||
* @key: address where result is stored.
|
||||
* @rw: mapping needs to be read/write (values: VERIFY_READ, VERIFY_WRITE)
|
||||
*
|
||||
* Returns a negative error code or 0
|
||||
* The key words are stored in *key on success.
|
||||
|
@ -203,7 +204,8 @@ static void drop_futex_key_refs(union futex_key *key)
|
|||
*
|
||||
* lock_page() might sleep, the caller should not hold a spinlock.
|
||||
*/
|
||||
static int get_futex_key(u32 __user *uaddr, int fshared, union futex_key *key)
|
||||
static int
|
||||
get_futex_key(u32 __user *uaddr, int fshared, union futex_key *key, int rw)
|
||||
{
|
||||
unsigned long address = (unsigned long)uaddr;
|
||||
struct mm_struct *mm = current->mm;
|
||||
|
@ -226,7 +228,7 @@ static int get_futex_key(u32 __user *uaddr, int fshared, union futex_key *key)
|
|||
* but access_ok() should be faster than find_vma()
|
||||
*/
|
||||
if (!fshared) {
|
||||
if (unlikely(!access_ok(VERIFY_WRITE, uaddr, sizeof(u32))))
|
||||
if (unlikely(!access_ok(rw, uaddr, sizeof(u32))))
|
||||
return -EFAULT;
|
||||
key->private.mm = mm;
|
||||
key->private.address = address;
|
||||
|
@ -235,7 +237,7 @@ static int get_futex_key(u32 __user *uaddr, int fshared, union futex_key *key)
|
|||
}
|
||||
|
||||
again:
|
||||
err = get_user_pages_fast(address, 1, 0, &page);
|
||||
err = get_user_pages_fast(address, 1, rw == VERIFY_WRITE, &page);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
|
@ -677,7 +679,7 @@ static int futex_wake(u32 __user *uaddr, int fshared, int nr_wake, u32 bitset)
|
|||
if (!bitset)
|
||||
return -EINVAL;
|
||||
|
||||
ret = get_futex_key(uaddr, fshared, &key);
|
||||
ret = get_futex_key(uaddr, fshared, &key, VERIFY_READ);
|
||||
if (unlikely(ret != 0))
|
||||
goto out;
|
||||
|
||||
|
@ -723,10 +725,10 @@ futex_wake_op(u32 __user *uaddr1, int fshared, u32 __user *uaddr2,
|
|||
int ret, op_ret;
|
||||
|
||||
retry:
|
||||
ret = get_futex_key(uaddr1, fshared, &key1);
|
||||
ret = get_futex_key(uaddr1, fshared, &key1, VERIFY_READ);
|
||||
if (unlikely(ret != 0))
|
||||
goto out;
|
||||
ret = get_futex_key(uaddr2, fshared, &key2);
|
||||
ret = get_futex_key(uaddr2, fshared, &key2, VERIFY_WRITE);
|
||||
if (unlikely(ret != 0))
|
||||
goto out_put_key1;
|
||||
|
||||
|
@ -814,10 +816,10 @@ static int futex_requeue(u32 __user *uaddr1, int fshared, u32 __user *uaddr2,
|
|||
int ret, drop_count = 0;
|
||||
|
||||
retry:
|
||||
ret = get_futex_key(uaddr1, fshared, &key1);
|
||||
ret = get_futex_key(uaddr1, fshared, &key1, VERIFY_READ);
|
||||
if (unlikely(ret != 0))
|
||||
goto out;
|
||||
ret = get_futex_key(uaddr2, fshared, &key2);
|
||||
ret = get_futex_key(uaddr2, fshared, &key2, VERIFY_READ);
|
||||
if (unlikely(ret != 0))
|
||||
goto out_put_key1;
|
||||
|
||||
|
@ -1140,7 +1142,7 @@ static int futex_wait(u32 __user *uaddr, int fshared,
|
|||
q.bitset = bitset;
|
||||
retry:
|
||||
q.key = FUTEX_KEY_INIT;
|
||||
ret = get_futex_key(uaddr, fshared, &q.key);
|
||||
ret = get_futex_key(uaddr, fshared, &q.key, VERIFY_READ);
|
||||
if (unlikely(ret != 0))
|
||||
goto out;
|
||||
|
||||
|
@ -1330,7 +1332,7 @@ static int futex_lock_pi(u32 __user *uaddr, int fshared,
|
|||
q.pi_state = NULL;
|
||||
retry:
|
||||
q.key = FUTEX_KEY_INIT;
|
||||
ret = get_futex_key(uaddr, fshared, &q.key);
|
||||
ret = get_futex_key(uaddr, fshared, &q.key, VERIFY_WRITE);
|
||||
if (unlikely(ret != 0))
|
||||
goto out;
|
||||
|
||||
|
@ -1594,7 +1596,7 @@ retry:
|
|||
if ((uval & FUTEX_TID_MASK) != task_pid_vnr(current))
|
||||
return -EPERM;
|
||||
|
||||
ret = get_futex_key(uaddr, fshared, &key);
|
||||
ret = get_futex_key(uaddr, fshared, &key, VERIFY_WRITE);
|
||||
if (unlikely(ret != 0))
|
||||
goto out;
|
||||
|
||||
|
|
15
mm/mmzone.c
15
mm/mmzone.c
|
@ -6,6 +6,7 @@
|
|||
|
||||
|
||||
#include <linux/stddef.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/mmzone.h>
|
||||
#include <linux/module.h>
|
||||
|
||||
|
@ -72,3 +73,17 @@ struct zoneref *next_zones_zonelist(struct zoneref *z,
|
|||
*zone = zonelist_zone(z);
|
||||
return z;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ARCH_HAS_HOLES_MEMORYMODEL
|
||||
int memmap_valid_within(unsigned long pfn,
|
||||
struct page *page, struct zone *zone)
|
||||
{
|
||||
if (page_to_pfn(page) != pfn)
|
||||
return 0;
|
||||
|
||||
if (page_zone(page) != zone)
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
#endif /* CONFIG_ARCH_HAS_HOLES_MEMORYMODEL */
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
* Original design by Rik van Riel <riel@conectiva.com.br> 2001
|
||||
* File methods by Dave McCracken <dmccr@us.ibm.com> 2003, 2004
|
||||
* Anonymous methods by Andrea Arcangeli <andrea@suse.de> 2004
|
||||
* Contributions by Hugh Dickins <hugh@veritas.com> 2003, 2004
|
||||
* Contributions by Hugh Dickins 2003, 2004
|
||||
*/
|
||||
|
||||
/*
|
||||
|
|
19
mm/vmstat.c
19
mm/vmstat.c
|
@ -509,22 +509,11 @@ static void pagetypeinfo_showblockcount_print(struct seq_file *m,
|
|||
continue;
|
||||
|
||||
page = pfn_to_page(pfn);
|
||||
#ifdef CONFIG_ARCH_FLATMEM_HAS_HOLES
|
||||
/*
|
||||
* Ordinarily, memory holes in flatmem still have a valid
|
||||
* memmap for the PFN range. However, an architecture for
|
||||
* embedded systems (e.g. ARM) can free up the memmap backing
|
||||
* holes to save memory on the assumption the memmap is
|
||||
* never used. The page_zone linkages are then broken even
|
||||
* though pfn_valid() returns true. Skip the page if the
|
||||
* linkages are broken. Even if this test passed, the impact
|
||||
* is that the counters for the movable type are off but
|
||||
* fragmentation monitoring is likely meaningless on small
|
||||
* systems.
|
||||
*/
|
||||
if (page_zone(page) != zone)
|
||||
|
||||
/* Watch for unexpected holes punched in the memmap */
|
||||
if (!memmap_valid_within(pfn, page, zone))
|
||||
continue;
|
||||
#endif
|
||||
|
||||
mtype = get_pageblock_migratetype(page);
|
||||
|
||||
if (mtype < MIGRATE_TYPES)
|
||||
|
|
|
@ -134,6 +134,10 @@ struct sk_buff *br_handle_frame(struct net_bridge_port *p, struct sk_buff *skb)
|
|||
if (skb->protocol == htons(ETH_P_PAUSE))
|
||||
goto drop;
|
||||
|
||||
/* If STP is turned off, then forward */
|
||||
if (p->br->stp_enabled == BR_NO_STP && dest[5] == 0)
|
||||
goto forward;
|
||||
|
||||
if (NF_HOOK(PF_BRIDGE, NF_BR_LOCAL_IN, skb, skb->dev,
|
||||
NULL, br_handle_local_finish))
|
||||
return NULL; /* frame consumed by filter */
|
||||
|
@ -141,6 +145,7 @@ struct sk_buff *br_handle_frame(struct net_bridge_port *p, struct sk_buff *skb)
|
|||
return skb; /* continue processing */
|
||||
}
|
||||
|
||||
forward:
|
||||
switch (p->state) {
|
||||
case BR_STATE_FORWARDING:
|
||||
rhook = rcu_dereference(br_should_route_hook);
|
||||
|
|
|
@ -297,6 +297,9 @@ void br_topology_change_detection(struct net_bridge *br)
|
|||
{
|
||||
int isroot = br_is_root_bridge(br);
|
||||
|
||||
if (br->stp_enabled != BR_KERNEL_STP)
|
||||
return;
|
||||
|
||||
pr_info("%s: topology change detected, %s\n", br->dev->name,
|
||||
isroot ? "propagating" : "sending tcn bpdu");
|
||||
|
||||
|
|
|
@ -66,9 +66,9 @@
|
|||
|
||||
NOTES.
|
||||
|
||||
* The stored value for avbps is scaled by 2^5, so that maximal
|
||||
rate is ~1Gbit, avpps is scaled by 2^10.
|
||||
|
||||
* avbps is scaled by 2^5, avpps is scaled by 2^10.
|
||||
* both values are reported as 32 bit unsigned values. bps can
|
||||
overflow for fast links : max speed being 34360Mbit/sec
|
||||
* Minimal interval is HZ/4=250msec (it is the greatest common divisor
|
||||
for HZ=100 and HZ=1024 8)), maximal interval
|
||||
is (HZ*2^EST_MAX_INTERVAL)/4 = 8sec. Shorter intervals
|
||||
|
@ -86,9 +86,9 @@ struct gen_estimator
|
|||
spinlock_t *stats_lock;
|
||||
int ewma_log;
|
||||
u64 last_bytes;
|
||||
u64 avbps;
|
||||
u32 last_packets;
|
||||
u32 avpps;
|
||||
u32 avbps;
|
||||
struct rcu_head e_rcu;
|
||||
struct rb_node node;
|
||||
};
|
||||
|
@ -115,6 +115,7 @@ static void est_timer(unsigned long arg)
|
|||
rcu_read_lock();
|
||||
list_for_each_entry_rcu(e, &elist[idx].list, list) {
|
||||
u64 nbytes;
|
||||
u64 brate;
|
||||
u32 npackets;
|
||||
u32 rate;
|
||||
|
||||
|
@ -125,9 +126,9 @@ static void est_timer(unsigned long arg)
|
|||
|
||||
nbytes = e->bstats->bytes;
|
||||
npackets = e->bstats->packets;
|
||||
rate = (nbytes - e->last_bytes)<<(7 - idx);
|
||||
brate = (nbytes - e->last_bytes)<<(7 - idx);
|
||||
e->last_bytes = nbytes;
|
||||
e->avbps += ((long)rate - (long)e->avbps) >> e->ewma_log;
|
||||
e->avbps += ((s64)(brate - e->avbps)) >> e->ewma_log;
|
||||
e->rate_est->bps = (e->avbps+0xF)>>5;
|
||||
|
||||
rate = (npackets - e->last_packets)<<(12 - idx);
|
||||
|
|
|
@ -175,9 +175,13 @@ static void service_arp_queue(struct netpoll_info *npi)
|
|||
void netpoll_poll(struct netpoll *np)
|
||||
{
|
||||
struct net_device *dev = np->dev;
|
||||
const struct net_device_ops *ops = dev->netdev_ops;
|
||||
const struct net_device_ops *ops;
|
||||
|
||||
if (!dev || !netif_running(dev) || !ops->ndo_poll_controller)
|
||||
if (!dev || !netif_running(dev))
|
||||
return;
|
||||
|
||||
ops = dev->netdev_ops;
|
||||
if (!ops->ndo_poll_controller)
|
||||
return;
|
||||
|
||||
/* Process pending work on NIC */
|
||||
|
|
|
@ -2288,7 +2288,7 @@ unsigned int skb_seq_read(unsigned int consumed, const u8 **data,
|
|||
next_skb:
|
||||
block_limit = skb_headlen(st->cur_skb) + st->stepped_offset;
|
||||
|
||||
if (abs_offset < block_limit) {
|
||||
if (abs_offset < block_limit && !st->frag_data) {
|
||||
*data = st->cur_skb->data + (abs_offset - st->stepped_offset);
|
||||
return block_limit - abs_offset;
|
||||
}
|
||||
|
|
|
@ -408,7 +408,7 @@ config INET_XFRM_MODE_BEET
|
|||
|
||||
config INET_LRO
|
||||
bool "Large Receive Offload (ipv4/tcp)"
|
||||
|
||||
default y
|
||||
---help---
|
||||
Support for Large Receive Offload (ipv4/tcp).
|
||||
|
||||
|
|
|
@ -139,6 +139,8 @@ __be32 ic_servaddr = NONE; /* Boot server IP address */
|
|||
__be32 root_server_addr = NONE; /* Address of NFS server */
|
||||
u8 root_server_path[256] = { 0, }; /* Path to mount as root */
|
||||
|
||||
u32 ic_dev_xid; /* Device under configuration */
|
||||
|
||||
/* vendor class identifier */
|
||||
static char vendor_class_identifier[253] __initdata;
|
||||
|
||||
|
@ -932,6 +934,13 @@ static int __init ic_bootp_recv(struct sk_buff *skb, struct net_device *dev, str
|
|||
goto drop_unlock;
|
||||
}
|
||||
|
||||
/* Is it a reply for the device we are configuring? */
|
||||
if (b->xid != ic_dev_xid) {
|
||||
if (net_ratelimit())
|
||||
printk(KERN_ERR "DHCP/BOOTP: Ignoring delayed packet \n");
|
||||
goto drop_unlock;
|
||||
}
|
||||
|
||||
/* Parse extensions */
|
||||
if (ext_len >= 4 &&
|
||||
!memcmp(b->exten, ic_bootp_cookie, 4)) { /* Check magic cookie */
|
||||
|
@ -1115,6 +1124,9 @@ static int __init ic_dynamic(void)
|
|||
get_random_bytes(&timeout, sizeof(timeout));
|
||||
timeout = CONF_BASE_TIMEOUT + (timeout % (unsigned) CONF_TIMEOUT_RANDOM);
|
||||
for (;;) {
|
||||
/* Track the device we are configuring */
|
||||
ic_dev_xid = d->xid;
|
||||
|
||||
#ifdef IPCONFIG_BOOTP
|
||||
if (do_bootp && (d->able & IC_BOOTP))
|
||||
ic_bootp_send_if(d, jiffies - start_jiffies);
|
||||
|
|
|
@ -1321,6 +1321,7 @@ int tcp_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
|
|||
struct task_struct *user_recv = NULL;
|
||||
int copied_early = 0;
|
||||
struct sk_buff *skb;
|
||||
u32 urg_hole = 0;
|
||||
|
||||
lock_sock(sk);
|
||||
|
||||
|
@ -1532,7 +1533,8 @@ do_prequeue:
|
|||
}
|
||||
}
|
||||
}
|
||||
if ((flags & MSG_PEEK) && peek_seq != tp->copied_seq) {
|
||||
if ((flags & MSG_PEEK) &&
|
||||
(peek_seq - copied - urg_hole != tp->copied_seq)) {
|
||||
if (net_ratelimit())
|
||||
printk(KERN_DEBUG "TCP(%s:%d): Application bug, race in MSG_PEEK.\n",
|
||||
current->comm, task_pid_nr(current));
|
||||
|
@ -1553,6 +1555,7 @@ do_prequeue:
|
|||
if (!urg_offset) {
|
||||
if (!sock_flag(sk, SOCK_URGINLINE)) {
|
||||
++*seq;
|
||||
urg_hole++;
|
||||
offset++;
|
||||
used--;
|
||||
if (!used)
|
||||
|
|
|
@ -303,6 +303,8 @@ restart:
|
|||
switch (teql_resolve(skb, skb_res, slave)) {
|
||||
case 0:
|
||||
if (__netif_tx_trylock(slave_txq)) {
|
||||
unsigned int length = qdisc_pkt_len(skb);
|
||||
|
||||
if (!netif_tx_queue_stopped(slave_txq) &&
|
||||
!netif_tx_queue_frozen(slave_txq) &&
|
||||
slave_ops->ndo_start_xmit(skb, slave) == 0) {
|
||||
|
@ -310,8 +312,7 @@ restart:
|
|||
master->slaves = NEXT_SLAVE(q);
|
||||
netif_wake_queue(dev);
|
||||
master->stats.tx_packets++;
|
||||
master->stats.tx_bytes +=
|
||||
qdisc_pkt_len(skb);
|
||||
master->stats.tx_bytes += length;
|
||||
return 0;
|
||||
}
|
||||
__netif_tx_unlock(slave_txq);
|
||||
|
|
|
@ -1,5 +1,13 @@
|
|||
#!/bin/sh
|
||||
# Print additional version information for non-release trees.
|
||||
#
|
||||
# This scripts adds local version information from the version
|
||||
# control systems git, mercurial (hg) and subversion (svn).
|
||||
#
|
||||
# If something goes wrong, send a mail the kernel build mailinglist
|
||||
# (see MAINTAINERS) and CC Nico Schottelius
|
||||
# <nico-linuxsetlocalversion -at- schottelius.org>.
|
||||
#
|
||||
#
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 [srctree]" >&2
|
||||
|
@ -10,13 +18,21 @@ cd "${1:-.}" || usage
|
|||
|
||||
# Check for git and a git repo.
|
||||
if head=`git rev-parse --verify --short HEAD 2>/dev/null`; then
|
||||
# Do we have an untagged tag?
|
||||
if atag=`git describe 2>/dev/null`; then
|
||||
|
||||
# If we are at a tagged commit (like "v2.6.30-rc6"), we ignore it,
|
||||
# because this version is defined in the top level Makefile.
|
||||
if [ -z "`git describe --exact-match 2>/dev/null`" ]; then
|
||||
|
||||
# If we are past a tagged commit (like "v2.6.30-rc5-302-g72357d5"),
|
||||
# we pretty print it.
|
||||
if atag="`git describe 2>/dev/null`"; then
|
||||
echo "$atag" | awk -F- '{printf("-%05d-%s", $(NF-1),$(NF))}'
|
||||
# add -g${head}, if there is no usable tag
|
||||
|
||||
# If we don't have a tag at all we print -g{commitish}.
|
||||
else
|
||||
printf '%s%s' -g $head
|
||||
fi
|
||||
fi
|
||||
|
||||
# Is this git on svn?
|
||||
if git config --get svn-remote.svn.url >/dev/null; then
|
||||
|
|
|
@ -1074,7 +1074,7 @@ static unsigned int __devinit aaci_size_fifo(struct aaci *aaci)
|
|||
return i;
|
||||
}
|
||||
|
||||
static int __devinit aaci_probe(struct amba_device *dev, void *id)
|
||||
static int __devinit aaci_probe(struct amba_device *dev, struct amba_id *id)
|
||||
{
|
||||
struct aaci *aaci;
|
||||
int ret, i;
|
||||
|
|
Loading…
Reference in a new issue