It looks like you guys got it! What is currently checked in (by Assar)
is working fine! :-)

M

> :--=-=-=
> :
> :Matt Dillon <[EMAIL PROTECTED]> writes:
> :>     Well, yes... that's essentially what I suggested.  You didn't say
> :>     anything about removing the externalized inlines, which is what you
> :>     do in your patch.  Looks like a fine patch to me.
> :
> :Except it didn't work.  Now here's a patch that survived building a
> :kernel and modules.  ok?
> :
> :/assar
>    
>    lets see.. ok, I'm going to read the patch carefully this time......
> 
>    This isn't quite what I had in mind.  You are still making an API
>    change... you are now calling zalloci() from zalloc() for non-SMP boxes.
>    There is no need to do that.
> 
>    Instead what I would recommend is making zalloc() and zfree() real
>    procedures, putting them in vm_zone.c, and removing their inlines from
>    vm_zone.h.  i.e. not have *ANY* inlines at all in vm_zone.h
> 
>    Then as real procedures in vm_zone.c these functions can have the
>    #ifdef SMP / related code left intact.
> 
>                                               -Matt
> 
> :
> :--=-=-=
> :Content-Disposition: attachment; filename=zalloc-diff
> :
> :Index: vm_zone.c
> :===================================================================
> :RCS file: /home/ncvs/src/sys/vm/vm_zone.c,v
> :retrieving revision 1.35
> :diff -u -w -r1.35 vm_zone.c
> :--- vm_zone.c        2000/12/13 10:01:00     1.35
> :+++ vm_zone.c        2000/12/27 00:59:14
> :@@ -32,6 +32,59 @@
> : 
> : static MALLOC_DEFINE(M_ZONE, "ZONE", "Zone header");
> : 
> :+#define ZONE_ERROR_INVALID 0
> :+#define ZONE_ERROR_NOTFREE 1
> :+#define ZONE_ERROR_ALREADYFREE 2
> :+
> :+#define ZONE_ROUNDING       32
> :+
> :+#define ZENTRY_FREE 0x12342378
> :+/*
> :+ * void *zalloc(vm_zone_t zone) --
> :+ *  Returns an item from a specified zone.
> :+ *
> :+ * void zfree(vm_zone_t zone, void *item) --
> :+ *  Frees an item back to a specified zone.
> :+ */
> :+static __inline__ void *
> :+_zalloc(vm_zone_t z)
> :+{
> :+    void *item;
> :+
> :+#ifdef INVARIANTS
> :+    if (z == 0)
> :+            zerror(ZONE_ERROR_INVALID);
> :+#endif
> :+
> :+    if (z->zfreecnt <= z->zfreemin)
> :+            return _zget(z);
> :+
> :+    item = z->zitems;
> :+    z->zitems = ((void **) item)[0];
> :+#ifdef INVARIANTS
> :+    if (((void **) item)[1] != (void *) ZENTRY_FREE)
> :+            zerror(ZONE_ERROR_NOTFREE);
> :+    ((void **) item)[1] = 0;
> :+#endif
> :+
> :+    z->zfreecnt--;
> :+    z->znalloc++;
> :+    return item;
> :+}
> :+
> :+static __inline__ void
> :+_zfree(vm_zone_t z, void *item)
> :+{
> :+    ((void **) item)[0] = z->zitems;
> :+#ifdef INVARIANTS
> :+    if (((void **) item)[1] == (void *) ZENTRY_FREE)
> :+            zerror(ZONE_ERROR_ALREADYFREE);
> :+    ((void **) item)[1] = (void *) ZENTRY_FREE;
> :+#endif
> :+    z->zitems = item;
> :+    z->zfreecnt++;
> :+}
> :+
> : /*
> :  * This file comprises a very simple zone allocator.  This is used
> :  * in lieu of the malloc allocator, where needed or more optimal.
> :Index: vm_zone.h
> :===================================================================
> :RCS file: /home/ncvs/src/sys/vm/vm_zone.h,v
> :retrieving revision 1.13
> :diff -u -w -r1.13 vm_zone.h
> :--- vm_zone.h        1999/08/28 00:52:44     1.13
> :+++ vm_zone.h        2000/12/27 00:59:14
> :@@ -43,7 +43,6 @@
> :     struct vm_zone  *znext;         /* list of zones for sysctl */
> : } *vm_zone_t;
> : 
> :-
> : void                zerror __P((int)) __dead2;
> : vm_zone_t   zinit __P((char *name, int size, int nentries, int flags,
> :                        int zalloc));
> :@@ -57,77 +56,16 @@
> :                            int nitems));
> : void *              _zget __P((vm_zone_t z));
> : 
> :-#define ZONE_ERROR_INVALID 0
> :-#define ZONE_ERROR_NOTFREE 1
> :-#define ZONE_ERROR_ALREADYFREE 2
> :-
> :-#define ZONE_ROUNDING       32
> :-
> :-#define ZENTRY_FREE 0x12342378
> :-/*
> :- * void *zalloc(vm_zone_t zone) --
> :- *  Returns an item from a specified zone.
> :- *
> :- * void zfree(vm_zone_t zone, void *item) --
> :- *  Frees an item back to a specified zone.
> :- */
> :-static __inline__ void *
> :-_zalloc(vm_zone_t z)
> :-{
> :-    void *item;
> :-
> :-#ifdef INVARIANTS
> :-    if (z == 0)
> :-            zerror(ZONE_ERROR_INVALID);
> :-#endif
> :-
> :-    if (z->zfreecnt <= z->zfreemin)
> :-            return _zget(z);
> :-
> :-    item = z->zitems;
> :-    z->zitems = ((void **) item)[0];
> :-#ifdef INVARIANTS
> :-    if (((void **) item)[1] != (void *) ZENTRY_FREE)
> :-            zerror(ZONE_ERROR_NOTFREE);
> :-    ((void **) item)[1] = 0;
> :-#endif
> :-
> :-    z->zfreecnt--;
> :-    z->znalloc++;
> :-    return item;
> :-}
> :-
> :-static __inline__ void
> :-_zfree(vm_zone_t z, void *item)
> :-{
> :-    ((void **) item)[0] = z->zitems;
> :-#ifdef INVARIANTS
> :-    if (((void **) item)[1] == (void *) ZENTRY_FREE)
> :-            zerror(ZONE_ERROR_ALREADYFREE);
> :-    ((void **) item)[1] = (void *) ZENTRY_FREE;
> :-#endif
> :-    z->zitems = item;
> :-    z->zfreecnt++;
> :-}
> :-
> : static __inline__ void *
> : zalloc(vm_zone_t z)
> : {
> :-#if defined(SMP)
> :     return zalloci(z);
> :-#else
> :-    return _zalloc(z);
> :-#endif
> : }
> : 
> : static __inline__ void
> : zfree(vm_zone_t z, void *item)
> : {
> :-#ifdef SMP
> :     zfreei(z, item);
> :-#else
> :-    _zfree(z, item);
> :-#endif
> : }
> : 
> :-#endif
> :+#endif /* _SYS_ZONE_H */
> :
> :--=-=-=--
> :
> :
> :To Unsubscribe: send mail to [EMAIL PROTECTED]
> :with "unsubscribe freebsd-current" in the body of the message
> :
> 
> 
> 
> To Unsubscribe: send mail to [EMAIL PROTECTED]
> with "unsubscribe freebsd-current" in the body of the message
> 
--
Mark Murray
Warning: this .sig is umop ap!sdn


To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message

Reply via email to