--- Begin Message ---diff -ruNp OLD/kernel/config.c NEW/kernel/config.c --- OLD/kernel/config.c 2004-01-31 15:06:36.000000000 +0000 +++ NEW/kernel/config.c 2004-03-25 00:42:36.000000000 +0000 @@ -922,12 +922,8 @@ STATIC void Config_Buffers(BYTE * pLine) COUNT nBuffers; /* Get the argument */ - if (GetNumArg(pLine, &nBuffers) == (BYTE *) 0) - return; - - /* Got the value, assign either default or new value */ - Config.cfgBuffers = - (nBuffers < 0 ? nBuffers : max(Config.cfgBuffers, nBuffers)); + if (GetNumArg(pLine, &nBuffers)) + Config.cfgBuffers = nBuffers; } /** @@ -1763,77 +1759,75 @@ STATIC COUNT strcasecmp(REG BYTE * d, RE that saves some relocation problems */ -VOID config_init_buffers(COUNT anzBuffers) +VOID config_init_buffers(int wantedbuffers) { - REG WORD i; struct buffer FAR *pbuffer; - unsigned wantedbuffers = anzBuffers; + unsigned buffers = 0; - if (anzBuffers < 0) - { - wantedbuffers = anzBuffers = -anzBuffers; - } + /* fill HMA with buffers if BUFFERS count >=0 and DOS in HMA */ + if (wantedbuffers < 0) + wantedbuffers = -wantedbuffers; else if (HMAState == HMA_DONE) - { - anzBuffers = (0xfff0 - HMAFree) / sizeof(struct buffer); - } + buffers = (0xFFF0 - HMAFree) / sizeof (struct buffer); - anzBuffers = max(anzBuffers, 6); - if (anzBuffers > 99) + if (wantedbuffers < 6) /* min 6 buffers */ + wantedbuffers = 6; + if (wantedbuffers > 99) /* max 99 buffers */ { - printf("BUFFERS=%u not supported, reducing to 99\n", anzBuffers); - anzBuffers = 99; + printf("BUFFERS=%u not supported, reducing to 99\n", wantedbuffers); + wantedbuffers = 99; } - LoL->nbuffers = anzBuffers; - - lpTop = lpOldTop; + if (buffers < wantedbuffers) /* not less than requested */ + buffers = wantedbuffers; + LoL->nbuffers = buffers; + + lpTop = lpOldTop; LoL->inforecptr = &LoL->firstbuf; - - { - size_t bytes = sizeof(struct buffer) * anzBuffers; - pbuffer = HMAalloc(bytes); - if (pbuffer == NULL) + { + size_t bytes = sizeof (struct buffer) * buffers; + if ((pbuffer = HMAalloc(bytes)) == NULL) { pbuffer = KernelAlloc(bytes, 'B', 0); + if (HMAState == HMA_DONE) + firstAvailableBuf = MK_FP (/*HMASEG*/0xFFFF, HMAFree); } else { LoL->bufloc = LOC_HMA; LoL->deblock_buf = KernelAlloc(SEC_SIZE, 'B', 0); + + /* space in HMA beyond requested buffers available as user space */ + firstAvailableBuf = pbuffer + wantedbuffers; } } - LoL->firstbuf = pbuffer; - DebugPrintf(("init_buffers (size %u) at", sizeof(struct buffer))); - DebugPrintf((" (%p)", LoL->firstbuf)); + DebugPrintf(("init_buffers (size %u) at (%p)", + sizeof(struct buffer), pbuffer)); - pbuffer->b_prev = FP_OFF(pbuffer + (anzBuffers-1)); - for (i = 1; i < anzBuffers; ++i) + buffers--; + pbuffer->b_prev = FP_OFF(pbuffer + buffers); { - if (i == wantedbuffers) + int i = buffers; + do { - firstAvailableBuf = pbuffer; - } - pbuffer->b_next = FP_OFF(pbuffer + 1); - pbuffer++; - pbuffer->b_prev = FP_OFF(pbuffer - 1); - } - pbuffer->b_next = FP_OFF(pbuffer - (anzBuffers-1)); - - /* now, we can have quite some buffers in HMA - -- up to 50 for KE38616. - so we fill the HMA with buffers - but not if the BUFFERS count is negative ;-) - */ + pbuffer->b_next = FP_OFF(pbuffer + 1); + pbuffer++; + pbuffer->b_prev = FP_OFF(pbuffer - 1); + } while (--i); + } + pbuffer->b_next = FP_OFF(pbuffer - buffers); DebugPrintf((" done\n")); - if (FP_SEG(pbuffer) == 0xffff) + if (FP_SEG(pbuffer) == /*HMASEG*/0xFFFF) + { + buffers++; printf("Kernel: allocated %d Diskbuffers = %u Bytes in HMA\n", - anzBuffers, anzBuffers * sizeof(struct buffer)); + buffers, buffers * sizeof(struct buffer)); + } } /*------------------------------------------------------- This SF.Net email is sponsored by: IBM Linux Tutorials Free Linux tutorial presented by Daniel Robbins, President and CEO of GenToo technologies. Learn everything from fundamentals to system administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click _______________________________________________ Freedos-kernel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/freedos-kernel
--- End Message ---
