On Mon, Jul 26, 2010 at 02:02:46PM +0900, Isaku Yamahata wrote:
When allocating bar, overflow can occur. So add overflow check and don't allocate bar if overflowed. Overflow check is ugly, but necessary. Another suggested way is to change related variables u64 from u32 thus overflow can't occur because the related value are all u32 addressable. Anyway even with u64, it is necessary to the resulted value > max_u32.
I wonder if we could create malloc zones for this and then use pmm_alloc. The pmm_alloc function already handles overflow and alignments.
One difficulty, though, is that pmm_alloc doesn't guarentee linear allocations, and it looks like pci_bios_init_device_bridge assumes this.
-Kevin
On Mon, Jul 26, 2010 at 09:45:42PM -0400, Kevin O'Connor wrote:
On Mon, Jul 26, 2010 at 02:02:46PM +0900, Isaku Yamahata wrote:
When allocating bar, overflow can occur. So add overflow check and don't allocate bar if overflowed. Overflow check is ugly, but necessary. Another suggested way is to change related variables u64 from u32 thus overflow can't occur because the related value are all u32 addressable. Anyway even with u64, it is necessary to the resulted value > max_u32.
I wonder if we could create malloc zones for this and then use pmm_alloc. The pmm_alloc function already handles overflow and alignments.
One difficulty, though, is that pmm_alloc doesn't guarentee linear allocations, and it looks like pci_bios_init_device_bridge assumes this.
Yes, contiguous allocation is necessary for bridge filtering. Anyway I'll give pmm_malloc() a try and see what can be done.