On Wed, 27 Jul 2011, David Young wrote: > On Wed, Jul 27, 2011 at 04:58:23PM +0000, Eduardo Horvath wrote: > > On Wed, 27 Jul 2011, David Young wrote: > > > > > There are a couple of changes to the API that I would like to make. > > > First, I don't think that vmem_addr_t 0 should be reserved for error > > > indications (0 == VMEM_ADDR_NULL), but the API should change from > > > this: > > > > I'd recommend returning -1 on error. 0 is a valid address, but while -1 > > is a valid address, when do you ever use this interface to allocate > > something that starts at address -1? And it gets around all the noxious > > problems involved in returning data through reference parameters. > > I don't know. Suppose sizeof(vmem_addr_t) == sizeof(uint32_t). Which > of these cases should fail, and on which statement? > > Case A: > > 1 vm = vmem_create("test", 0xffffffff, 1, 0, NULL, NULL, NULL, 1, > 2 VM_SLEEP, IPL_NONE); > 3 p = vmem_alloc(vm, 1, VM_SLEEP); > > Case B: > > 1 vm = vmem_create("test", 0xfffffffe, 2, 0, NULL, NULL, NULL, 1, > 2 VM_SLEEP, IPL_NONE); > 3 p = vmem_alloc(vm, 2, VM_SLEEP); > > Case C: > > 1 vm = vmem_create("test", 0xfffffffe, 2, 0, NULL, NULL, NULL, 1, > 2 VM_SLEEP, IPL_NONE); > 3 p = vmem_alloc(vm, 1, VM_SLEEP); > 4 q = vmem_alloc(vm, 1, VM_SLEEP);
All of them should fail in all the routines since you're specifying a quantum of 0. This means you can only allocate multiples of 0 items from the list. OTOH, how many times have you seen code like this: foo(vmem_t *v) { void *p; vmem_alloc(v, 52, 0, (vmem_addr_t *)&p); .... which has implementation defined functionality. Eduardo