mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 02:32:09 -04:00
Remove Mysterious Macro Intended to Obscure Weird Behaviours (mmiowb())
Remove mmiowb() from the kernel memory barrier API and instead, for architectures that need it, hide the barrier inside spin_unlock() when MMIO has been performed inside the critical section. -----BEGIN PGP SIGNATURE----- iQEzBAABCgAdFiEEPxTL6PPUbjXGY88ct6xw3ITBYzQFAlzMFaUACgkQt6xw3ITB YzRICQgAiv7wF/yIbBhDOmCNCAKDO59chvFQWxXWdGk/aAB56kwKAMXJgLOvlMG/ VRuuLyParTFQETC3jaxKgnO/1hb+PZLDt2Q2KqixtjIzBypKUPWvK2sf6THhSRF1 GK0DBVUd1rCrWrR815+SPb8el4xXtdBzvAVB+Fx35PXVNpdRdqCkK+EQ6UnXGokm rXXHbnfsnquBDtmb4CR4r2beH+aNElXbdt0Kj8VcE5J7f7jTdW3z6Q9WFRvdKmK7 yrsxXXB2w/EsWXOwFp0SLTV5+fgeGgTvv8uLjDw+SG6t0E0PebxjNAflT7dPrbYL WecjKC9WqBxrGY+4ew6YJP70ijLBCw== =aC8m -----END PGP SIGNATURE----- Merge tag 'arm64-mmiowb' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux Pull mmiowb removal from Will Deacon: "Remove Mysterious Macro Intended to Obscure Weird Behaviours (mmiowb()) Remove mmiowb() from the kernel memory barrier API and instead, for architectures that need it, hide the barrier inside spin_unlock() when MMIO has been performed inside the critical section. The only relatively recent changes have been addressing review comments on the documentation, which is in a much better shape thanks to the efforts of Ben and Ingo. I was initially planning to split this into two pull requests so that you could run the coccinelle script yourself, however it's been plain sailing in linux-next so I've just included the whole lot here to keep things simple" * tag 'arm64-mmiowb' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux: (23 commits) docs/memory-barriers.txt: Update I/O section to be clearer about CPU vs thread docs/memory-barriers.txt: Fix style, spacing and grammar in I/O section arch: Remove dummy mmiowb() definitions from arch code net/ethernet/silan/sc92031: Remove stale comment about mmiowb() i40iw: Redefine i40iw_mmiowb() to do nothing scsi/qla1280: Remove stale comment about mmiowb() drivers: Remove explicit invocations of mmiowb() drivers: Remove useless trailing comments from mmiowb() invocations Documentation: Kill all references to mmiowb() riscv/mmiowb: Hook up mmwiob() implementation to asm-generic code powerpc/mmiowb: Hook up mmwiob() implementation to asm-generic code ia64/mmiowb: Add unconditional mmiowb() to arch_spin_unlock() mips/mmiowb: Add unconditional mmiowb() to arch_spin_unlock() sh/mmiowb: Add unconditional mmiowb() to arch_spin_unlock() m68k/io: Remove useless definition of mmiowb() nds32/io: Remove useless definition of mmiowb() x86/io: Remove useless definition of mmiowb() arm64/io: Remove useless definition of mmiowb() ARM/io: Remove useless definition of mmiowb() mmiowb: Hook up mmiowb helpers to spinlocks and generic I/O accessors ...
This commit is contained in:
commit
dd4e5d6106
181 changed files with 343 additions and 828 deletions
|
|
@ -62,8 +62,7 @@ void bfa_isr_unhandled(struct bfa_s *bfa, struct bfi_msg_s *m);
|
|||
((__bfa)->iocfc.cfg.drvcfg.num_reqq_elems - 1); \
|
||||
writel((__bfa)->iocfc.req_cq_pi[__reqq], \
|
||||
(__bfa)->iocfc.bfa_regs.cpe_q_pi[__reqq]); \
|
||||
mmiowb(); \
|
||||
} while (0)
|
||||
} while (0)
|
||||
|
||||
#define bfa_rspq_pi(__bfa, __rspq) \
|
||||
(*(u32 *)((__bfa)->iocfc.rsp_cq_shadow_pi[__rspq].kva))
|
||||
|
|
|
|||
|
|
@ -61,7 +61,6 @@ bfa_hwcb_rspq_ack_msix(struct bfa_s *bfa, int rspq, u32 ci)
|
|||
|
||||
bfa_rspq_ci(bfa, rspq) = ci;
|
||||
writel(ci, bfa->iocfc.bfa_regs.rme_q_ci[rspq]);
|
||||
mmiowb();
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -72,7 +71,6 @@ bfa_hwcb_rspq_ack(struct bfa_s *bfa, int rspq, u32 ci)
|
|||
|
||||
bfa_rspq_ci(bfa, rspq) = ci;
|
||||
writel(ci, bfa->iocfc.bfa_regs.rme_q_ci[rspq]);
|
||||
mmiowb();
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -81,7 +81,6 @@ bfa_hwct_rspq_ack(struct bfa_s *bfa, int rspq, u32 ci)
|
|||
|
||||
bfa_rspq_ci(bfa, rspq) = ci;
|
||||
writel(ci, bfa->iocfc.bfa_regs.rme_q_ci[rspq]);
|
||||
mmiowb();
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -94,7 +93,6 @@ bfa_hwct2_rspq_ack(struct bfa_s *bfa, int rspq, u32 ci)
|
|||
{
|
||||
bfa_rspq_ci(bfa, rspq) = ci;
|
||||
writel(ci, bfa->iocfc.bfa_regs.rme_q_ci[rspq]);
|
||||
mmiowb();
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -991,7 +991,6 @@ void bnx2fc_arm_cq(struct bnx2fc_rport *tgt)
|
|||
FCOE_CQE_TOGGLE_BIT_SHIFT);
|
||||
msg = *((u32 *)rx_db);
|
||||
writel(cpu_to_le32(msg), tgt->ctx_base);
|
||||
mmiowb();
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -1409,7 +1408,6 @@ void bnx2fc_ring_doorbell(struct bnx2fc_rport *tgt)
|
|||
(tgt->sq_curr_toggle_bit << 15);
|
||||
msg = *((u32 *)sq_db);
|
||||
writel(cpu_to_le32(msg), tgt->ctx_base);
|
||||
mmiowb();
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -253,7 +253,6 @@ void bnx2i_put_rq_buf(struct bnx2i_conn *bnx2i_conn, int count)
|
|||
writew(ep->qp.rq_prod_idx,
|
||||
ep->qp.ctx_base + CNIC_RECV_DOORBELL);
|
||||
}
|
||||
mmiowb();
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -279,8 +278,6 @@ static void bnx2i_ring_sq_dbell(struct bnx2i_conn *bnx2i_conn, int count)
|
|||
bnx2i_ring_577xx_doorbell(bnx2i_conn);
|
||||
} else
|
||||
writew(count, ep->qp.ctx_base + CNIC_SEND_DOORBELL);
|
||||
|
||||
mmiowb(); /* flush posted PCI writes */
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -815,7 +815,6 @@ megasas_fire_cmd_skinny(struct megasas_instance *instance,
|
|||
&(regs)->inbound_high_queue_port);
|
||||
writel((lower_32_bits(frame_phys_addr) | (frame_count<<1))|1,
|
||||
&(regs)->inbound_low_queue_port);
|
||||
mmiowb();
|
||||
spin_unlock_irqrestore(&instance->hba_lock, flags);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -242,7 +242,6 @@ megasas_fire_cmd_fusion(struct megasas_instance *instance,
|
|||
&instance->reg_set->inbound_low_queue_port);
|
||||
writel(le32_to_cpu(req_desc->u.high),
|
||||
&instance->reg_set->inbound_high_queue_port);
|
||||
mmiowb();
|
||||
spin_unlock_irqrestore(&instance->hba_lock, flags);
|
||||
#endif
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3333,7 +3333,6 @@ _base_mpi_ep_writeq(__u64 b, volatile void __iomem *addr,
|
|||
spin_lock_irqsave(writeq_lock, flags);
|
||||
__raw_writel((u32)(b), addr);
|
||||
__raw_writel((u32)(b >> 32), (addr + 4));
|
||||
mmiowb();
|
||||
spin_unlock_irqrestore(writeq_lock, flags);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -807,7 +807,6 @@ void qedf_ring_doorbell(struct qedf_rport *fcport)
|
|||
writel(*(u32 *)&dbell, fcport->p_doorbell);
|
||||
/* Make sure SQ index is updated so f/w prcesses requests in order */
|
||||
wmb();
|
||||
mmiowb();
|
||||
}
|
||||
|
||||
static void qedf_trace_io(struct qedf_rport *fcport, struct qedf_ioreq *io_req,
|
||||
|
|
|
|||
|
|
@ -985,7 +985,6 @@ static void qedi_ring_doorbell(struct qedi_conn *qedi_conn)
|
|||
* others they are two different assembly operations.
|
||||
*/
|
||||
wmb();
|
||||
mmiowb();
|
||||
QEDI_INFO(&qedi_conn->qedi->dbg_ctx, QEDI_LOG_MP_REQ,
|
||||
"prod_idx=0x%x, fw_prod_idx=0x%x, cid=0x%x\n",
|
||||
qedi_conn->ep->sq_prod_idx, qedi_conn->ep->fw_sq_prod_idx,
|
||||
|
|
|
|||
|
|
@ -3004,8 +3004,6 @@ qla1280_64bit_start_scsi(struct scsi_qla_host *ha, struct srb * sp)
|
|||
sp->flags |= SRB_SENT;
|
||||
ha->actthreads++;
|
||||
WRT_REG_WORD(®->mailbox4, ha->req_ring_index);
|
||||
/* Enforce mmio write ordering; see comment in qla1280_isp_cmd(). */
|
||||
mmiowb();
|
||||
|
||||
out:
|
||||
if (status)
|
||||
|
|
@ -3254,8 +3252,6 @@ qla1280_32bit_start_scsi(struct scsi_qla_host *ha, struct srb * sp)
|
|||
sp->flags |= SRB_SENT;
|
||||
ha->actthreads++;
|
||||
WRT_REG_WORD(®->mailbox4, ha->req_ring_index);
|
||||
/* Enforce mmio write ordering; see comment in qla1280_isp_cmd(). */
|
||||
mmiowb();
|
||||
|
||||
out:
|
||||
if (status)
|
||||
|
|
@ -3367,19 +3363,8 @@ qla1280_isp_cmd(struct scsi_qla_host *ha)
|
|||
|
||||
/*
|
||||
* Update request index to mailbox4 (Request Queue In).
|
||||
* The mmiowb() ensures that this write is ordered with writes by other
|
||||
* CPUs. Without the mmiowb(), it is possible for the following:
|
||||
* CPUA posts write of index 5 to mailbox4
|
||||
* CPUA releases host lock
|
||||
* CPUB acquires host lock
|
||||
* CPUB posts write of index 6 to mailbox4
|
||||
* On PCI bus, order reverses and write of 6 posts, then index 5,
|
||||
* causing chip to issue full queue of stale commands
|
||||
* The mmiowb() prevents future writes from crossing the barrier.
|
||||
* See Documentation/driver-api/device-io.rst for more information.
|
||||
*/
|
||||
WRT_REG_WORD(®->mailbox4, ha->req_ring_index);
|
||||
mmiowb();
|
||||
|
||||
LEAVE("qla1280_isp_cmd");
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue