The RETPTR macro contained a goto statement which is not allowed in the kernel. Signed-off-by: Ken Cox <jkc@xxxxxxxxxx> --- drivers/staging/unisys/include/timskmod.h | 4 --- drivers/staging/unisys/uislib/uislib.c | 11 ++++--- drivers/staging/unisys/uislib/uisqueue.c | 1 - .../unisys/visorchannel/visorchannel_funcs.c | 3 +- drivers/staging/unisys/visorchipset/parser.c | 36 ++++++++++++++-------- .../staging/unisys/visorutil/memregion_direct.c | 9 +++--- drivers/staging/unisys/visorutil/procobjecttree.c | 22 ++++++++----- drivers/staging/unisys/visorutil/visorkmodutils.c | 8 +++-- 8 files changed, 55 insertions(+), 39 deletions(-) diff --git a/drivers/staging/unisys/include/timskmod.h b/drivers/staging/unisys/include/timskmod.h index 0623f55..41cbcde 100644 --- a/drivers/staging/unisys/include/timskmod.h +++ b/drivers/staging/unisys/include/timskmod.h @@ -128,10 +128,6 @@ typedef long VMMIO32;/**< #VMMIO pointing to 32-bit data */ * @param x the value to return */ #define RETINT(x) do { rc = (x); RETTRACE(x); goto Away; } while (0) -/** return from a void* function, using a common exit point "Away" - * @param x the value to return - */ -#define RETPTR(x) do { rc = (x); RETTRACE(x); goto Away; } while (0) /** Given a typedef/struct/union and a member field name, * return the number of bytes occupied by that field. * @param TYPE the typedef name, or "struct xx" or "union xx" diff --git a/drivers/staging/unisys/uislib/uislib.c b/drivers/staging/unisys/uislib/uislib.c index 1737f3a..4f8a808 100644 --- a/drivers/staging/unisys/uislib/uislib.c +++ b/drivers/staging/unisys/uislib/uislib.c @@ -270,24 +270,27 @@ init_vbus_channel(U64 channelAddr, U32 channelBytes, int isServer) LOGERR("CONTROLVM_BUS_CREATE error: ioremap_cache of channelAddr:%Lx for channelBytes:%llu failed", (unsigned long long) channelAddr, (unsigned long long) channelBytes); - RETPTR(NULL); + rc = NULL; + goto Away; } if (isServer) { memset_io(pChan, 0, channelBytes); if (!ULTRA_VBUS_CHANNEL_OK_SERVER(channelBytes, NULL)) { ERRDRV("%s channel cannot be used", __func__); uislib_iounmap(pChan); - RETPTR(NULL); + rc = NULL; + goto Away; } ULTRA_VBUS_init_channel(pChan, channelBytes); } else { if (!ULTRA_VBUS_CHANNEL_OK_CLIENT(pChan, NULL)) { ERRDRV("%s channel cannot be used", __func__); uislib_iounmap(pChan); - RETPTR(NULL); + rc = NULL; + goto Away; } } - RETPTR(pChan); + rc = pChan; Away: return rc; } diff --git a/drivers/staging/unisys/uislib/uisqueue.c b/drivers/staging/unisys/uislib/uisqueue.c index 7ea306e..7bd05f7 100644 --- a/drivers/staging/unisys/uislib/uisqueue.c +++ b/drivers/staging/unisys/uislib/uisqueue.c @@ -30,7 +30,6 @@ #define RETVOID do { goto Away; } while (0) #define RETINT(x) do { rc = (x); goto Away; } while (0) -#define RETPTR(x) do { rc = (x); goto Away; } while (0) #define CHECK_CACHE_ALIGN 0 diff --git a/drivers/staging/unisys/visorchannel/visorchannel_funcs.c b/drivers/staging/unisys/visorchannel/visorchannel_funcs.c index ff4556b..99889fd 100644 --- a/drivers/staging/unisys/visorchannel/visorchannel_funcs.c +++ b/drivers/staging/unisys/visorchannel/visorchannel_funcs.c @@ -89,8 +89,7 @@ visorchannel_create_guts(HOSTADDRESS physaddr, ulong channelBytes, p->size = channelBytes; p->guid = guid; - RETPTR(p); - + rc = p; Away: if (rc == NULL) { diff --git a/drivers/staging/unisys/visorchipset/parser.c b/drivers/staging/unisys/visorchipset/parser.c index de0a4c2..6904dcc 100644 --- a/drivers/staging/unisys/visorchipset/parser.c +++ b/drivers/staging/unisys/visorchipset/parser.c @@ -63,7 +63,8 @@ parser_init_guts(U64 addr, U32 bytes, BOOL isLocal, MAX_CONTROLVM_PAYLOAD_BYTES); if (tryAgain) *tryAgain = TRUE; - RETPTR(NULL); + rc = NULL; + goto Away; } ctx = kzalloc(allocbytes, GFP_KERNEL|__GFP_NORETRY); if (ctx == NULL) { @@ -71,7 +72,8 @@ parser_init_guts(U64 addr, U32 bytes, BOOL isLocal, __func__, __FILE__, __LINE__, allocbytes); if (tryAgain) *tryAgain = TRUE; - RETPTR(NULL); + rc = NULL; + goto Away; } ctx->allocbytes = allocbytes; @@ -85,45 +87,53 @@ parser_init_guts(U64 addr, U32 bytes, BOOL isLocal, ERRDRV("%s - bad local address (0x%-16.16Lx for %lu)", __func__, (unsigned long long) addr, (ulong) bytes); - RETPTR(NULL); + rc = NULL; + goto Away; } p = __va((ulong) (addr)); memcpy(ctx->data, p, bytes); } else { rgn = visor_memregion_create(addr, bytes); - if (!rgn) - RETPTR(NULL); - if (visor_memregion_read(rgn, 0, ctx->data, bytes) < 0) - RETPTR(NULL); + if (!rgn) { + rc = NULL; + goto Away; + } + if (visor_memregion_read(rgn, 0, ctx->data, bytes) < 0) { + rc = NULL; + goto Away; + } } if (!hasStandardPayloadHeader) { ctx->byte_stream = TRUE; - RETPTR(ctx); + rc = ctx; + goto Away; } phdr = (ULTRA_CONTROLVM_PARAMETERS_HEADER *) (ctx->data); if (phdr->TotalLength != bytes) { ERRDRV("%s - bad total length %lu (should be %lu)", __func__, (ulong) (phdr->TotalLength), (ulong) (bytes)); - RETPTR(NULL); + rc = NULL; + goto Away; } if (phdr->TotalLength < phdr->HeaderLength) { ERRDRV("%s - total length < header length (%lu < %lu)", __func__, (ulong) (phdr->TotalLength), (ulong) (phdr->HeaderLength)); - RETPTR(NULL); + rc = NULL; + goto Away; } if (phdr->HeaderLength < sizeof(ULTRA_CONTROLVM_PARAMETERS_HEADER)) { ERRDRV("%s - header is too small (%lu < %lu)", __func__, (ulong) (phdr->HeaderLength), (ulong) (sizeof(ULTRA_CONTROLVM_PARAMETERS_HEADER))); - RETPTR(NULL); + rc = NULL; + goto Away; } - RETPTR(ctx); - + rc = ctx; Away: if (rgn) { visor_memregion_destroy(rgn); diff --git a/drivers/staging/unisys/visorutil/memregion_direct.c b/drivers/staging/unisys/visorutil/memregion_direct.c index b9b61e8..2c1061d 100644 --- a/drivers/staging/unisys/visorutil/memregion_direct.c +++ b/drivers/staging/unisys/visorutil/memregion_direct.c @@ -50,10 +50,11 @@ visor_memregion_create(HOSTADDRESS physaddr, ulong nbytes) memregion->physaddr = physaddr; memregion->nbytes = nbytes; memregion->overlapped = FALSE; - if (!mapit(memregion)) - RETPTR(NULL); - RETPTR(memregion); - + if (!mapit(memregion)) { + rc = NULL; + goto Away; + } + rc = memregion; Away: if (rc == NULL) { if (memregion != NULL) { diff --git a/drivers/staging/unisys/visorutil/procobjecttree.c b/drivers/staging/unisys/visorutil/procobjecttree.c index 1da9958..6a082b9 100644 --- a/drivers/staging/unisys/visorutil/procobjecttree.c +++ b/drivers/staging/unisys/visorutil/procobjecttree.c @@ -162,12 +162,14 @@ MYPROCTYPE *visor_proc_CreateType(struct proc_dir_entry *procDirRoot, parent = procDirRoot; for (i = 0; i < type->nNames; i++) { type->procDirs[i] = createProcDir(type->name[i], parent); - if (type->procDirs[i] == NULL) - RETPTR(NULL); + if (type->procDirs[i] == NULL) { + rc = NULL; + goto Away; + } parent = type->procDirs[i]; } type->procDir = type->procDirs[type->nNames-1]; - RETPTR(type); + rc = type; Away: if (rc == NULL) { if (type != NULL) { @@ -232,8 +234,10 @@ MYPROCOBJECT *visor_proc_CreateObject(MYPROCTYPE *type, } strcpy(obj->name, name); obj->procDir = createProcDir(obj->name, type->procDir); - if (obj->procDir == NULL) - RETPTR(NULL); + if (obj->procDir == NULL) { + rc = NULL; + goto Away; + } } obj->procDirPropertyContexts = kzalloc((type->nProperties + 1) * sizeof(PROCDIRENTRYCONTEXT), @@ -256,11 +260,13 @@ MYPROCOBJECT *visor_proc_CreateObject(MYPROCTYPE *type, createProcFile(type->propertyNames[i], obj->procDir, &proc_fops, &obj->procDirPropertyContexts[i]); - if (obj->procDirProperties[i] == NULL) - RETPTR(NULL); + if (obj->procDirProperties[i] == NULL) { + rc = NULL; + goto Away; + } } } - RETPTR(obj); + rc = obj; Away: if (rc == NULL) { if (obj != NULL) { diff --git a/drivers/staging/unisys/visorutil/visorkmodutils.c b/drivers/staging/unisys/visorutil/visorkmodutils.c index ef06469..a7d1e94 100644 --- a/drivers/staging/unisys/visorutil/visorkmodutils.c +++ b/drivers/staging/unisys/visorutil/visorkmodutils.c @@ -43,12 +43,14 @@ struct seq_file *visor_seq_file_new_buffer(void *buf, size_t buf_size) struct seq_file *rc = NULL; struct seq_file *m = kmalloc_kernel(sizeof(struct seq_file)); - if (m == NULL) - RETPTR(NULL); + if (m == NULL) { + rc = NULL; + goto Away; + } memset(m, 0, sizeof(struct seq_file)); m->buf = buf; m->size = buf_size; - RETPTR(m); + rc = m; Away: if (rc == NULL) { visor_seq_file_done_buffer(m); -- 1.8.5.3 _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel