Patchwork [8/9] eepro100: Fix mapping of flash memory

login
register
mail settings
Submitter Stefan Weil
Date April 6, 2010, 11:44 a.m.
Message ID <1270554249-24861-9-git-send-email-weil@mail.berlios.de>
Download mbox | patch
Permalink /patch/49506/
State New
Headers show

Comments

Stefan Weil - April 6, 2010, 11:44 a.m.
Signed-off-by: Stefan Weil <weil@mail.berlios.de>
---
 hw/eepro100.c |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)
Michael S. Tsirkin - April 6, 2010, 11:57 a.m.
On Tue, Apr 06, 2010 at 01:44:08PM +0200, Stefan Weil wrote:
> Signed-off-by: Stefan Weil <weil@mail.berlios.de>
> ---
>  hw/eepro100.c |    5 +++--
>  1 files changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/hw/eepro100.c b/hw/eepro100.c
> index f0acdbc..2401888 100644
> --- a/hw/eepro100.c
> +++ b/hw/eepro100.c
> @@ -1622,8 +1622,9 @@ static void pci_mmio_map(PCIDevice * pci_dev, int region_num,
>            "size=0x%08"FMT_PCIBUS", type=%d\n",
>            region_num, addr, size, type));
>  
> -    if (region_num == 0) {
> -        /* Map control / status registers. */
> +    assert(region_num == 0 || region_num == 2);
> +    if (region_num == 0 || region_num == 2) {

Looks a bit strange ...  Why do we need the if here?

> +        /* Map control / status registers and flash. */
>          cpu_register_physical_memory(addr, size, s->mmio_index);
>          s->region[region_num] = addr;
>      }
> -- 
> 1.7.0
Stefan Weil - April 6, 2010, 2:23 p.m.
Michael S. Tsirkin schrieb:
> On Tue, Apr 06, 2010 at 01:44:08PM +0200, Stefan Weil wrote:
>   
>> Signed-off-by: Stefan Weil <weil@mail.berlios.de>
>> ---
>>  hw/eepro100.c |    5 +++--
>>  1 files changed, 3 insertions(+), 2 deletions(-)
>>
>> diff --git a/hw/eepro100.c b/hw/eepro100.c
>> index f0acdbc..2401888 100644
>> --- a/hw/eepro100.c
>> +++ b/hw/eepro100.c
>> @@ -1622,8 +1622,9 @@ static void pci_mmio_map(PCIDevice * pci_dev, int region_num,
>>            "size=0x%08"FMT_PCIBUS", type=%d\n",
>>            region_num, addr, size, type));
>>  
>> -    if (region_num == 0) {
>> -        /* Map control / status registers. */
>> +    assert(region_num == 0 || region_num == 2);
>> +    if (region_num == 0 || region_num == 2) {
>>     
>
> Looks a bit strange ...  Why do we need the if here?
>   

It is not needed if everything works as it should.

For compilations without NDEBUG, assert will catch
a wrong region_num anyway.

If code is compiled with NDEBUG, the assert does
nothing, so the if is an additional guard.

>   
>> +        /* Map control / status registers and flash. */
>>          cpu_register_physical_memory(addr, size, s->mmio_index);
>>          s->region[region_num] = addr;
>>      }
>> -- 
>> 1.7.0
>>
Michael S. Tsirkin - April 6, 2010, 2:30 p.m.
On Tue, Apr 06, 2010 at 04:23:41PM +0200, Stefan Weil wrote:
> Michael S. Tsirkin schrieb:
> > On Tue, Apr 06, 2010 at 01:44:08PM +0200, Stefan Weil wrote:
> >   
> >> Signed-off-by: Stefan Weil <weil@mail.berlios.de>
> >> ---
> >>  hw/eepro100.c |    5 +++--
> >>  1 files changed, 3 insertions(+), 2 deletions(-)
> >>
> >> diff --git a/hw/eepro100.c b/hw/eepro100.c
> >> index f0acdbc..2401888 100644
> >> --- a/hw/eepro100.c
> >> +++ b/hw/eepro100.c
> >> @@ -1622,8 +1622,9 @@ static void pci_mmio_map(PCIDevice * pci_dev, int region_num,
> >>            "size=0x%08"FMT_PCIBUS", type=%d\n",
> >>            region_num, addr, size, type));
> >>  
> >> -    if (region_num == 0) {
> >> -        /* Map control / status registers. */
> >> +    assert(region_num == 0 || region_num == 2);
> >> +    if (region_num == 0 || region_num == 2) {
> >>     
> >
> > Looks a bit strange ...  Why do we need the if here?
> >   
> 
> It is not needed if everything works as it should.
> 
> For compilations without NDEBUG, assert will catch
> a wrong region_num anyway.
> 
> If code is compiled with NDEBUG, the assert does
> nothing, so the if is an additional guard.

We don't need the guard though: the only way to get
non 0 and non 2 region is because of a bug in code.
So the check is just a debugging aid.

> >   
> >> +        /* Map control / status registers and flash. */
> >>          cpu_register_physical_memory(addr, size, s->mmio_index);
> >>          s->region[region_num] = addr;
> >>      }
> >> -- 
> >> 1.7.0
> >>

Patch

diff --git a/hw/eepro100.c b/hw/eepro100.c
index f0acdbc..2401888 100644
--- a/hw/eepro100.c
+++ b/hw/eepro100.c
@@ -1622,8 +1622,9 @@  static void pci_mmio_map(PCIDevice * pci_dev, int region_num,
           "size=0x%08"FMT_PCIBUS", type=%d\n",
           region_num, addr, size, type));
 
-    if (region_num == 0) {
-        /* Map control / status registers. */
+    assert(region_num == 0 || region_num == 2);
+    if (region_num == 0 || region_num == 2) {
+        /* Map control / status registers and flash. */
         cpu_register_physical_memory(addr, size, s->mmio_index);
         s->region[region_num] = addr;
     }