qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v1 01/17] qemu/obj_pool.h: introduce object allo


From: Ming Lei
Subject: Re: [Qemu-devel] [PATCH v1 01/17] qemu/obj_pool.h: introduce object allocation pool
Date: Wed, 6 Aug 2014 10:35:14 +0800

On Tue, Aug 5, 2014 at 7:55 PM, Eric Blake <address@hidden> wrote:
> On 08/04/2014 09:33 PM, Ming Lei wrote:
>> This patch introduces object allocation pool for speeding up
>> object allocation in fast path.
>>
>> Signed-off-by: Ming Lei <address@hidden>
>> ---
>>  include/qemu/obj_pool.h |   64 
>> +++++++++++++++++++++++++++++++++++++++++++++++
>>  1 file changed, 64 insertions(+)
>>  create mode 100644 include/qemu/obj_pool.h
>>
>> diff --git a/include/qemu/obj_pool.h b/include/qemu/obj_pool.h
>> new file mode 100644
>> index 0000000..94b5f49
>> --- /dev/null
>> +++ b/include/qemu/obj_pool.h
>> @@ -0,0 +1,64 @@
>> +#ifndef QEMU_OBJ_POOL_HEAD
>> +#define QEMU_OBJ_POOL_HEAD
>
> Missing copyright boilerplate.  According to LICENSE, that makes this
> file GPLv2+, but I'd much rather you make it explicit.
>
>> +
>> +typedef struct {
>> +    unsigned int size;
>> +    unsigned int cnt;
>
> size_t feels better for sizes.  int may be okay in this case, but
> definitely consider if size_t is appropriate.

Sounds good.

>
>> +
>> +    void **free_obj;
>> +    int free_idx;
>> +
>> +    char *objs;
>> +} ObjPool;
>> +
>> +static inline void obj_pool_init(ObjPool *op, void *objs_buf, void 
>> **free_objs,
>> +                                 unsigned int obj_size, unsigned cnt)
>> +{
>> +    int i;
>> +
>> +    op->objs = (char *)objs_buf;
>
> Why the cast? This is C, not C++.

Right, the cast isn't needed.

>
>> +    op->free_obj = free_objs;
>> +    op->size = obj_size;
>> +    op->cnt = cnt;
>> +
>> +    for (i = 0; i < op->cnt; i++) {
>> +        op->free_obj[i] = (void *)&op->objs[i * op->size];
>
> Again, why the cast?

Right too.

>
>
>> +static inline bool obj_pool_has_obj(ObjPool *op, void *obj)
>> +{
>> +    return op && (unsigned long)obj >= (unsigned long)&op->objs[0] &&
>> +           (unsigned long)obj <=
>> +           (unsigned long)&op->objs[(op->cnt - 1) * op->size];
>
> uintptr_t, not unsigned long.  You are asking for problems on 64-bit
> mingw, where unsigned long is 32 bits but uintptr_t is 64 bits.

Good point, it is the 1st time for me to know the mingw long magic.


Thanks,



reply via email to

[Prev in Thread] Current Thread [Next in Thread]