Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 218625
b: refs/heads/master
c: 17bb51d
h: refs/heads/master
i:
  218623: b377a33
v: v3
  • Loading branch information
Linus Torvalds committed Oct 28, 2010
1 parent 07da9e8 commit ef871b4
Show file tree
Hide file tree
Showing 169 changed files with 4,152 additions and 1,939 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: 95aac7b1cd224f568fb83937044cd303ff11b029
refs/heads/master: 17bb51d56cdc8cbf252031db3107de034cfeb44c
18 changes: 0 additions & 18 deletions trunk/Documentation/networking/phy.txt
Original file line number Diff line number Diff line change
Expand Up @@ -177,18 +177,6 @@ Doing it all yourself

A convenience function to print out the PHY status neatly.

int phy_clear_interrupt(struct phy_device *phydev);
int phy_config_interrupt(struct phy_device *phydev, u32 interrupts);

Clear the PHY's interrupt, and configure which ones are allowed,
respectively. Currently only supports all on, or all off.

int phy_enable_interrupts(struct phy_device *phydev);
int phy_disable_interrupts(struct phy_device *phydev);

Functions which enable/disable PHY interrupts, clearing them
before and after, respectively.

int phy_start_interrupts(struct phy_device *phydev);
int phy_stop_interrupts(struct phy_device *phydev);

Expand All @@ -213,12 +201,6 @@ Doing it all yourself
Fills the phydev structure with up-to-date information about the current
settings in the PHY.

void phy_sanitize_settings(struct phy_device *phydev)

Resolves differences between currently desired settings, and
supported settings for the given PHY device. Does not make
the changes in the hardware, though.

int phy_ethtool_sset(struct phy_device *phydev, struct ethtool_cmd *cmd);
int phy_ethtool_gset(struct phy_device *phydev, struct ethtool_cmd *cmd);

Expand Down
1 change: 1 addition & 0 deletions trunk/arch/x86/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -347,6 +347,7 @@ endif

config X86_VSMP
bool "ScaleMP vSMP"
select PARAVIRT_GUEST
select PARAVIRT
depends on X86_64 && PCI
depends on X86_EXTENDED_PLATFORM
Expand Down
2 changes: 0 additions & 2 deletions trunk/arch/x86/include/asm/irq.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,8 @@ static inline int irq_canonicalize(int irq)

#ifdef CONFIG_X86_32
extern void irq_ctx_init(int cpu);
extern void irq_ctx_exit(int cpu);
#else
# define irq_ctx_init(cpu) do { } while (0)
# define irq_ctx_exit(cpu) do { } while (0)
#endif

#define __ARCH_HAS_DO_SOFTIRQ
Expand Down
9 changes: 7 additions & 2 deletions trunk/arch/x86/include/asm/smp.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ struct smp_ops {
void (*smp_prepare_cpus)(unsigned max_cpus);
void (*smp_cpus_done)(unsigned max_cpus);

void (*smp_send_stop)(void);
void (*stop_other_cpus)(int wait);
void (*smp_send_reschedule)(int cpu);

int (*cpu_up)(unsigned cpu);
Expand All @@ -73,7 +73,12 @@ extern struct smp_ops smp_ops;

static inline void smp_send_stop(void)
{
smp_ops.smp_send_stop();
smp_ops.stop_other_cpus(0);
}

static inline void stop_other_cpus(void)
{
smp_ops.stop_other_cpus(1);
}

static inline void smp_prepare_boot_cpu(void)
Expand Down
6 changes: 3 additions & 3 deletions trunk/arch/x86/kernel/dumpstack_32.c
Original file line number Diff line number Diff line change
Expand Up @@ -82,11 +82,11 @@ show_stack_log_lvl(struct task_struct *task, struct pt_regs *regs,
if (kstack_end(stack))
break;
if (i && ((i % STACKSLOTS_PER_LINE) == 0))
printk("\n%s", log_lvl);
printk(" %08lx", *stack++);
printk(KERN_CONT "\n");
printk(KERN_CONT " %08lx", *stack++);
touch_nmi_watchdog();
}
printk("\n");
printk(KERN_CONT "\n");
show_trace_log_lvl(task, regs, sp, bp, log_lvl);
}

