diff options
author | Loren Huang <b02279@freescale.com> | 2014-01-09 17:03:08 +0800 |
---|---|---|
committer | Loren Huang <b02279@freescale.com> | 2014-01-09 19:04:43 +0800 |
commit | 59bbee0949709f1f136c2f7296805d5d8920ce5b (patch) | |
tree | 61096bcf65c0a27b876a6c05f5a6f0da9e1c2948 | |
parent | cc31ffb1157ea7a4f8a8ca5d7c1c30218c4c413f (diff) |
ENGR00284988 gpu:Sync gpu kernel driver code
Sync the code with commit 255ee1de in gpu-viv git.
Mainly covered tickets:
ENGR00288588 fixed system reboot when run webGL test
ENGR00284988 Camera recording kernel crash on WFD source
ENGR00283494 Modify Status to status to avoid build error
ENGR00278179-1 query video memory with seperate types
Signed-off-by: Loren Huang <b02279@freescale.com>
Acked-by: Shawn Guo
15 files changed, 254 insertions, 37 deletions
diff --git a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c index bdf9e13e7ca7..e8ad2ea3e031 100644 --- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c +++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c @@ -4163,6 +4163,23 @@ gckHARDWARE_SetPowerManagementState( ** if lock holder call gckCOMMAND_Stall() */ gcmkONERROR(gcvSTATUS_INVALID_REQUEST); } +#if gcdPOWEROFF_TIMEOUT + else if(State == gcvPOWER_OFF && timeout == gcvTRUE) + { + /* + ** try to aqcuire the mutex with more milliseconds, + ** flush_delayed_work should be running with timeout, + ** so waiting here will cause deadlock */ + status = gckOS_AcquireMutex(os, Hardware->powerMutex, gcdPOWEROFF_TIMEOUT); + + if (status == gcvSTATUS_TIMEOUT) + { + gckOS_Print("GPU Timer deadlock, exit by timeout!!!!\n"); + + gcmkONERROR(gcvSTATUS_INVALID_REQUEST); + } + } +#endif else { /* Acquire the power mutex. */ diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c index e8563b771ff1..88535488b916 100644 --- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c +++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c @@ -1181,10 +1181,37 @@ gckKERNEL_Dispatch( if (node->VidMem.memory->object.type == gcvOBJ_VIDMEM) { bytes = node->VidMem.bytes; + + gcmkONERROR( + gckKERNEL_AddProcessDB(Kernel, + processID, gcvDB_VIDEO_MEMORY_RESERVED, + node, + gcvNULL, + bytes)); } else { bytes = node->Virtual.bytes; + + if(node->Virtual.contiguous) + { + gcmkONERROR( + gckKERNEL_AddProcessDB(Kernel, + processID, gcvDB_VIDEO_MEMORY_CONTIGUOUS, + node, + gcvNULL, + bytes)); + } + else + { + gcmkONERROR( + gckKERNEL_AddProcessDB(Kernel, + processID, gcvDB_VIDEO_MEMORY_VIRTUAL, + node, + gcvNULL, + bytes)); + } + } gcmkONERROR( @@ -1221,6 +1248,28 @@ gckKERNEL_Dispatch( processID, gcvDB_VIDEO_MEMORY, node)); + if (node->VidMem.memory->object.type == gcvOBJ_VIDMEM) + { + gcmkONERROR( + gckKERNEL_RemoveProcessDB(Kernel, + processID, gcvDB_VIDEO_MEMORY_RESERVED, + node)); + } + else if(node->Virtual.contiguous) + { + gcmkONERROR( + gckKERNEL_RemoveProcessDB(Kernel, + processID, gcvDB_VIDEO_MEMORY_CONTIGUOUS, + node)); + } + else + { + gcmkONERROR( + gckKERNEL_RemoveProcessDB(Kernel, + processID, gcvDB_VIDEO_MEMORY_VIRTUAL, + node)); + } + break; case gcvHAL_LOCK_VIDEO_MEMORY: @@ -1467,12 +1516,12 @@ gckKERNEL_Dispatch( if (hardware) { /* This signal is bound to a hardware, - ** so the timeout is limited by gcdGPU_TIMEOUT. + ** so the timeout is limited by Kernel->timeOut. */ timer += gcdGPU_ADVANCETIMER; } - if (timer >= gcdGPU_TIMEOUT) + if (timer >= Kernel->timeOut) { gcmkONERROR( gckOS_Broadcast(Kernel->os, @@ -1898,6 +1947,33 @@ gckKERNEL_Dispatch( &Interface->u.Database.gpuIdle)); break; + case gcvHAL_VIDMEM_DATABASE: + /* Query reserved video memory. */ + gcmkONERROR( + gckKERNEL_QueryProcessDB(Kernel, + Interface->u.VidMemDatabase.processID, + !Interface->u.VidMemDatabase.validProcessID, + gcvDB_VIDEO_MEMORY_RESERVED, + &Interface->u.VidMemDatabase.vidMemResv)); + + /* Query contiguous video memory. */ + gcmkONERROR( + gckKERNEL_QueryProcessDB(Kernel, + Interface->u.VidMemDatabase.processID, + !Interface->u.VidMemDatabase.validProcessID, + gcvDB_VIDEO_MEMORY_CONTIGUOUS, + &Interface->u.VidMemDatabase.vidMemCont)); + + /* Query virtual video memory. */ + gcmkONERROR( + gckKERNEL_QueryProcessDB(Kernel, + Interface->u.VidMemDatabase.processID, + !Interface->u.VidMemDatabase.validProcessID, + gcvDB_VIDEO_MEMORY_VIRTUAL, + &Interface->u.VidMemDatabase.vidMemVirt)); + + break; + case gcvHAL_VERSION: Interface->u.Version.major = gcvVERSION_MAJOR; Interface->u.Version.minor = gcvVERSION_MINOR; diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h index 1c40df2fe563..6126bae3201d 100644 --- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h +++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h @@ -143,6 +143,9 @@ typedef enum _gceDATABASE_TYPE gcvDB_SHARED_INFO, /* Private data */ gcvDB_MAP_USER_MEMORY, /* Map user memory */ gcvDB_SYNC_POINT, /* Sync point. */ + gcvDB_VIDEO_MEMORY_RESERVED, /* Reserved video memory */ + gcvDB_VIDEO_MEMORY_CONTIGUOUS, /* Contiguous video memory */ + gcvDB_VIDEO_MEMORY_VIRTUAL, /* Virtual video memory */ } gceDATABASE_TYPE; @@ -181,6 +184,9 @@ typedef struct _gcsDATABASE gcsDATABASE_COUNTERS contiguous; gcsDATABASE_COUNTERS mapUserMemory; gcsDATABASE_COUNTERS mapMemory; + gcsDATABASE_COUNTERS vidMemResv; + gcsDATABASE_COUNTERS vidMemCont; + gcsDATABASE_COUNTERS vidMemVirt; /* Idle time management. */ gctUINT64 lastIdle; diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c index 134351a48ca9..b181f55ec55e 100644 --- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c +++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_db.c @@ -689,6 +689,15 @@ gckKERNEL_CreateProcessDB( database->mapUserMemory.bytes = 0; database->mapUserMemory.maxBytes = 0; database->mapUserMemory.totalBytes = 0; + database->vidMemResv.bytes = 0; + database->vidMemResv.maxBytes = 0; + database->vidMemResv.totalBytes = 0; + database->vidMemCont.bytes = 0; + database->vidMemCont.maxBytes = 0; + database->vidMemCont.totalBytes = 0; + database->vidMemVirt.bytes = 0; + database->vidMemVirt.maxBytes = 0; + database->vidMemVirt.totalBytes = 0; for (i = 0; i < gcmCOUNTOF(database->list); i++) { @@ -905,6 +914,18 @@ gckKERNEL_AddProcessDB( count = &database->mapUserMemory; break; + case gcvDB_VIDEO_MEMORY_RESERVED: + count = &database->vidMemResv; + break; + + case gcvDB_VIDEO_MEMORY_CONTIGUOUS: + count = &database->vidMemCont; + break; + + case gcvDB_VIDEO_MEMORY_VIRTUAL: + count = &database->vidMemVirt; + break; + default: count = gcvNULL; break; @@ -1004,6 +1025,18 @@ gckKERNEL_RemoveProcessDB( database->mapUserMemory.bytes -= bytes; break; + case gcvDB_VIDEO_MEMORY_RESERVED: + database->vidMemResv.bytes -= bytes; + break; + + case gcvDB_VIDEO_MEMORY_CONTIGUOUS: + database->vidMemCont.bytes -= bytes; + break; + + case gcvDB_VIDEO_MEMORY_VIRTUAL: + database->vidMemVirt.bytes -= bytes; + break; + default: break; } @@ -1319,6 +1352,11 @@ gckKERNEL_DestroyProcessDB( break; #endif + case gcvDB_VIDEO_MEMORY_RESERVED: + case gcvDB_VIDEO_MEMORY_CONTIGUOUS: + case gcvDB_VIDEO_MEMORY_VIRTUAL: + break;//Nothing to do + default: gcmkTRACE_ZONE(gcvLEVEL_ERROR, gcvZONE_DATABASE, "DB: Correcupted record=0x%08x type=%d", @@ -1436,6 +1474,24 @@ gckKERNEL_QueryProcessDB( gcmSIZEOF(database->mapUserMemory)); break; + case gcvDB_VIDEO_MEMORY_RESERVED: + gckOS_MemCopy(&Info->counters, + &database->vidMemResv, + gcmSIZEOF(database->vidMemResv)); + break; + + case gcvDB_VIDEO_MEMORY_CONTIGUOUS: + gckOS_MemCopy(&Info->counters, + &database->vidMemCont, + gcmSIZEOF(database->vidMemCont)); + break; + + case gcvDB_VIDEO_MEMORY_VIRTUAL: + gckOS_MemCopy(&Info->counters, + &database->vidMemVirt, + gcmSIZEOF(database->vidMemVirt)); + break; + default: break; } diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_debug.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_debug.c index a689bc3e323a..a36de6ec7dc0 100644 --- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_debug.c +++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_debug.c @@ -2399,10 +2399,10 @@ gckOS_SetDebugZones( void gckOS_Verify( - IN gceSTATUS Status + IN gceSTATUS status ) { - _lastError = Status; + _lastError = status; } /******************************************************************************* diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c index 2d81a5675d27..94593d8e9968 100644 --- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c +++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel_event.c @@ -323,6 +323,33 @@ __RemoveRecordFromProcessDB( Record->processID, gcvDB_VIDEO_MEMORY, gcmUINT64_TO_PTR(Record->info.u.FreeVideoMemory.node))); + + { + gcuVIDMEM_NODE_PTR node = (gcuVIDMEM_NODE_PTR)(gcmUINT64_TO_PTR(Record->info.u.FreeVideoMemory.node)); + + if (node->VidMem.memory->object.type == gcvOBJ_VIDMEM) + { + gcmkVERIFY_OK(gckKERNEL_RemoveProcessDB(Event->kernel, + Record->processID, + gcvDB_VIDEO_MEMORY_RESERVED, + node)); + } + else if(node->Virtual.contiguous) + { + gcmkVERIFY_OK(gckKERNEL_RemoveProcessDB(Event->kernel, + Record->processID, + gcvDB_VIDEO_MEMORY_CONTIGUOUS, + node)); + } + else + { + gcmkVERIFY_OK(gckKERNEL_RemoveProcessDB(Event->kernel, + Record->processID, + gcvDB_VIDEO_MEMORY_VIRTUAL, + node)); + } + } + break; case gcvHAL_UNLOCK_VIDEO_MEMORY: @@ -749,13 +776,13 @@ gckEVENT_GetEvent( /* Increment the wait timer. */ timer += 1; - if (timer == gcdGPU_TIMEOUT) + if (timer == Event->kernel->timeOut) { /* Try to call any outstanding events. */ gcmkONERROR(gckHARDWARE_Interrupt(Event->kernel->hardware, gcvTRUE)); } - else if (timer > gcdGPU_TIMEOUT) + else if (timer > Event->kernel->timeOut) { gcmkTRACE_N( gcvLEVEL_ERROR, diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h index 9c1711404c4c..375a8f5b03d1 100755 --- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h +++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_base.h @@ -3485,12 +3485,12 @@ gckOS_DebugBreak( void gcoOS_Verify( - IN gceSTATUS Status + IN gceSTATUS status ); void gckOS_Verify( - IN gceSTATUS Status + IN gceSTATUS status ); #if gcmIS_DEBUG(gcdDEBUG_ASSERT) diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h index 062224c741c4..f8413700031a 100644 --- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h +++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_compiler.h @@ -18,7 +18,6 @@ * *****************************************************************************/ - /* ** Include file the defines the front- and back-end compilers, as well as the ** objects they use. @@ -712,6 +711,27 @@ gcSHADER_CheckClipW( OUT gctBOOL * clipW); /******************************************************************************* +** gcSHADER_GetUniformVectorCount +** +** Get the number of vectors used by uniforms for this shader. +** +** INPUT: +** +** gcSHADER Shader +** Pointer to a gcSHADER object. +** +** OUTPUT: +** +** gctSIZE_T * Count +** Pointer to a variable receiving the number of vectors. +*/ +gceSTATUS +gcSHADER_GetUniformVectorCount( + IN gcSHADER Shader, + OUT gctSIZE_T * Count + ); + +/******************************************************************************* ** gcOptimizer Data Structures *******************************************************************************/ typedef enum _gceSHADER_OPTIMIZATION diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h index fc8c39539972..ea86349dcf97 100644 --- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h +++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_driver.h @@ -172,6 +172,9 @@ typedef enum _gceHAL_COMMAND_CODES /* Create native fence and return its fd. */ gcvHAL_CREATE_NATIVE_FENCE, + + /* Video memory database */ + gcvHAL_VIDMEM_DATABASE, } gceHAL_COMMAND_CODES; @@ -847,6 +850,23 @@ typedef struct _gcsHAL_INTERFACE } Database; + /* gcvHAL_VIDMEM_DATABASE */ + struct _gcsHAL_VIDMEM_DATABASE + { + /* Set to gcvTRUE if you want to query a particular process ID. + ** Set to gcvFALSE to query the last detached process. */ + IN gctBOOL validProcessID; + + /* Process ID to query. */ + IN gctUINT32 processID; + + /* Information. */ + OUT gcuDATABASE_INFO vidMemResv; + OUT gcuDATABASE_INFO vidMemCont; + OUT gcuDATABASE_INFO vidMemVirt; + } + VidMemDatabase; + /* gcvHAL_VERSION */ struct _gcsHAL_VERSION { diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_eglplatform.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_eglplatform.h index 06eea79447bc..c4347e1e0bbc 100644 --- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_eglplatform.h +++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_eglplatform.h @@ -18,7 +18,6 @@ * *****************************************************************************/ - #ifndef __gc_hal_eglplatform_h_ #define __gc_hal_eglplatform_h_ @@ -46,7 +45,7 @@ typedef struct __BITFIELDINFO{ #elif defined(LINUX) && defined(EGL_API_DFB) && !defined(__APPLE__) #include <directfb.h> typedef struct _DFBDisplay * HALNativeDisplayType; -typedef IDirectFBWindow * HALNativeWindowType; +typedef struct _DFBWindow * HALNativeWindowType; typedef struct _DFBPixmap * HALNativePixmapType; #elif defined(LINUX) && defined(EGL_API_FB) && !defined(__APPLE__) diff --git a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h index 14801aae46db..b44652944c92 100644 --- a/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h +++ b/drivers/mxc/gpu-viv/hal/kernel/inc/gc_hal_types.h @@ -1047,6 +1047,7 @@ typedef enum _gcePATCH_ID gcePATCH_CHORME, gcePATCH_DUOKANTV, gcePATCH_TESTAPP, + gcePATCH_GOOGLEEARTH, /* Count enum*/ gcePATCH_COUNT, diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c index ea0dc22f9375..bff85a0e9bf4 100644 --- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c +++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c @@ -336,7 +336,7 @@ gckGALDEVICE_Construct( PhysBaseAddr, PhysSize, Signal); /* Allocate device structure. */ - device = kmalloc(sizeof(struct _gckGALDEVICE), GFP_KERNEL | __GFP_NOWARN); + device = kmalloc(sizeof(struct _gckGALDEVICE), GFP_KERNEL); if (!device) { diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c index 4fcf45ac4a64..ebd316e24c5b 100644 --- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c +++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_driver.c @@ -19,7 +19,6 @@ * *****************************************************************************/ - #include <linux/device.h> #include <linux/slab.h> #include <linux/notifier.h> diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c index 7f41087f62a1..39c90f270cf5 100644 --- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c +++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.c @@ -375,10 +375,10 @@ _CreateMdlMap( return gcvNULL; } - mdlMap->pid = ProcessID; - mdlMap->vmaAddr = gcvNULL; - mdlMap->vma = gcvNULL; - mdlMap->reference = 0; + mdlMap->pid = ProcessID; + mdlMap->vmaAddr = gcvNULL; + mdlMap->vma = gcvNULL; + mdlMap->count = 0; mdlMap->next = Mdl->maps; Mdl->maps = mdlMap; @@ -4433,16 +4433,7 @@ gckOS_LockPages( up_write(¤t->mm->mmap_sem); } -#if 0 - else - { - /* mdlMap->vmaAddr != gcvNULL means current process has already locked this node. */ - MEMORY_UNLOCK(Os); - - gcmkFOOTER_ARG("*status=%d, mdlMap->vmaAddr=%x", gcvSTATUS_MEMORY_LOCKED, mdlMap->vmaAddr); - return gcvSTATUS_MEMORY_LOCKED; - } -#endif + mdlMap->count++; /* Convert pointer to MDL. */ *Logical = mdlMap->vmaAddr; @@ -4453,9 +4444,6 @@ gckOS_LockPages( *PageCount = mdl->numPages * (PAGE_SIZE / 4096); - /* Increase reference count. */ - mdlMap->reference++; - MEMORY_UNLOCK(Os); gcmkVERIFY_OK(gckOS_CacheFlush( @@ -4722,13 +4710,11 @@ gckOS_UnlockPages( { if ((mdlMap->vmaAddr != gcvNULL) && (_GetProcessID() == mdlMap->pid)) { - if (--mdlMap->reference > 0) + if (--mdlMap->count == 0) { - continue; + _UnmapUserLogical(mdlMap->pid, mdlMap->vmaAddr, mdl->numPages * PAGE_SIZE); + mdlMap->vmaAddr = gcvNULL; } - - _UnmapUserLogical(mdlMap->pid, mdlMap->vmaAddr, mdl->numPages * PAGE_SIZE); - mdlMap->vmaAddr = gcvNULL; } mdlMap = mdlMap->next; @@ -8593,7 +8579,17 @@ gckOS_StartTimer( if (unlikely(delayed_work_pending(&timer->work))) { - cancel_delayed_work(&timer->work); + if (unlikely(!cancel_delayed_work(&timer->work))) + { + cancel_work_sync(&timer->work.work); + + if (unlikely(delayed_work_pending(&timer->work))) + { + gckOS_Print("gckOS_StartTimer error, the pending worker cannot complete!!!! \n"); + + return gcvSTATUS_INVALID_REQUEST; + } + } } queue_delayed_work(Os->workqueue, &timer->work, msecs_to_jiffies(Delay)); diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.h b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.h index 501cf30e9273..b22081740fdb 100644 --- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.h +++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_os.h @@ -26,8 +26,8 @@ typedef struct _LINUX_MDL_MAP { gctINT pid; gctPOINTER vmaAddr; + gctUINT32 count; struct vm_area_struct * vma; - gctINT reference; struct _LINUX_MDL_MAP * next; } LINUX_MDL_MAP; |