Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 156992
b: refs/heads/master
c: 4dfd79e
h: refs/heads/master
v: v3
  • Loading branch information
Linus Torvalds committed Aug 21, 2009
1 parent 3cba487 commit a003387
Show file tree
Hide file tree
Showing 12 changed files with 181 additions and 114 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: f779b3e513478218cbaaaa0a506d7801cab6fd14
refs/heads/master: 4dfd79e7b42bff334128907e28c3b41f1ef1cec8
3 changes: 3 additions & 0 deletions trunk/arch/x86/kernel/apic/ipi.c
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,9 @@ void default_send_IPI_mask_logical(const struct cpumask *cpumask, int vector)
unsigned long mask = cpumask_bits(cpumask)[0];
unsigned long flags;

if (WARN_ONCE(!mask, "empty IPI mask"))
return;

local_irq_save(flags);
WARN_ON(mask & ~cpumask_bits(cpu_online_mask)[0]);
__default_send_IPI_dest_field(mask, vector, apic->dest_logical);
Expand Down
21 changes: 10 additions & 11 deletions trunk/arch/x86/mm/tlb.c
Original file line number Diff line number Diff line change
Expand Up @@ -183,18 +183,17 @@ static void flush_tlb_others_ipi(const struct cpumask *cpumask,

f->flush_mm = mm;
f->flush_va = va;
cpumask_andnot(to_cpumask(f->flush_cpumask),
cpumask, cpumask_of(smp_processor_id()));

/*
* We have to send the IPI only to
* CPUs affected.
*/
apic->send_IPI_mask(to_cpumask(f->flush_cpumask),
INVALIDATE_TLB_VECTOR_START + sender);
if (cpumask_andnot(to_cpumask(f->flush_cpumask), cpumask, cpumask_of(smp_processor_id()))) {
/*
* We have to send the IPI only to
* CPUs affected.
*/
apic->send_IPI_mask(to_cpumask(f->flush_cpumask),
INVALIDATE_TLB_VECTOR_START + sender);

while (!cpumask_empty(to_cpumask(f->flush_cpumask)))
cpu_relax();
while (!cpumask_empty(to_cpumask(f->flush_cpumask)))
cpu_relax();
}

f->flush_mm = NULL;
f->flush_va = 0;
Expand Down
14 changes: 12 additions & 2 deletions trunk/drivers/i2c/busses/i2c-omap.c
Original file line number Diff line number Diff line change
Expand Up @@ -674,7 +674,14 @@ omap_i2c_isr(int this_irq, void *dev_id)

err = 0;
complete:
omap_i2c_write_reg(dev, OMAP_I2C_STAT_REG, stat);
/*
* Ack the stat in one go, but [R/X]DR and [R/X]RDY should be
* acked after the data operation is complete.
* Ref: TRM SWPU114Q Figure 18-31
*/
omap_i2c_write_reg(dev, OMAP_I2C_STAT_REG, stat &
~(OMAP_I2C_STAT_RRDY | OMAP_I2C_STAT_RDR |
OMAP_I2C_STAT_XRDY | OMAP_I2C_STAT_XDR));

if (stat & OMAP_I2C_STAT_NACK) {
err |= OMAP_I2C_STAT_NACK;
Expand All @@ -687,6 +694,9 @@ omap_i2c_isr(int this_irq, void *dev_id)
}
if (stat & (OMAP_I2C_STAT_ARDY | OMAP_I2C_STAT_NACK |
OMAP_I2C_STAT_AL)) {
omap_i2c_ack_stat(dev, stat &
(OMAP_I2C_STAT_RRDY | OMAP_I2C_STAT_RDR |
OMAP_I2C_STAT_XRDY | OMAP_I2C_STAT_XDR));
omap_i2c_complete_cmd(dev, err);
return IRQ_HANDLED;
}
Expand Down Expand Up @@ -774,7 +784,7 @@ omap_i2c_isr(int this_irq, void *dev_id)
* memory to the I2C interface.
*/

if (cpu_is_omap34xx()) {
if (dev->rev <= OMAP_I2C_REV_ON_3430) {
while (!(stat & OMAP_I2C_STAT_XUDF)) {
if (stat & (OMAP_I2C_STAT_NACK | OMAP_I2C_STAT_AL)) {
omap_i2c_ack_stat(dev, stat & (OMAP_I2C_STAT_XRDY | OMAP_I2C_STAT_XDR));
Expand Down
Loading

0 comments on commit a003387

Please sign in to comment.