Expand Down
8 changes: 4 additions & 4 deletions trunk/arch/x86/kernel/dumpstack_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -265,20 +265,20 @@ show_stack_log_lvl(struct task_struct *task, struct pt_regs *regs,
if (stack >= irq_stack && stack <= irq_stack_end) {
if (stack == irq_stack_end) {
stack = (unsigned long *) (irq_stack_end[-1]);
printk(" <EOI> ");
printk(KERN_CONT " <EOI> ");
}
} else {
if (((long) stack & (THREAD_SIZE-1)) == 0)
break;
}
if (i && ((i % STACKSLOTS_PER_LINE) == 0))
printk("\n%s", log_lvl);
printk(" %016lx", *stack++);
printk(KERN_CONT "\n");
printk(KERN_CONT " %016lx", *stack++);
touch_nmi_watchdog();
}
preempt_enable();

printk("\n");
printk(KERN_CONT "\n");
show_trace_log_lvl(task, regs, sp, bp, log_lvl);
}

Expand Down
12 changes: 2 additions & 10 deletions trunk/arch/x86/kernel/irq_32.c
Original file line number Diff line number Diff line change
Expand Up @@ -60,9 +60,6 @@ union irq_ctx {
static DEFINE_PER_CPU(union irq_ctx *, hardirq_ctx);
static DEFINE_PER_CPU(union irq_ctx *, softirq_ctx);

static DEFINE_PER_CPU_MULTIPAGE_ALIGNED(union irq_ctx, hardirq_stack, THREAD_SIZE);
static DEFINE_PER_CPU_MULTIPAGE_ALIGNED(union irq_ctx, softirq_stack, THREAD_SIZE);

static void call_on_stack(void *func, void *stack)
{
asm volatile("xchgl %%ebx,%%esp \n"
Expand Down Expand Up @@ -128,7 +125,7 @@ void __cpuinit irq_ctx_init(int cpu)
if (per_cpu(hardirq_ctx, cpu))
return;

irqctx = &per_cpu(hardirq_stack, cpu);
irqctx = (union irq_ctx *)__get_free_pages(THREAD_FLAGS, THREAD_ORDER);
irqctx->tinfo.task = NULL;
irqctx->tinfo.exec_domain = NULL;
irqctx->tinfo.cpu = cpu;
Expand All @@ -137,7 +134,7 @@ void __cpuinit irq_ctx_init(int cpu)

per_cpu(hardirq_ctx, cpu) = irqctx;

irqctx = &per_cpu(softirq_stack, cpu);
irqctx = (union irq_ctx *)__get_free_pages(THREAD_FLAGS, THREAD_ORDER);
irqctx->tinfo.task = NULL;
irqctx->tinfo.exec_domain = NULL;
irqctx->tinfo.cpu = cpu;
Expand All @@ -150,11 +147,6 @@ void __cpuinit irq_ctx_init(int cpu)
cpu, per_cpu(hardirq_ctx, cpu), per_cpu(softirq_ctx, cpu));
}

void irq_ctx_exit(int cpu)
{
per_cpu(hardirq_ctx, cpu) = NULL;
}

asmlinkage void do_softirq(void)
{
unsigned long flags;
Expand Down
2 changes: 1 addition & 1 deletion trunk/arch/x86/kernel/reboot.c
Original file line number Diff line number Diff line change
Expand Up @@ -635,7 +635,7 @@ void native_machine_shutdown(void)
/* O.K Now that I'm on the appropriate processor,
* stop all of the others.
*/
smp_send_stop();
stop_other_cpus();
#endif

lapic_shutdown();
Expand Down
15 changes: 9 additions & 6 deletions trunk/arch/x86/kernel/smp.c
Original file line number Diff line number Diff line change
Expand Up @@ -159,10 +159,10 @@ asmlinkage void smp_reboot_interrupt(void)
irq_exit();
}

static void native_smp_send_stop(void)
static void native_stop_other_cpus(int wait)
{
unsigned long flags;
unsigned long wait;
unsigned long timeout;

if (reboot_force)
return;
Expand All @@ -179,9 +179,12 @@ static void native_smp_send_stop(void)
if (num_online_cpus() > 1) {
apic->send_IPI_allbutself(REBOOT_VECTOR);

/* Don't wait longer than a second */
wait = USEC_PER_SEC;
while (num_online_cpus() > 1 && wait--)
/*
* Don't wait longer than a second if the caller
* didn't ask us to wait.
*/
timeout = USEC_PER_SEC;
while (num_online_cpus() > 1 && (wait || timeout--))
udelay(1);
}

Expand Down Expand Up @@ -227,7 +230,7 @@ struct smp_ops smp_ops = {
.smp_prepare_cpus = native_smp_prepare_cpus,
.smp_cpus_done = native_smp_cpus_done,

.smp_send_stop = native_smp_send_stop,
.stop_other_cpus = native_stop_other_cpus,
.smp_send_reschedule = native_smp_send_reschedule,

.cpu_up = native_cpu_up,
Expand Down
1 change: 0 additions & 1 deletion trunk/arch/x86/kernel/smpboot.c
Original file line number Diff line number Diff line change
Expand Up @@ -1373,7 +1373,6 @@ void play_dead_common(void)
{
idle_task_exit();
reset_lazy_tlbstate();
irq_ctx_exit(raw_smp_processor_id());
c1e_remove_cpu(raw_smp_processor_id());

mb();
Expand Down
2 changes: 1 addition & 1 deletion trunk/arch/x86/xen/enlighten.c
Original file line number Diff line number Diff line change
Expand Up @@ -1015,7 +1015,7 @@ static void xen_reboot(int reason)
struct sched_shutdown r = { .reason = reason };

#ifdef CONFIG_SMP
smp_send_stop();
stop_other_cpus();
#endif

if (HYPERVISOR_sched_op(SCHEDOP_shutdown, &r))
Expand Down
6 changes: 3 additions & 3 deletions trunk/arch/x86/xen/smp.c
Original file line number Diff line number Diff line change
Expand Up @@ -400,9 +400,9 @@ static void stop_self(void *v)
BUG();
}

static void xen_smp_send_stop(void)
static void xen_stop_other_cpus(int wait)
{
smp_call_function(stop_self, NULL, 0);
smp_call_function(stop_self, NULL, wait);
}

static void xen_smp_send_reschedule(int cpu)
Expand Down Expand Up @@ -470,7 +470,7 @@ static const struct smp_ops xen_smp_ops __initdata = {
.cpu_disable = xen_cpu_disable,
.play_dead = xen_play_dead,

.smp_send_stop = xen_smp_send_stop,
.stop_other_cpus = xen_stop_other_cpus,
.smp_send_reschedule = xen_smp_send_reschedule,

.send_call_func_ipi = xen_smp_send_call_function_ipi,
Expand Down
7 changes: 4 additions & 3 deletions trunk/drivers/atm/eni.c
Original file line number Diff line number Diff line change
Expand Up @@ -1736,9 +1736,10 @@ static int __devinit eni_do_init(struct atm_dev *dev)
eprom = (base+EPROM_SIZE-sizeof(struct midway_eprom));
if (readl(&eprom->magic) != ENI155_MAGIC) {
printk("\n");
printk(KERN_ERR KERN_ERR DEV_LABEL "(itf %d): bad "
"magic - expected 0x%x, got 0x%x\n",dev->number,
ENI155_MAGIC,(unsigned) readl(&eprom->magic));
printk(KERN_ERR DEV_LABEL
"(itf %d): bad magic - expected 0x%x, got 0x%x\n",
dev->number, ENI155_MAGIC,
(unsigned)readl(&eprom->magic));
error = -EINVAL;
goto unmap;
}
Expand Down
75 changes: 8 additions & 67 deletions trunk/drivers/connector/cn_queue.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,48 +31,6 @@
#include <linux/connector.h>
#include <linux/delay.h>


/*
* This job is sent to the kevent workqueue.
* While no event is once sent to any callback, the connector workqueue
* is not created to avoid a useless waiting kernel task.
* Once the first event is received, we create this dedicated workqueue which
* is necessary because the flow of data can be high and we don't want
* to encumber keventd with that.
*/
static void cn_queue_create(struct work_struct *work)
{
struct cn_queue_dev *dev;

dev = container_of(work, struct cn_queue_dev, wq_creation);

dev->cn_queue = create_singlethread_workqueue(dev->name);
/* If we fail, we will use keventd for all following connector jobs */
WARN_ON(!dev->cn_queue);
}

/*
* Queue a data sent to a callback.
* If the connector workqueue is already created, we queue the job on it.
* Otherwise, we queue the job to kevent and queue the connector workqueue
* creation too.
*/
int queue_cn_work(struct cn_callback_entry *cbq, struct work_struct *work)
{
struct cn_queue_dev *pdev = cbq->pdev;

if (likely(pdev->cn_queue))
return queue_work(pdev->cn_queue, work);

/* Don't create the connector workqueue twice */
if (atomic_inc_return(&pdev->wq_requested) == 1)
schedule_work(&pdev->wq_creation);
else
atomic_dec(&pdev->wq_requested);

return schedule_work(work);
}

void cn_queue_wrapper(struct work_struct *work)
{
struct cn_callback_entry *cbq =
Expand Down Expand Up @@ -111,11 +69,7 @@ cn_queue_alloc_callback_entry(char *name, struct cb_id *id,

static void cn_queue_free_callback(struct cn_callback_entry *cbq)
{
/* The first jobs have been sent to kevent, flush them too */
flush_scheduled_work();
if (cbq->pdev->cn_queue)
flush_workqueue(cbq->pdev->cn_queue);

flush_workqueue(cbq->pdev->cn_queue);
kfree(cbq);
}

Expand Down Expand Up @@ -193,37 +147,24 @@ struct cn_queue_dev *cn_queue_alloc_dev(char *name, struct sock *nls)
atomic_set(&dev->refcnt, 0);
INIT_LIST_HEAD(&dev->queue_list);
spin_lock_init(&dev->queue_lock);
init_waitqueue_head(&dev->wq_created);

dev->nls = nls;

INIT_WORK(&dev->wq_creation, cn_queue_create);
dev->cn_queue = alloc_ordered_workqueue(dev->name, 0);
if (!dev->cn_queue) {
kfree(dev);
return NULL;
}

return dev;
}

void cn_queue_free_dev(struct cn_queue_dev *dev)
{
struct cn_callback_entry *cbq, *n;
long timeout;
DEFINE_WAIT(wait);

/* Flush the first pending jobs queued on kevent */
flush_scheduled_work();

/* If the connector workqueue creation is still pending, wait for it */
prepare_to_wait(&dev->wq_created, &wait, TASK_UNINTERRUPTIBLE);
if (atomic_read(&dev->wq_requested) && !dev->cn_queue) {
timeout = schedule_timeout(HZ * 2);
if (!timeout && !dev->cn_queue)
WARN_ON(1);
}
finish_wait(&dev->wq_created, &wait);

if (dev->cn_queue) {
flush_workqueue(dev->cn_queue);
destroy_workqueue(dev->cn_queue);
}
flush_workqueue(dev->cn_queue);
destroy_workqueue(dev->cn_queue);

spin_lock_bh(&dev->queue_lock);
list_for_each_entry_safe(cbq, n, &dev->queue_list, callback_entry)
Expand Down
9 changes: 4 additions & 5 deletions trunk/drivers/connector/connector.c
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,8 @@ static int cn_call_callback(struct sk_buff *skb)
__cbq->data.skb == NULL)) {
__cbq->data.skb = skb;

if (queue_cn_work(__cbq, &__cbq->work))
if (queue_work(dev->cbdev->cn_queue,
&__cbq->work))
err = 0;
else
err = -EINVAL;
Expand All @@ -148,13 +149,11 @@ static int cn_call_callback(struct sk_buff *skb)
d->callback = __cbq->data.callback;
d->free = __new_cbq;

__new_cbq->pdev = __cbq->pdev;

INIT_WORK(&__new_cbq->work,
&cn_queue_wrapper);

if (queue_cn_work(__new_cbq,
&__new_cbq->work))
if (queue_work(dev->cbdev->cn_queue,
&__new_cbq->work))
err = 0;
else {
kfree(__new_cbq);
Expand Down
2 changes: 1 addition & 1 deletion trunk/drivers/isdn/hardware/mISDN/mISDNinfineon.c
Original file line number Diff line number Diff line change
Expand Up @@ -563,7 +563,7 @@ reset_inf(struct inf_hw *hw)
mdelay(10);
hw->ipac.isac.adf2 = 0x87;
hw->ipac.hscx[0].slot = 0x1f;
hw->ipac.hscx[0].slot = 0x23;
hw->ipac.hscx[1].slot = 0x23;
break;
case INF_GAZEL_R753:
val = inl((u32)hw->cfg.start + GAZEL_CNTRL);
Expand Down
Loading

0 comments on commit ef871b4

Please sign in to comment.