u8 status;
u16 slid = in_wc ? in_wc->recv.ud.remote_lid : cl_ntoh16(IB_LID_PERMISSIVE);
- HCA_PRINT( TRACE_LEVEL_VERBOSE ,HCA_DBG_MAD ,("mthca_process_mad: \n\tin: Class %02x, Method %02x, AttrId %x, AttrMod %x, ClSpec %x, Tid %I64x\n",
+ HCA_PRINT( TRACE_LEVEL_VERBOSE ,HCA_DBG_MAD ,("mthca_process_mad: in: Class %02x, Method %02x, AttrId %x, AttrMod %x, ClSpec %x, Tid %I64x\n",
(u32)in_mad->mad_hdr.mgmt_class, (u32)in_mad->mad_hdr.method,
(u32)in_mad->mad_hdr.attr_id, in_mad->mad_hdr.attr_mod,
(u32)in_mad->mad_hdr.class_specific, in_mad->mad_hdr.tid ));
if (!out_mad->mad_hdr.status)
smp_snoop(ibdev, port_num, in_mad);
- HCA_PRINT( TRACE_LEVEL_VERBOSE ,HCA_DBG_MAD,("mthca_process_mad: \n\tout: Class %02x, Method %02x, AttrId %x, AttrMod %x, ClSpec %x, Tid %I64x, Status %x\n",
+ HCA_PRINT( TRACE_LEVEL_VERBOSE ,HCA_DBG_MAD,("mthca_process_mad: out: Class %02x, Method %02x, AttrId %x, AttrMod %x, ClSpec %x, Tid %I64x, Status %x\n",
(u32)in_mad->mad_hdr.mgmt_class, (u32)in_mad->mad_hdr.method,
(u32)in_mad->mad_hdr.attr_id, in_mad->mad_hdr.attr_mod,
(u32)in_mad->mad_hdr.class_specific, in_mad->mad_hdr.tid,
if (err)
goto err_mt_alloc;
+ // secure memory
+ if (!pd->ucontext)
+ goto done;
+ __try {
+ mr->secure_handle = MmSecureVirtualMemory ( vaddr, (SIZE_T)length,
+ (acc & ~MTHCA_ACCESS_REMOTE_READ) ? PAGE_READWRITE : PAGE_READONLY );
+ if (mr->secure_handle == NULL) {
+ err = -EFAULT;
+ goto err_secure;
+ }
+ }
+ __except (EXCEPTION_EXECUTE_HANDLER) {
+ NTSTATUS Status = GetExceptionCode();
+ HCA_PRINT(TRACE_LEVEL_ERROR ,HCA_DBG_MEMORY ,
+ ("Exception 0x%x on MmSecureVirtualMemory(), addr %p, size %I64d, access %#x\n",
+ Status, vaddr, length, acc ));
+ err = -EFAULT;
+ goto err_secure;
+ }
+done:
free_page((void*) pages);
HCA_EXIT(HCA_DBG_MEMORY);
return &mr->ibmr;
+err_secure:
err_mt_alloc:
err_write_mtt:
free_page((void*) pages);
{
struct mthca_mr *mmr = to_mmr(mr);
mthca_free_mr(to_mdev(mr->device), mmr);
- if (mr->pd->ucontext)
+ if (mr->pd->ucontext) {
ibv_umem_release(mr->pd->device, &mmr->umem);
+ MmUnsecureVirtualMemory ( mmr->secure_handle );
+ }
kfree(mmr);
return 0;
}