Merge branch 'linus' into cpus4096
Conflicts: arch/x86/xen/smp.c kernel/sched_rt.c net/iucv/iucv.c Signed-off-by: Ingo Molnar <mingo@elte.hu>
这个提交包含在:
@@ -531,7 +531,7 @@ void ehca_process_eq(struct ehca_shca *shca, int is_irq)
|
||||
{
|
||||
struct ehca_eq *eq = &shca->eq;
|
||||
struct ehca_eqe_cache_entry *eqe_cache = eq->eqe_cache;
|
||||
u64 eqe_value;
|
||||
u64 eqe_value, ret;
|
||||
unsigned long flags;
|
||||
int eqe_cnt, i;
|
||||
int eq_empty = 0;
|
||||
@@ -583,8 +583,13 @@ void ehca_process_eq(struct ehca_shca *shca, int is_irq)
|
||||
ehca_dbg(&shca->ib_device,
|
||||
"No eqe found for irq event");
|
||||
goto unlock_irq_spinlock;
|
||||
} else if (!is_irq)
|
||||
} else if (!is_irq) {
|
||||
ret = hipz_h_eoi(eq->ist);
|
||||
if (ret != H_SUCCESS)
|
||||
ehca_err(&shca->ib_device,
|
||||
"bad return code EOI -rc = %ld\n", ret);
|
||||
ehca_dbg(&shca->ib_device, "deadman found %x eqe", eqe_cnt);
|
||||
}
|
||||
if (unlikely(eqe_cnt == EHCA_EQE_CACHE_SIZE))
|
||||
ehca_dbg(&shca->ib_device, "too many eqes for one irq event");
|
||||
/* enable irq for new packets */
|
||||
|
@@ -923,6 +923,7 @@ static struct of_device_id ehca_device_table[] =
|
||||
},
|
||||
{},
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, ehca_device_table);
|
||||
|
||||
static struct of_platform_driver ehca_driver = {
|
||||
.name = "ehca",
|
||||
|
@@ -544,8 +544,16 @@ int ehca_post_recv(struct ib_qp *qp,
|
||||
struct ib_recv_wr *recv_wr,
|
||||
struct ib_recv_wr **bad_recv_wr)
|
||||
{
|
||||
return internal_post_recv(container_of(qp, struct ehca_qp, ib_qp),
|
||||
qp->device, recv_wr, bad_recv_wr);
|
||||
struct ehca_qp *my_qp = container_of(qp, struct ehca_qp, ib_qp);
|
||||
|
||||
/* Reject WR if QP is in RESET state */
|
||||
if (unlikely(my_qp->state == IB_QPS_RESET)) {
|
||||
ehca_err(qp->device, "Invalid QP state qp_state=%d qpn=%x",
|
||||
my_qp->state, qp->qp_num);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return internal_post_recv(my_qp, qp->device, recv_wr, bad_recv_wr);
|
||||
}
|
||||
|
||||
int ehca_post_srq_recv(struct ib_srq *srq,
|
||||
@@ -681,7 +689,7 @@ poll_cq_one_read_cqe:
|
||||
wc->dlid_path_bits = cqe->dlid;
|
||||
wc->src_qp = cqe->remote_qp_number;
|
||||
wc->wc_flags = cqe->w_completion_flags;
|
||||
wc->imm_data = cpu_to_be32(cqe->immediate_data);
|
||||
wc->ex.imm_data = cpu_to_be32(cqe->immediate_data);
|
||||
wc->sl = cqe->service_level;
|
||||
|
||||
poll_cq_one_exit0:
|
||||
|
@@ -933,3 +933,13 @@ u64 hipz_h_error_data(const struct ipz_adapter_handle adapter_handle,
|
||||
r_cb,
|
||||
0, 0, 0, 0);
|
||||
}
|
||||
|
||||
u64 hipz_h_eoi(int irq)
|
||||
{
|
||||
unsigned long xirr;
|
||||
|
||||
iosync();
|
||||
xirr = (0xffULL << 24) | irq;
|
||||
|
||||
return plpar_hcall_norets(H_EOI, xirr);
|
||||
}
|
||||
|
@@ -260,5 +260,6 @@ u64 hipz_h_error_data(const struct ipz_adapter_handle adapter_handle,
|
||||
const u64 ressource_handle,
|
||||
void *rblock,
|
||||
unsigned long *byte_count);
|
||||
u64 hipz_h_eoi(int irq);
|
||||
|
||||
#endif /* __HCP_IF_H__ */
|
||||
|
在新工单中引用
屏蔽一个用户