From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ben Thomas Subject: page_alloc query Date: Tue, 06 Mar 2007 17:10:32 -0500 Message-ID: <45EDE6D8.2040505@virtualiron.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org Hi, The following code is causing some questions. Perhaps someone could help explain it... (xen/common/page_alloc.c) Why are the zones unsigned ints when they are used as indices ? The ASSERTS do checks to keep you out of some amount of trouble, but the loop appears to be able to get you quickly into trouble by driving the index negative and with a check that doesn't appear to be effective. static struct page_info *alloc_heap_pages( unsigned int zone_lo, unsigned zone_hi, unsigned int cpu, unsigned int order) { . . . ASSERT(zone_lo <= zone_hi); ASSERT(zone_hi < NR_ZONES); . . . for ( zone = zone_hi; zone >= zone_lo; --zone ) { /* check if target node can support the allocation */ if ( avail[node] && (avail[node][zone] >= request) ) Has it just been a long day and I'm not reading this correctly ? The older version of this code didn't appear to operate in this fashion. Is a simple change of unsigned -> signed sufficient here ? (While it has been a long day, and it could be failing neurons, this code has just crashed recently due to a bad index, so....) I have to run, and can't fix this right now, so I'll settle for this query. Thanks, -b -- ------------------------------------------------------------------------ Ben Thomas Virtual Iron Software bthomas@virtualiron.com Tower 1, Floor 2 978-849-1214 900 Chelmsford Street Lowell, MA 01851