Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 264318
b: refs/heads/master
c: 4f33284
h: refs/heads/master
v: v3
  • Loading branch information
Alex Deucher authored and Dave Airlie committed Oct 5, 2011
1 parent daa295b commit 96d8d86
Show file tree
Hide file tree
Showing 66 changed files with 196 additions and 282 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 746fb63c54d2659e1da3c5e90a77ccb23a309cc5
refs/heads/master: 4f332844cc87c5f99c5300f788abbe8a8c731390
10 changes: 5 additions & 5 deletions trunk/Documentation/networking/scaling.txt
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ applying a filter to each packet that assigns it to one of a small number
of logical flows. Packets for each flow are steered to a separate receive
queue, which in turn can be processed by separate CPUs. This mechanism is
generally known as “Receive-side Scaling” (RSS). The goal of RSS and
the other scaling techniques is to increase performance uniformly.
the other scaling techniques to increase performance uniformly.
Multi-queue distribution can also be used for traffic prioritization, but
that is not the focus of these techniques.

Expand Down Expand Up @@ -186,10 +186,10 @@ are steered using plain RPS. Multiple table entries may point to the
same CPU. Indeed, with many flows and few CPUs, it is very likely that
a single application thread handles flows with many different flow hashes.

rps_sock_flow_table is a global flow table that contains the *desired* CPU
for flows: the CPU that is currently processing the flow in userspace.
Each table value is a CPU index that is updated during calls to recvmsg
and sendmsg (specifically, inet_recvmsg(), inet_sendmsg(), inet_sendpage()
rps_sock_table is a global flow table that contains the *desired* CPU for
flows: the CPU that is currently processing the flow in userspace. Each
table value is a CPU index that is updated during calls to recvmsg and
sendmsg (specifically, inet_recvmsg(), inet_sendmsg(), inet_sendpage()
and tcp_splice_read()).

When the scheduler moves a thread to a new CPU while it has outstanding
Expand Down
4 changes: 2 additions & 2 deletions trunk/MAINTAINERS
Original file line number Diff line number Diff line change
Expand Up @@ -6366,10 +6366,10 @@ F: net/ipv4/tcp_lp.c

TEGRA SUPPORT
M: Colin Cross <ccross@android.com>
M: Erik Gilling <konkers@android.com>
M: Olof Johansson <olof@lixom.net>
M: Stephen Warren <swarren@nvidia.com>
L: linux-tegra@vger.kernel.org
T: git git://git.kernel.org/pub/scm/linux/kernel/git/olof/tegra.git
T: git git://android.git.kernel.org/kernel/tegra.git
S: Supported
F: arch/arm/mach-tegra

Expand Down
6 changes: 0 additions & 6 deletions trunk/arch/mips/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ config MIPS
select GENERIC_IRQ_PROBE
select GENERIC_IRQ_SHOW
select HAVE_ARCH_JUMP_LABEL
select IRQ_FORCED_THREADING

menu "Machine selection"

Expand Down Expand Up @@ -723,7 +722,6 @@ config CAVIUM_OCTEON_SIMULATOR
select SYS_SUPPORTS_HIGHMEM
select SYS_SUPPORTS_HOTPLUG_CPU
select SYS_HAS_CPU_CAVIUM_OCTEON
select HOLES_IN_ZONE
help
The Octeon simulator is software performance model of the Cavium
Octeon Processor. It supports simulating Octeon processors on x86
Expand All @@ -746,7 +744,6 @@ config CAVIUM_OCTEON_REFERENCE_BOARD
select ZONE_DMA32
select USB_ARCH_HAS_OHCI
select USB_ARCH_HAS_EHCI
select HOLES_IN_ZONE
help
This option supports all of the Octeon reference boards from Cavium
Networks. It builds a kernel that dynamically determines the Octeon
Expand Down Expand Up @@ -976,9 +973,6 @@ config ISA_DMA_API
config GENERIC_GPIO
bool

config HOLES_IN_ZONE
bool

#
# Endianess selection. Sufficiently obscure so many users don't know what to
# answer,so we try hard to limit the available choices. Also the use of a
Expand Down
2 changes: 1 addition & 1 deletion trunk/arch/mips/alchemy/common/platform.c
Original file line number Diff line number Diff line change
Expand Up @@ -492,7 +492,7 @@ static void __init alchemy_setup_macs(int ctype)
memcpy(au1xxx_eth0_platform_data.mac, ethaddr, 6);

ret = platform_device_register(&au1xxx_eth0_device);
if (ret)
if (!ret)
printk(KERN_INFO "Alchemy: failed to register MAC0\n");


Expand Down
22 changes: 8 additions & 14 deletions trunk/arch/mips/alchemy/common/power.c
Original file line number Diff line number Diff line change
Expand Up @@ -158,21 +158,15 @@ static void restore_core_regs(void)

void au_sleep(void)
{
save_core_regs();

switch (alchemy_get_cputype()) {
case ALCHEMY_CPU_AU1000:
case ALCHEMY_CPU_AU1500:
case ALCHEMY_CPU_AU1100:
alchemy_sleep_au1000();
break;
case ALCHEMY_CPU_AU1550:
case ALCHEMY_CPU_AU1200:
alchemy_sleep_au1550();
break;
int cpuid = alchemy_get_cputype();
if (cpuid != ALCHEMY_CPU_UNKNOWN) {
save_core_regs();
if (cpuid <= ALCHEMY_CPU_AU1500)
alchemy_sleep_au1000();
else if (cpuid <= ALCHEMY_CPU_AU1200)
alchemy_sleep_au1550();
restore_core_regs();
}

restore_core_regs();
}

#endif /* CONFIG_PM */
4 changes: 0 additions & 4 deletions trunk/arch/mips/alchemy/devboards/bcsr.c
Original file line number Diff line number Diff line change
Expand Up @@ -89,12 +89,8 @@ static void bcsr_csc_handler(unsigned int irq, struct irq_desc *d)
{
unsigned short bisr = __raw_readw(bcsr_virt + BCSR_REG_INTSTAT);

disable_irq_nosync(irq);

for ( ; bisr; bisr &= bisr - 1)
generic_handle_irq(bcsr_csc_base + __ffs(bisr));

enable_irq(irq);
}

/* NOTE: both the enable and mask bits must be cleared, otherwise the
Expand Down
7 changes: 7 additions & 0 deletions trunk/arch/mips/alchemy/devboards/db1200/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,13 @@ void __init board_setup(void)
unsigned long freq0, clksrc, div, pfc;
unsigned short whoami;

/* Set Config[OD] (disable overlapping bus transaction):
* This gets rid of a _lot_ of spurious interrupts (especially
* wrt. IDE); but incurs ~10% performance hit in some
* cpu-bound applications.
*/
set_c0_config(1 << 19);

bcsr_init(DB1200_BCSR_PHYS_ADDR,
DB1200_BCSR_PHYS_ADDR + DB1200_BCSR_HEXLED_OFS);

Expand Down
3 changes: 1 addition & 2 deletions trunk/arch/mips/ar7/irq.c
Original file line number Diff line number Diff line change
Expand Up @@ -98,8 +98,7 @@ static struct irq_chip ar7_sec_irq_type = {

static struct irqaction ar7_cascade_action = {
.handler = no_action,
.name = "AR7 cascade interrupt",
.flags = IRQF_NO_THREAD,
.name = "AR7 cascade interrupt"
};

static void __init ar7_irq_init(int base)
Expand Down
1 change: 0 additions & 1 deletion trunk/arch/mips/bcm63xx/irq.c
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,6 @@ static struct irq_chip bcm63xx_external_irq_chip = {
static struct irqaction cpu_ip2_cascade_action = {
.handler = no_action,
.name = "cascade_ip2",
.flags = IRQF_NO_THREAD,
};

void __init arch_init_irq(void)
Expand Down
1 change: 0 additions & 1 deletion trunk/arch/mips/cobalt/irq.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@ asmlinkage void plat_irq_dispatch(void)
static struct irqaction cascade = {
.handler = no_action,
.name = "cascade",
.flags = IRQF_NO_THREAD,
};

void __init arch_init_irq(void)
Expand Down
4 changes: 0 additions & 4 deletions trunk/arch/mips/dec/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -101,24 +101,20 @@ int cpu_fpu_mask = DEC_CPU_IRQ_MASK(DEC_CPU_INR_FPU);
static struct irqaction ioirq = {
.handler = no_action,
.name = "cascade",
.flags = IRQF_NO_THREAD,
};
static struct irqaction fpuirq = {
.handler = no_action,
.name = "fpu",
.flags = IRQF_NO_THREAD,
};

static struct irqaction busirq = {
.flags = IRQF_DISABLED,
.name = "bus error",
.flags = IRQF_NO_THREAD,
};

static struct irqaction haltirq = {
.handler = dec_intr_halt,
.name = "halt",
.flags = IRQF_NO_THREAD,
};


Expand Down
2 changes: 1 addition & 1 deletion trunk/arch/mips/emma/markeins/irq.c
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ void emma2rh_gpio_irq_init(void)

static struct irqaction irq_cascade = {
.handler = no_action,
.flags = IRQF_NO_THREAD,
.flags = 0,
.name = "cascade",
.dev_id = NULL,
.next = NULL,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@
#define cpu_has_mips_r2_exec_hazard 0
#define cpu_has_dsp 0
#define cpu_has_mipsmt 0
#define cpu_has_userlocal 0
#define cpu_has_vint 0
#define cpu_has_veic 0
#define cpu_hwrena_impl_bits 0xc0000000
Expand Down
1 change: 1 addition & 0 deletions trunk/arch/mips/include/asm/mach-powertv/dma-coherence.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#define __ASM_MACH_POWERTV_DMA_COHERENCE_H

#include <linux/sched.h>
#include <linux/version.h>
#include <linux/device.h>
#include <asm/mach-powertv/asic.h>

Expand Down
4 changes: 2 additions & 2 deletions trunk/arch/mips/include/asm/stackframe.h
Original file line number Diff line number Diff line change
Expand Up @@ -195,9 +195,9 @@
* to cover the pipeline delay.
*/
.set mips32
mfc0 k0, CP0_TCSTATUS
mfc0 v1, CP0_TCSTATUS
.set mips0
LONG_S k0, PT_TCSTATUS(sp)
LONG_S v1, PT_TCSTATUS(sp)
#endif /* CONFIG_MIPS_MT_SMTC */
LONG_S $4, PT_R4(sp)
LONG_S $5, PT_R5(sp)
Expand Down
52 changes: 30 additions & 22 deletions trunk/arch/mips/jz4740/gpio.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
#include <linux/init.h>

#include <linux/spinlock.h>
#include <linux/syscore_ops.h>
#include <linux/sysdev.h>
#include <linux/io.h>
#include <linux/gpio.h>
#include <linux/delay.h>
Expand Down Expand Up @@ -86,6 +86,7 @@ struct jz_gpio_chip {
spinlock_t lock;

struct gpio_chip gpio_chip;
struct sys_device sysdev;
};

static struct jz_gpio_chip jz4740_gpio_chips[];
Expand Down Expand Up @@ -458,47 +459,49 @@ static struct jz_gpio_chip jz4740_gpio_chips[] = {
JZ4740_GPIO_CHIP(D),
};

static void jz4740_gpio_suspend_chip(struct jz_gpio_chip *chip)
static inline struct jz_gpio_chip *sysdev_to_chip(struct sys_device *dev)
{
chip->suspend_mask = readl(chip->base + JZ_REG_GPIO_MASK);
writel(~(chip->wakeup), chip->base + JZ_REG_GPIO_MASK_SET);
writel(chip->wakeup, chip->base + JZ_REG_GPIO_MASK_CLEAR);
return container_of(dev, struct jz_gpio_chip, sysdev);
}

static int jz4740_gpio_suspend(void)
static int jz4740_gpio_suspend(struct sys_device *dev, pm_message_t state)
{
int i;
struct jz_gpio_chip *chip = sysdev_to_chip(dev);

for (i = 0; i < ARRAY_SIZE(jz4740_gpio_chips); i++)
jz4740_gpio_suspend_chip(&jz4740_gpio_chips[i]);
chip->suspend_mask = readl(chip->base + JZ_REG_GPIO_MASK);
writel(~(chip->wakeup), chip->base + JZ_REG_GPIO_MASK_SET);
writel(chip->wakeup, chip->base + JZ_REG_GPIO_MASK_CLEAR);

return 0;
}

static void jz4740_gpio_resume_chip(struct jz_gpio_chip *chip)
static int jz4740_gpio_resume(struct sys_device *dev)
{
struct jz_gpio_chip *chip = sysdev_to_chip(dev);
uint32_t mask = chip->suspend_mask;

writel(~mask, chip->base + JZ_REG_GPIO_MASK_CLEAR);
writel(mask, chip->base + JZ_REG_GPIO_MASK_SET);
}

static void jz4740_gpio_resume(void)
{
int i;

for (i = ARRAY_SIZE(jz4740_gpio_chips) - 1; i >= 0 ; i--)
jz4740_gpio_resume_chip(&jz4740_gpio_chips[i]);
return 0;
}

static struct syscore_ops jz4740_gpio_syscore_ops = {
static struct sysdev_class jz4740_gpio_sysdev_class = {
.name = "gpio",
.suspend = jz4740_gpio_suspend,
.resume = jz4740_gpio_resume,
};

static void jz4740_gpio_chip_init(struct jz_gpio_chip *chip, unsigned int id)
static int jz4740_gpio_chip_init(struct jz_gpio_chip *chip, unsigned int id)
{
int irq;
int ret, irq;

chip->sysdev.id = id;
chip->sysdev.cls = &jz4740_gpio_sysdev_class;
ret = sysdev_register(&chip->sysdev);

if (ret)
return ret;

spin_lock_init(&chip->lock);

Expand All @@ -516,17 +519,22 @@ static void jz4740_gpio_chip_init(struct jz_gpio_chip *chip, unsigned int id)
irq_set_chip_and_handler(irq, &jz_gpio_irq_chip,
handle_level_irq);
}

return 0;
}

static int __init jz4740_gpio_init(void)
{
unsigned int i;
int ret;

ret = sysdev_class_register(&jz4740_gpio_sysdev_class);
if (ret)
return ret;

for (i = 0; i < ARRAY_SIZE(jz4740_gpio_chips); ++i)
jz4740_gpio_chip_init(&jz4740_gpio_chips[i], i);

register_syscore_ops(&jz4740_gpio_syscore_ops);

printk(KERN_INFO "JZ4740 GPIO initialized\n");

return 0;
Expand Down
39 changes: 19 additions & 20 deletions trunk/arch/mips/kernel/ftrace.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,26 +19,6 @@

#include <asm-generic/sections.h>

#if defined(KBUILD_MCOUNT_RA_ADDRESS) && defined(CONFIG_32BIT)
#define MCOUNT_OFFSET_INSNS 5
#else
#define MCOUNT_OFFSET_INSNS 4
#endif

/*
* Check if the address is in kernel space
*
* Clone core_kernel_text() from kernel/extable.c, but doesn't call
* init_kernel_text() for Ftrace doesn't trace functions in init sections.
*/
static inline int in_kernel_space(unsigned long ip)
{
if (ip >= (unsigned long)_stext &&
ip <= (unsigned long)_etext)
return 1;
return 0;
}

#ifdef CONFIG_DYNAMIC_FTRACE

#define JAL 0x0c000000 /* jump & link: ip --> ra, jump to target */
Expand Down Expand Up @@ -74,6 +54,20 @@ static inline void ftrace_dyn_arch_init_insns(void)
#endif
}

/*
* Check if the address is in kernel space
*
* Clone core_kernel_text() from kernel/extable.c, but doesn't call
* init_kernel_text() for Ftrace doesn't trace functions in init sections.
*/
static inline int in_kernel_space(unsigned long ip)
{
if (ip >= (unsigned long)_stext &&
ip <= (unsigned long)_etext)
return 1;
return 0;
}

static int ftrace_modify_code(unsigned long ip, unsigned int new_code)
{
int faulted;
Expand Down Expand Up @@ -118,6 +112,11 @@ static int ftrace_modify_code(unsigned long ip, unsigned int new_code)
* 1: offset = 4 instructions
*/

#if defined(KBUILD_MCOUNT_RA_ADDRESS) && defined(CONFIG_32BIT)
#define MCOUNT_OFFSET_INSNS 5
#else
#define MCOUNT_OFFSET_INSNS 4
#endif
#define INSN_B_1F (0x10000000 | MCOUNT_OFFSET_INSNS)

int ftrace_make_nop(struct module *mod,
Expand Down
Loading

0 comments on commit 96d8d86

Please sign in to comment.