Linux对I/O端口资源的管理(1)

Linux对I/O端口资源的管理(1)》摘要: ④最后,返回所分配的resource结构的指针。 3.3.2 I/O Region的释放 函数__release_region()实现在一个父资源节点parent中释放给定范围的I/O Region。实际上该函数的实现思想与__release_res…

④最后,返回所分配的resource结构的指针。

3.3.2 I/O Region的释放

函数__release_region()实现在一个父资源节点parent中释放给定范围的I/O Region。实际上该函数的实现思想与__release_resource()相类似。其源代码如下:

void __release_region(struct resource *parent,

unsigned long start, unsigned long n)

{

struct resource **p;

unsigned long end;

p = &parent->child;

end = start + n - 1;

for (;;) {

struct resource *res = *p;

if (!res)

break;

if (res->start <= start && res->end >= end) {

if (!(res->flags & IORESOURCE_BUSY)) {

p = &res->child;

continue;

}

if (res->start != start' 'res->end != end)

break;

*p = res->sibling;

kfree(res);

return;

}

p = &res->sibling;

}

printk("Trying to free nonexistent resource