From 3811277136f6fd10dcaca35ad5dbef99df72dcf7 Mon Sep 17 00:00:00 2001 From: leonidk Date: Mon, 3 Apr 2006 13:54:30 +0000 Subject: [PATCH] [MTHCA] Burning support improvements: 1. added support of multiple simult. pciconf devices; 2. removed support for several CR space mappings for one process; 3. PCI bus interface is now taken only once; 4. Fixed bug with handling positive non-zero NTSTATUSes; 5. Removed unused unmap_crspace structure; 6. General cleaning; git-svn-id: svn://openib.tc.cornell.edu/gen1@272 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86 --- trunk/hw/mthca/kernel/hca_driver.c | 218 ++++++++++------------------- trunk/hw/mthca/kernel/hca_driver.h | 1 + trunk/hw/mthca/kernel/hca_pci.c | 25 ++-- trunk/hw/mthca/kernel/hca_pci.h | 12 +- trunk/hw/mthca/kernel/hca_pnp.c | 6 +- trunk/hw/mthca/kernel/hca_verbs.c | 71 +++++----- trunk/hw/mthca/kernel/ib_verbs.h | 6 +- trunk/hw/mthca/kernel/mthca_main.c | 4 +- trunk/inc/mthca/mthca_vc.h | 6 - 9 files changed, 147 insertions(+), 202 deletions(-) diff --git a/trunk/hw/mthca/kernel/hca_driver.c b/trunk/hw/mthca/kernel/hca_driver.c index 139f9781..762fce49 100644 --- a/trunk/hw/mthca/kernel/hca_driver.c +++ b/trunk/hw/mthca/kernel/hca_driver.c @@ -438,25 +438,18 @@ End: return status; } -typedef struct _mthca_map_space { - struct list_head list; - PMDL p_mdl; - PVOID va; -} mthca_map_space; - static NTSTATUS __map_crspace( - IN struct ib_ucontext * p_context, - IN mlnx_hob_t * p_hob, - IN PVOID p_buf, - IN ULONG buf_size + IN struct ib_ucontext * p_context, + IN mlnx_hob_t * p_hob, + IN PVOID p_buf, + IN ULONG buf_size ) { NTSTATUS status; PMDL p_mdl; PVOID ua, ka; ULONG sz; - mthca_map_space *p_map; hca_dev_ext_t *p_ext = EXT_FROM_HOB(p_hob); map_crspace *p_res = (map_crspace *)p_buf; @@ -468,16 +461,6 @@ __map_crspace( goto err_invalid_params; } - // allocate a structure - p_map = (mthca_map_space *)kmalloc(sizeof *p_map, GFP_KERNEL); - if (p_map == NULL) { - status = STATUS_INSUFFICIENT_RESOURCES; - goto err_no_memory; - } - - // support several sim clients - down( &p_context->mutex ); - // map memory sz =(ULONG)p_ext->bar[HCA_BAR_TYPE_HCR].size; if (!p_ext->bar[HCA_BAR_TYPE_HCR].virt) { @@ -525,11 +508,9 @@ __map_crspace( p_res->size = sz; // resource tracking - p_map->p_mdl = p_mdl; - p_map->va = ua; - list_add_tail(&p_map->list, &p_context->map_list); + p_context->p_mdl = p_mdl; + p_context->va = ua; - up( &p_context->mutex ); status = STATUS_SUCCESS; goto out; @@ -537,9 +518,6 @@ err_map_to_user: IoFreeMdl( p_mdl ); err_alloc_mdl: err_map_to_kernel: - up( &p_context->mutex ); - kfree( p_map ); -err_no_memory: err_invalid_params: out: HCA_EXIT( HCA_DBG_PNP ); @@ -547,81 +525,47 @@ out: } -static NTSTATUS +static void __unmap_crspace( - IN struct ib_ucontext * p_context, - IN PVOID p_buf, - IN ULONG buf_size + IN struct ib_ucontext * p_context ) { - NTSTATUS status; - unmap_crspace *parm = (unmap_crspace *)p_buf; - mthca_map_space *p_map, *p_tmp; - int found = FALSE; - HCA_ENTER( HCA_DBG_PNP ); - // sanity checks - if ( buf_size < sizeof *parm || !p_buf ) { - status = STATUS_INVALID_PARAMETER; - goto err_invalid_params; + if (p_context->va && p_context->p_mdl) { + MmUnmapLockedPages(p_context->va, p_context->p_mdl); + IoFreeMdl( p_context->p_mdl ); + p_context->va = p_context->p_mdl = NULL; + //NB: the unmap of IO space is being done in __UnmapHcaMemoryResources } - // support several sim clients - down( &p_context->mutex ); - - // look for the mapping info - list_for_each_entry_safe(p_map, p_tmp, &p_context->map_list, list, - mthca_map_space, mthca_map_space) { - if (p_map->va == parm->va) { - found = TRUE; - break; - } - } + HCA_EXIT( HCA_DBG_PNP ); +} - if (!found) { - HCA_PRINT(TRACE_LEVEL_ERROR , HCA_DBG_SHIM, - ("Not found internal info for unmappipng.%p for PID %d.\n" , - parm->va, (int)(INT_PTR)PsGetCurrentProcessId())); - status = STATUS_INVALID_PARAMETER; - goto err_not_found; +static void +__close_fw_access( + IN struct ib_ucontext * p_context, + IN PBUS_INTERFACE_STANDARD p_bus_interface + ) +{ + if (p_context->fw_if_open ) { + p_bus_interface->InterfaceDereference((PVOID)p_bus_interface->Context); + p_context->fw_if_open = FALSE; } - - // release the resources - list_del( &p_map->list ); - MmUnmapLockedPages(p_map->va, p_map->p_mdl); - IoFreeMdl( p_map->p_mdl ); - kfree( p_map ); - - up( &p_context->mutex ); - status = STATUS_SUCCESS; - goto out; - -err_not_found: - up( &p_context->mutex ); -err_invalid_params: -out: - HCA_EXIT( HCA_DBG_PNP ); - return status; } void unmap_crspace_for_all( struct ib_ucontext *p_context ) { - mthca_map_space *p_map, *p_tmp; + mlnx_hob_t *p_hob = HOB_FROM_IBDEV( p_context->device ); + hca_dev_ext_t *p_ext = EXT_FROM_HOB(p_hob); + PBUS_INTERFACE_STANDARD p_bus_interface = &p_ext->hcaBusIfc; HCA_ENTER( HCA_DBG_PNP ); down( &p_context->mutex ); - - list_for_each_entry_safe(p_map, p_tmp, &p_context->map_list, list, - mthca_map_space, mthca_map_space) { - list_del( &p_map->list ); - MmUnmapLockedPages(p_map->va, p_map->p_mdl); - IoFreeMdl( p_map->p_mdl ); - kfree( p_map ); - } - + __unmap_crspace( p_context); + __close_fw_access(p_context, p_bus_interface); up( &p_context->mutex ); HCA_EXIT( HCA_DBG_PNP ); @@ -636,35 +580,36 @@ fw_access_ctrl( IN OUT ci_umv_buf_t *p_umv_buf ) { DEVICE_OBJECT *p_dev_obj; - static BUS_INTERFACE_STANDARD BusInterface; - static uint32_t if_ready; - NTSTATUS status; + PBUS_INTERFACE_STANDARD p_bus_interface; + NTSTATUS status = STATUS_SUCCESS; PVOID p_data; ULONG offset; ULONG POINTER_ALIGNMENT length; - mlnx_hob_t *p_hob; struct ib_ucontext * p_context; + mlnx_hob_t *p_hob; + hca_dev_ext_t *p_ext; UNREFERENCED_PARAMETER(handle_array); UNREFERENCED_PARAMETER(num_handles); - UNREFERENCED_PARAMETER(p_umv_buf); - - status = STATUS_INVALID_DEVICE_REQUEST; if( !p_umv_buf ) return IB_UNSUPPORTED; p_context = (struct ib_ucontext *)h_ca; - p_hob = HOB_FROM_IBDEV( ((struct ib_ucontext*)h_ca)->device ); - p_dev_obj = (DEVICE_OBJECT *)EXT_FROM_HOB(p_hob)->cl_ext.p_self_do; + p_hob = HOB_FROM_IBDEV( p_context->device ); + p_ext = EXT_FROM_HOB(p_hob); + p_dev_obj = (DEVICE_OBJECT *)p_ext->cl_ext.p_self_do; + p_bus_interface = &p_ext->hcaBusIfc; - if ( !p_ci_op || !p_ci_op->buf_size ) + if ( !p_ci_op ) return IB_INVALID_PARAMETER; length = p_ci_op->buf_size; offset = p_ci_op->buf_info; p_data = p_ci_op->p_buf; + down( &p_context->mutex ); + switch ( p_ci_op->command ) { case FW_MAP_CRSPACE: @@ -672,80 +617,61 @@ fw_access_ctrl( break; case FW_UNMAP_CRSPACE: - status = __unmap_crspace(p_context, p_data, length); + __unmap_crspace(p_context); break; + case FW_OPEN_IF: // open BusInterface + if ( !p_context->fw_if_open ) { + status = fw_get_pci_bus_interface(p_dev_obj, p_bus_interface); + if ( NT_SUCCESS( status ) ) { + p_context->fw_if_open = TRUE; + // status can be positive, but != STATUS_SUCCESS + status = STATUS_SUCCESS; + } + } + break; + case FW_READ: // read data from flash - if ( if_ready ) - status = fw_flash_read_data(&BusInterface, p_data, offset, length); + if ( p_context->fw_if_open ) + status = fw_flash_read_data(p_bus_interface, p_data, offset, length); break; case FW_WRITE: // write data to flash - if ( if_ready ) - status = fw_flash_write_data(&BusInterface, p_data, offset, length); + if ( p_context->fw_if_open ) + status = fw_flash_write_data(p_bus_interface, p_data, offset, length); break; case FW_READ_CMD: - if ( if_ready ) - status = fw_access_pciconf(&BusInterface, 0 , p_data, offset, 4); + if ( p_context->fw_if_open ) + status = fw_access_pciconf(p_bus_interface, 0 , p_data, offset, 4); break; case FW_WRITE_CMD: - if ( if_ready ) - status = fw_access_pciconf(&BusInterface, 1 , p_data, offset, 4); + if ( p_context->fw_if_open ) + status = fw_access_pciconf(p_bus_interface, 1 , p_data, offset, 4); break; case FW_CLOSE_IF: // close BusInterface - if (if_ready ) - { - if_ready = 0; - BusInterface.InterfaceDereference((PVOID)BusInterface.Context); - } - return IB_SUCCESS; - - case FW_OPEN_IF: // open BusInterface - if ( !if_ready ) - { - status = fw_get_pci_bus_interface(p_dev_obj, &BusInterface); - - if ( NT_SUCCESS( status ) ) - { - if_ready = 1; - } - } - else - { - status = STATUS_SUCCESS; - } + __close_fw_access(p_context, p_bus_interface); break; default: status = STATUS_INVALID_DEVICE_REQUEST; } - if ( status != STATUS_SUCCESS ) - { - if ( if_ready ) - { - if_ready = 0; - BusInterface.InterfaceDereference((PVOID)BusInterface.Context); - } + if ( status != STATUS_SUCCESS ) { + __close_fw_access(p_context, p_bus_interface); HCA_PRINT( TRACE_LEVEL_ERROR, HCA_DBG_INIT, ("fw_access_ctrl failed, ntstatus: %08x.\n", status)); } - switch( status ) - { - case STATUS_SUCCESS: - return IB_SUCCESS; - - case STATUS_INVALID_DEVICE_REQUEST: - return IB_UNSUPPORTED; - case STATUS_INSUFFICIENT_RESOURCES: - return IB_INSUFFICIENT_RESOURCES; + up( &p_context->mutex ); - default: - return IB_ERROR; + switch( status ) { + case STATUS_SUCCESS: return IB_SUCCESS; + case STATUS_INVALID_DEVICE_REQUEST: return IB_UNSUPPORTED; + case STATUS_INSUFFICIENT_RESOURCES: return IB_INSUFFICIENT_RESOURCES; + default: return IB_ERROR; } } @@ -760,6 +686,9 @@ fw_flash_write_data ( uint32_t cnt = 0; uint32_t lcl_data; + if (!length) + return IB_INVALID_PARAMETER; + lcl_data = (*((uint32_t*)p_buffer) << 24); status = fw_access_pciconf(p_BusInterface, FW_WRITE , &lcl_data, FLASH_OFFSET+4, length ); @@ -799,6 +728,9 @@ fw_flash_read_data ( NTSTATUS status = STATUS_SUCCESS; uint32_t cnt = 0; uint32_t lcl_data = ( READ_BIT | (offset & ADDR_MSK)); + + if (!length) + return IB_INVALID_PARAMETER; status = fw_access_pciconf(p_BusInterface, FW_WRITE, &lcl_data, FLASH_OFFSET, 4 ); if ( status != STATUS_SUCCESS ) diff --git a/trunk/hw/mthca/kernel/hca_driver.h b/trunk/hw/mthca/kernel/hca_driver.h index 2a34fece..e6734122 100644 --- a/trunk/hw/mthca/kernel/hca_driver.h +++ b/trunk/hw/mthca/kernel/hca_driver.h @@ -143,6 +143,7 @@ typedef struct _hca_dev_ext PKINTERRUPT int_obj; /* HCA interrupt object */ spinlock_t isr_lock; /* lock for the ISR */ ULONG bus_number; /* HCA's bus number */ + BUS_INTERFACE_STANDARD hcaBusIfc; /* PCI bus interface */ /* ------------------------------------------------- * VARIABLES diff --git a/trunk/hw/mthca/kernel/hca_pci.c b/trunk/hw/mthca/kernel/hca_pci.c index 171549dc..083b9db0 100644 --- a/trunk/hw/mthca/kernel/hca_pci.c +++ b/trunk/hw/mthca/kernel/hca_pci.c @@ -710,18 +710,18 @@ tweakErr: NTSTATUS hca_enable_pci( - IN DEVICE_OBJECT* const pDevObj, - OUT PCI_COMMON_CONFIG* pHcaConfig + IN DEVICE_OBJECT* const pDevObj, + OUT PBUS_INTERFACE_STANDARD phcaBusIfc, + OUT PCI_COMMON_CONFIG* pHcaConfig ) { NTSTATUS status; - BUS_INTERFACE_STANDARD hcaBusIfc; ULONG len; HCA_ENTER( HCA_DBG_PNP ); /* Get the HCA's bus interface. */ - status = __get_bus_ifc( pDevObj, &GUID_BUS_INTERFACE_STANDARD, &hcaBusIfc ); + status = __get_bus_ifc( pDevObj, &GUID_BUS_INTERFACE_STANDARD, phcaBusIfc ); if( !NT_SUCCESS( status ) ) { HCA_PRINT( TRACE_LEVEL_ERROR , HCA_DBG_PNP ,("Failed to get HCA bus interface.\n")); @@ -729,7 +729,7 @@ hca_enable_pci( } /* Save the HCA's configuration. */ - status = __save_pci_config( &hcaBusIfc, pHcaConfig ); + status = __save_pci_config( phcaBusIfc, pHcaConfig ); if( !NT_SUCCESS( status ) ) { HCA_PRINT( TRACE_LEVEL_ERROR, HCA_DBG_PNP, @@ -740,7 +740,7 @@ hca_enable_pci( /* fix command register (set PCI Master bit) */ // NOTE: we change here the saved value of the command register pHcaConfig->Command |= 7; - len = hcaBusIfc.SetBusData( hcaBusIfc.Context, PCI_WHICHSPACE_CONFIG, + len = phcaBusIfc->SetBusData( phcaBusIfc->Context, PCI_WHICHSPACE_CONFIG, (PVOID)&pHcaConfig->Command , 4, sizeof(ULONG) ); if( len != sizeof(ULONG) ) { @@ -748,10 +748,19 @@ hca_enable_pci( status = STATUS_DEVICE_NOT_READY; goto pciErr; } + status = STATUS_SUCCESS; + goto out; pciErr: - hcaBusIfc.InterfaceDereference( hcaBusIfc.Context ); - + phcaBusIfc->InterfaceDereference( phcaBusIfc->Context ); + out: HCA_EXIT( HCA_DBG_PNP ); return status; } + +void hca_disable_pci(PBUS_INTERFACE_STANDARD phcaBusIfc) +{ + // no need to disable the card, so just release the PCI bus i/f + phcaBusIfc->InterfaceDereference( phcaBusIfc->Context ); +} + diff --git a/trunk/hw/mthca/kernel/hca_pci.h b/trunk/hw/mthca/kernel/hca_pci.h index 63934149..fd82e379 100644 --- a/trunk/hw/mthca/kernel/hca_pci.h +++ b/trunk/hw/mthca/kernel/hca_pci.h @@ -4,16 +4,20 @@ NTSTATUS hca_reset( - IN DEVICE_OBJECT* const pDevObj, int is_tavor ); + IN DEVICE_OBJECT* const pDevObj, int is_tavor ); NTSTATUS hca_enable_pci( - IN DEVICE_OBJECT* const pDevObj, - OUT PCI_COMMON_CONFIG* pHcaConfig + IN DEVICE_OBJECT* const pDevObj, + OUT PBUS_INTERFACE_STANDARD phcaBusIfc, + OUT PCI_COMMON_CONFIG* pHcaConfig ); +void hca_disable_pci( + IN PBUS_INTERFACE_STANDARD phcaBusIfc); + NTSTATUS hca_tune_pci( - IN DEVICE_OBJECT* const pDevObj ); + IN DEVICE_OBJECT* const pDevObj ); #endif diff --git a/trunk/hw/mthca/kernel/hca_pnp.c b/trunk/hw/mthca/kernel/hca_pnp.c index 24c2e730..bb1b3876 100644 --- a/trunk/hw/mthca/kernel/hca_pnp.c +++ b/trunk/hw/mthca/kernel/hca_pnp.c @@ -733,8 +733,8 @@ hca_start( return status; } - /* save PCI configuration info and enable device */ - hca_enable_pci( p_dev_obj, &p_ext->hcaConfig ); + /* save PCI bus i/f, PCI configuration info and enable device */ + hca_enable_pci( p_dev_obj, &p_ext->hcaBusIfc, &p_ext->hcaConfig ); /* * Get the DMA adapter representing the HCA so we can @@ -872,6 +872,8 @@ hca_release_resources( if( p_ext->p_dma_adapter ) p_ext->p_dma_adapter->DmaOperations->PutDmaAdapter( p_ext->p_dma_adapter ); + hca_disable_pci( &p_ext->hcaBusIfc ); + //cl_event_destroy( &p_ext->mutex ); __UnmapHcaMemoryResources( p_dev_obj ); diff --git a/trunk/hw/mthca/kernel/hca_verbs.c b/trunk/hw/mthca/kernel/hca_verbs.c index 4b51c564..1f5b79c9 100644 --- a/trunk/hw/mthca/kernel/hca_verbs.c +++ b/trunk/hw/mthca/kernel/hca_verbs.c @@ -363,7 +363,7 @@ mlnx_um_open( mlnx_hob_t *hob_p = (mlnx_hob_t *)h_ca; hca_dev_ext_t *ext_p = EXT_FROM_HOB( hob_p ); struct ib_device *ib_dev = IBDEV_FROM_HOB( hob_p ); - struct ib_ucontext *context_p; + struct ib_ucontext *p_context; struct mthca_alloc_ucontext_resp *uresp_p; struct ibv_alloc_pd_resp resp; ci_umv_buf_t umv_buf; @@ -374,22 +374,22 @@ mlnx_um_open( ASSERT( p_umv_buf ); if( !p_umv_buf->command ) { - context_p = cl_zalloc( sizeof(struct ib_ucontext) ); - if( !context_p ) + p_context = cl_zalloc( sizeof(struct ib_ucontext) ); + if( !p_context ) { status = IB_INSUFFICIENT_MEMORY; goto err_alloc_ucontext; } /* Copy the dev info. */ - context_p->device = ib_dev; + p_context->device = ib_dev; p_umv_buf->output_size = 0; goto done; } // create user context in kernel - context_p = mthca_alloc_ucontext(ib_dev, p_umv_buf); - if (IS_ERR(context_p)) { - err = PTR_ERR(context_p); + p_context = mthca_alloc_ucontext(ib_dev, p_umv_buf); + if (IS_ERR(p_context)) { + err = PTR_ERR(p_context); HCA_PRINT(TRACE_LEVEL_ERROR ,HCA_DBG_SHIM, ("mthca_alloc_ucontext failed (%d)\n", err)); status = errno_to_iberr(err); @@ -401,9 +401,9 @@ mlnx_um_open( umv_buf.p_inout_buf = &resp; //NB: Pay attention ! Ucontext parameter is important here: // when it is present (i.e. - for user space) - mthca_alloc_pd won't create MR - context_p->pd = ibv_alloc_pd(ib_dev, context_p, &umv_buf); - if (IS_ERR(context_p->pd)) { - err = PTR_ERR(context_p->pd); + p_context->pd = ibv_alloc_pd(ib_dev, p_context, &umv_buf); + if (IS_ERR(p_context->pd)) { + err = PTR_ERR(p_context->pd); HCA_PRINT(TRACE_LEVEL_ERROR , HCA_DBG_SHIM, ("ibv_alloc_pd failed (%d)\n", err)); status = errno_to_iberr(err); @@ -412,7 +412,7 @@ mlnx_um_open( // fill more parameters for user (sanity checks are in mthca_alloc_ucontext) uresp_p = (struct mthca_alloc_ucontext_resp *)(void*)p_umv_buf->p_inout_buf; - uresp_p->uar_addr = (uint64_t)(UINT_PTR)context_p->user_uar; + uresp_p->uar_addr = (uint64_t)(UINT_PTR)p_context->user_uar; uresp_p->pd_handle = resp.pd_handle; uresp_p->pdn = resp.pdn; uresp_p->vend_id = (uint32_t)ext_p->hcaConfig.VendorID; @@ -420,17 +420,18 @@ mlnx_um_open( done: // some more inits - INIT_LIST_HEAD(&context_p->map_list); - KeInitializeMutex( &context_p->mutex, 0 ); + p_context->va = p_context->p_mdl = NULL; + p_context->fw_if_open = FALSE; + KeInitializeMutex( &p_context->mutex, 0 ); // return the result - if (ph_um_ca) *ph_um_ca = (ib_ca_handle_t)context_p; + if (ph_um_ca) *ph_um_ca = (ib_ca_handle_t)p_context; status = IB_SUCCESS; goto end; err_alloc_pd: - mthca_dealloc_ucontext(context_p); + mthca_dealloc_ucontext(p_context); err_alloc_ucontext: end: if (p_umv_buf && p_umv_buf->command) @@ -470,7 +471,7 @@ mlnx_allocate_pd ( { ib_api_status_t status; struct ib_device *ib_dev; - struct ib_ucontext *context_p; + struct ib_ucontext *p_context; struct ib_pd *ib_pd_p; int err; @@ -480,17 +481,17 @@ mlnx_allocate_pd ( HCA_ENTER(HCA_DBG_SHIM); if( p_umv_buf ) { - context_p = (struct ib_ucontext *)h_ca; - ib_dev = context_p->device; + p_context = (struct ib_ucontext *)h_ca; + ib_dev = p_context->device; } else { mlnx_hob_t *hob_p = (mlnx_hob_t *)h_ca; - context_p = NULL; + p_context = NULL; ib_dev = IBDEV_FROM_HOB( hob_p ); } // create PD - ib_pd_p = ibv_alloc_pd(ib_dev, context_p, p_umv_buf); + ib_pd_p = ibv_alloc_pd(ib_dev, p_context, p_umv_buf); if (IS_ERR(ib_pd_p)) { err = PTR_ERR(ib_pd_p); HCA_PRINT(TRACE_LEVEL_ERROR , HCA_DBG_SHIM, @@ -558,7 +559,7 @@ mlnx_create_av ( struct ib_device *ib_dev = ib_pd_p->device; struct ib_ah *ib_av_p; struct ib_ah_attr ah_attr; - struct ib_ucontext *context_p = NULL; + struct ib_ucontext *p_context = NULL; HCA_ENTER(HCA_DBG_QP); @@ -570,16 +571,16 @@ mlnx_create_av ( status = IB_INVALID_PARAMETER; goto err_inval_params; } - context_p = ib_pd_p->ucontext; + p_context = ib_pd_p->ucontext; } else - context_p = NULL; + p_context = NULL; // fill parameters RtlZeroMemory(&ah_attr, sizeof(ah_attr)); mlnx_conv_ibal_av( ib_dev, p_addr_vector, &ah_attr ); - ib_av_p = ibv_create_ah(ib_pd_p, &ah_attr, context_p, p_umv_buf); + ib_av_p = ibv_create_ah(ib_pd_p, &ah_attr, p_context, p_umv_buf); if (IS_ERR(ib_pd_p)) { err = PTR_ERR(ib_pd_p); HCA_PRINT(TRACE_LEVEL_ERROR ,HCA_DBG_QP, @@ -591,7 +592,7 @@ mlnx_create_av ( // return the result if (ph_av) *ph_av = (ib_av_handle_t)ib_av_p; - if( context_p ) + if( p_context ) { struct ibv_create_ah_resp *create_ah_resp = (struct ibv_create_ah_resp *)(void*)p_umv_buf->p_inout_buf; cl_memcpy( &create_ah_resp->av_attr, p_addr_vector, sizeof(create_ah_resp->av_attr) ); @@ -753,7 +754,7 @@ _create_qp ( struct ib_qp * ib_qp_p; struct mthca_qp *qp_p; struct ib_qp_init_attr qp_init_attr; - struct ib_ucontext *context_p = NULL; + struct ib_ucontext *p_context = NULL; struct ib_pd *ib_pd_p = (struct ib_pd *)h_pd; struct ib_device *ib_dev = ib_pd_p->device; mlnx_hob_t *hob_p = HOB_FROM_IBDEV(ib_dev); @@ -769,10 +770,10 @@ _create_qp ( status = IB_INVALID_PARAMETER; goto err_inval_params; } - context_p = ib_pd_p->ucontext; + p_context = ib_pd_p->ucontext; } else - context_p = NULL; + p_context = NULL; // prepare the parameters RtlZeroMemory(&qp_init_attr, sizeof(qp_init_attr)); @@ -790,7 +791,7 @@ _create_qp ( // create qp - ib_qp_p = ibv_create_qp( ib_pd_p, &qp_init_attr, context_p, p_umv_buf ); + ib_qp_p = ibv_create_qp( ib_pd_p, &qp_init_attr, p_context, p_umv_buf ); if (IS_ERR(ib_qp_p)) { err = PTR_ERR(ib_qp_p); HCA_PRINT(TRACE_LEVEL_ERROR , HCA_DBG_QP, @@ -1064,15 +1065,15 @@ mlnx_create_cq ( struct mthca_cq *cq_p; mlnx_hob_t *hob_p; struct ib_device *ib_dev; - struct ib_ucontext *context_p; + struct ib_ucontext *p_context; HCA_ENTER(HCA_DBG_CQ); if( p_umv_buf ) { - context_p = (struct ib_ucontext *)h_ca; - hob_p = HOB_FROM_IBDEV(context_p->device); - ib_dev = context_p->device; + p_context = (struct ib_ucontext *)h_ca; + hob_p = HOB_FROM_IBDEV(p_context->device); + ib_dev = p_context->device; // sanity checks if (p_umv_buf->input_size < sizeof(struct ibv_create_cq) || @@ -1084,14 +1085,14 @@ mlnx_create_cq ( } else { hob_p = (mlnx_hob_t *)h_ca; - context_p = NULL; + p_context = NULL; ib_dev = IBDEV_FROM_HOB( hob_p ); } // allocate cq ib_cq_p = ibv_create_cq(ib_dev, cq_comp_handler, cq_event_handler, - hob_p, *p_size, context_p, p_umv_buf ); + hob_p, *p_size, p_context, p_umv_buf ); if (IS_ERR(ib_cq_p)) { err = PTR_ERR(ib_cq_p); HCA_PRINT (TRACE_LEVEL_ERROR ,HCA_DBG_CQ, ("ibv_create_cq failed (%d)\n", err)); diff --git a/trunk/hw/mthca/kernel/ib_verbs.h b/trunk/hw/mthca/kernel/ib_verbs.h index 7c7418c2..24b093dd 100644 --- a/trunk/hw/mthca/kernel/ib_verbs.h +++ b/trunk/hw/mthca/kernel/ib_verbs.h @@ -531,9 +531,11 @@ struct ib_ucontext { struct ib_pd *pd; atomic_t usecnt; /* count all resources */ ULONG is_removing; - // for CR space mapping + // for tools support KMUTEX mutex; - struct list_head map_list; + PMDL p_mdl; + PVOID va; + int fw_if_open; }; struct ib_uobject { diff --git a/trunk/hw/mthca/kernel/mthca_main.c b/trunk/hw/mthca/kernel/mthca_main.c index fb96c649..936d14ba 100644 --- a/trunk/hw/mthca/kernel/mthca_main.c +++ b/trunk/hw/mthca/kernel/mthca_main.c @@ -175,10 +175,10 @@ static int mthca_dev_lim(struct mthca_dev *mdev, struct mthca_dev_lim *dev_lim) return -ENODEV; } - if (dev_lim->uar_size > pci_resource_len(mdev, 2)) { + if (dev_lim->uar_size > (int)pci_resource_len(mdev, 2)) { HCA_PRINT_EV(TRACE_LEVEL_ERROR ,HCA_DBG_LOW , ("HCA reported UAR size of 0x%x bigger than " "PCI resource 2 size of 0x%lx, aborting.\n", - dev_lim->uar_size, pci_resource_len(mdev, 2))); + dev_lim->uar_size, (unsigned long)pci_resource_len(mdev, 2))); return -ENODEV; } diff --git a/trunk/inc/mthca/mthca_vc.h b/trunk/inc/mthca/mthca_vc.h index 45c001ec..9a757582 100644 --- a/trunk/inc/mthca/mthca_vc.h +++ b/trunk/inc/mthca/mthca_vc.h @@ -39,12 +39,6 @@ struct _map_crspace { unsigned long size; /* size of CRSPACE, mapped to user space */ } map_crspace; -typedef -struct _unmap_crspace { - void * va; /* address of CRSPACE, mapped to user space */ -} unmap_crspace; - - /* Definitions for hca_driver commands*/ #define FW_READ 0x00 #define FW_WRITE 0x01 -- 2.41.0