All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/4] PCI: define PCIBUS_MAX_DEVICES and PCI_FUNCTIONS_PER_DEVICE in pci.h
@ 2010-08-24 13:25 ` Ken CC
  0 siblings, 0 replies; 16+ messages in thread
From: Ken CC @ 2010-08-24 13:25 UTC (permalink / raw)
  To: avi, yamahata, kvm; +Cc: qemu-devel, mst

And update the max function number used in struct PCIBus{} to
PCIBUS_MAX_FUNCTIONS = PCI_FUNCTIONS_PER_DEVICE * PCIBUS_MAX_DEVICES

TODO:
    according to Avi Kivity, PCIBus.devices[] should be renamed to functions[]

Signed-off-by: Ken CC <ken.ccao@gmail.com>
---
 hw/pci.c |    2 +-
 hw/pci.h |    2 ++
 2 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/hw/pci.c b/hw/pci.c
index 70dbace..9234fe3 100644
--- a/hw/pci.c
+++ b/hw/pci.c
@@ -47,7 +47,7 @@ struct PCIBus {
     pci_hotplug_fn hotplug;
     DeviceState *hotplug_qdev;
     void *irq_opaque;
-    PCIDevice *devices[256];
+    PCIDevice *devices[PCIBUS_MAX_DEVICES * PCI_FUNCTIONS_PER_DEVICE];
     PCIDevice *parent_dev;
     target_phys_addr_t mem_base;
 
diff --git a/hw/pci.h b/hw/pci.h
index ccb99d0..eb97b76 100644
--- a/hw/pci.h
+++ b/hw/pci.h
@@ -17,6 +17,8 @@ struct kvm_irq_routing_entry;
 #define PCI_SLOT(devfn)         (((devfn) >> 3) & 0x1f)
 #define PCI_FUNC(devfn)         ((devfn) & 0x07)
 #define PCI_FUNC_MAX            8
+#define PCI_FUNCTIONS_PER_DEVICE 8
+#define PCIBUS_MAX_DEVICES 32
 
 /* Class, Vendor and Device IDs from Linux's pci_ids.h */
 #include "pci_ids.h"


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [Qemu-devel] [PATCH 1/4] PCI: define PCIBUS_MAX_DEVICES and PCI_FUNCTIONS_PER_DEVICE in pci.h
@ 2010-08-24 13:25 ` Ken CC
  0 siblings, 0 replies; 16+ messages in thread
From: Ken CC @ 2010-08-24 13:25 UTC (permalink / raw)
  To: avi, yamahata, kvm; +Cc: qemu-devel, mst

And update the max function number used in struct PCIBus{} to
PCIBUS_MAX_FUNCTIONS = PCI_FUNCTIONS_PER_DEVICE * PCIBUS_MAX_DEVICES

TODO:
    according to Avi Kivity, PCIBus.devices[] should be renamed to functions[]

Signed-off-by: Ken CC <ken.ccao@gmail.com>
---
 hw/pci.c |    2 +-
 hw/pci.h |    2 ++
 2 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/hw/pci.c b/hw/pci.c
index 70dbace..9234fe3 100644
--- a/hw/pci.c
+++ b/hw/pci.c
@@ -47,7 +47,7 @@ struct PCIBus {
     pci_hotplug_fn hotplug;
     DeviceState *hotplug_qdev;
     void *irq_opaque;
-    PCIDevice *devices[256];
+    PCIDevice *devices[PCIBUS_MAX_DEVICES * PCI_FUNCTIONS_PER_DEVICE];
     PCIDevice *parent_dev;
     target_phys_addr_t mem_base;
 
diff --git a/hw/pci.h b/hw/pci.h
index ccb99d0..eb97b76 100644
--- a/hw/pci.h
+++ b/hw/pci.h
@@ -17,6 +17,8 @@ struct kvm_irq_routing_entry;
 #define PCI_SLOT(devfn)         (((devfn) >> 3) & 0x1f)
 #define PCI_FUNC(devfn)         ((devfn) & 0x07)
 #define PCI_FUNC_MAX            8
+#define PCI_FUNCTIONS_PER_DEVICE 8
+#define PCIBUS_MAX_DEVICES 32
 
 /* Class, Vendor and Device IDs from Linux's pci_ids.h */
 #include "pci_ids.h"

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 2/4] pci init: fail qemu if devfn exceeding the max function number supported on bus
  2010-08-24 13:25 ` [Qemu-devel] " Ken CC
@ 2010-08-24 13:27   ` Ken CC
  -1 siblings, 0 replies; 16+ messages in thread
From: Ken CC @ 2010-08-24 13:27 UTC (permalink / raw)
  To: yamahata, avi, kvm; +Cc: qemu-devel, mst

Check if devfn < PCIBUS_MAX_DEVICES * PCI_FUNCTIONS_PER_DEVICE

Signed-off-by: Ken CC <ken.ccao@gmail.com>
---
 hw/pci.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/hw/pci.c b/hw/pci.c
index 9234fe3..fc4becd 100644
--- a/hw/pci.c
+++ b/hw/pci.c
@@ -747,6 +747,7 @@ static PCIDevice *do_pci_register_device(PCIDevice *pci_dev, PCIBus *bus,
                                          PCIConfigWriteFunc *config_write,
                                          bool is_bridge)
 {
+    assert(devfn / PCI_FUNCTIONS_PER_DEVICE < PCIBUS_MAX_DEVICES);
     if (devfn < 0) {
         for(devfn = bus->devfn_min ; devfn < ARRAY_SIZE(bus->devices);
             devfn += PCI_FUNC_MAX) {


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [Qemu-devel] [PATCH 2/4] pci init: fail qemu if devfn exceeding the max function number supported on bus
@ 2010-08-24 13:27   ` Ken CC
  0 siblings, 0 replies; 16+ messages in thread
From: Ken CC @ 2010-08-24 13:27 UTC (permalink / raw)
  To: yamahata, avi, kvm; +Cc: qemu-devel, mst

Check if devfn < PCIBUS_MAX_DEVICES * PCI_FUNCTIONS_PER_DEVICE

Signed-off-by: Ken CC <ken.ccao@gmail.com>
---
 hw/pci.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/hw/pci.c b/hw/pci.c
index 9234fe3..fc4becd 100644
--- a/hw/pci.c
+++ b/hw/pci.c
@@ -747,6 +747,7 @@ static PCIDevice *do_pci_register_device(PCIDevice *pci_dev, PCIBus *bus,
                                          PCIConfigWriteFunc *config_write,
                                          bool is_bridge)
 {
+    assert(devfn / PCI_FUNCTIONS_PER_DEVICE < PCIBUS_MAX_DEVICES);
     if (devfn < 0) {
         for(devfn = bus->devfn_min ; devfn < ARRAY_SIZE(bus->devices);
             devfn += PCI_FUNC_MAX) {

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 3/4] Check pci slot number against PCIBUS_MAX_DEVICES in parse_pci_devfn
  2010-08-24 13:25 ` [Qemu-devel] " Ken CC
@ 2010-08-24 13:27   ` Ken CC
  -1 siblings, 0 replies; 16+ messages in thread
From: Ken CC @ 2010-08-24 13:27 UTC (permalink / raw)
  To: yamahata, avi, kvm; +Cc: qemu-devel, mst

If pci addr provided from command line is bigger than 32,
PCIBUS_MAX_DEVICES, return error -EINVAL.

32 << 3 | 7 == 256 (PCIBUS_MAX_FUNCTIONS)
PCIBUS_MAX_FUNCTIONS = PCIBUS_MAX_DEVICES * PCI_FUNCTIONS_PER_DEVICE

Signed-off-by: Ken CC <ken.ccao@gmail.com>
---
 hw/qdev-properties.c |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/hw/qdev-properties.c b/hw/qdev-properties.c
index 9219cd7..565fd08 100644
--- a/hw/qdev-properties.c
+++ b/hw/qdev-properties.c
@@ -1,5 +1,5 @@
 #include "net.h"
-#include "qdev.h"
+#include "pci.h"
 #include "qerror.h"
 
 void *qdev_get_prop_ptr(DeviceState *dev, Property *prop)
@@ -514,6 +514,8 @@ static int parse_pci_devfn(DeviceState *dev, Property *prop, const char *str)
             return -EINVAL;
         }
     }
+    if (slot >= PCIBUS_MAX_DEVICES)
+        return -EINVAL;
     if (str[n] != '\0')
         return -EINVAL;
     if (fn > 7)


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [Qemu-devel] [PATCH 3/4] Check pci slot number against PCIBUS_MAX_DEVICES in parse_pci_devfn
@ 2010-08-24 13:27   ` Ken CC
  0 siblings, 0 replies; 16+ messages in thread
From: Ken CC @ 2010-08-24 13:27 UTC (permalink / raw)
  To: yamahata, avi, kvm; +Cc: qemu-devel, mst

If pci addr provided from command line is bigger than 32,
PCIBUS_MAX_DEVICES, return error -EINVAL.

32 << 3 | 7 == 256 (PCIBUS_MAX_FUNCTIONS)
PCIBUS_MAX_FUNCTIONS = PCIBUS_MAX_DEVICES * PCI_FUNCTIONS_PER_DEVICE

Signed-off-by: Ken CC <ken.ccao@gmail.com>
---
 hw/qdev-properties.c |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/hw/qdev-properties.c b/hw/qdev-properties.c
index 9219cd7..565fd08 100644
--- a/hw/qdev-properties.c
+++ b/hw/qdev-properties.c
@@ -1,5 +1,5 @@
 #include "net.h"
-#include "qdev.h"
+#include "pci.h"
 #include "qerror.h"
 
 void *qdev_get_prop_ptr(DeviceState *dev, Property *prop)
@@ -514,6 +514,8 @@ static int parse_pci_devfn(DeviceState *dev, Property *prop, const char *str)
             return -EINVAL;
         }
     }
+    if (slot >= PCIBUS_MAX_DEVICES)
+        return -EINVAL;
     if (str[n] != '\0')
         return -EINVAL;
     if (fn > 7)

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH 4/4] Rename PCI_FUNC_MAX to PCI_FUNCTIONS_PER_DEVICES in pci.[ch]
  2010-08-24 13:25 ` [Qemu-devel] " Ken CC
@ 2010-08-24 13:28   ` Ken CC
  -1 siblings, 0 replies; 16+ messages in thread
From: Ken CC @ 2010-08-24 13:28 UTC (permalink / raw)
  To: yamahata, avi, kvm; +Cc: qemu-devel, mst

PCI_FUNC_MAX is introduced by
6eab3de16d36c48a983366b09d0a0029a5260bc3
and
6fa84913eccec4266a27c81ae88465f6790742b9
which should be safe to rename to PCI_FUNCTIONS_PER_DEVICES.

Signed-off-by: Ken CC <ken.ccao@gmail.com>
---
 hw/pci.c |    4 ++--
 hw/pci.h |    1 -
 2 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/hw/pci.c b/hw/pci.c
index fc4becd..3901455 100644
--- a/hw/pci.c
+++ b/hw/pci.c
@@ -711,7 +711,7 @@ static int pci_init_multifunction(PCIBus *bus, PCIDevice *dev)
         return 0;
     }
     /* function 0 indicates single function, so function > 0 must be NULL */
-    for (func = 1; func < PCI_FUNC_MAX; ++func) {
+    for (func = 1; func < PCI_FUNCTIONS_PER_DEVICE; ++func) {
         if (bus->devices[PCI_DEVFN(slot, func)]) {
             error_report("PCI: %x.0 indicates single function, "
                          "but %x.%x is already populated.",
@@ -750,7 +750,7 @@ static PCIDevice *do_pci_register_device(PCIDevice *pci_dev, PCIBus *bus,
     assert(devfn / PCI_FUNCTIONS_PER_DEVICE < PCIBUS_MAX_DEVICES);
     if (devfn < 0) {
         for(devfn = bus->devfn_min ; devfn < ARRAY_SIZE(bus->devices);
-            devfn += PCI_FUNC_MAX) {
+            devfn += PCI_FUNCTIONS_PER_DEVICE) {
             if (!bus->devices[devfn])
                 goto found;
         }
diff --git a/hw/pci.h b/hw/pci.h
index eb97b76..f6fb6d8 100644
--- a/hw/pci.h
+++ b/hw/pci.h
@@ -16,7 +16,6 @@ struct kvm_irq_routing_entry;
 #define PCI_DEVFN(slot, func)   ((((slot) & 0x1f) << 3) | ((func) & 0x07))
 #define PCI_SLOT(devfn)         (((devfn) >> 3) & 0x1f)
 #define PCI_FUNC(devfn)         ((devfn) & 0x07)
-#define PCI_FUNC_MAX            8
 #define PCI_FUNCTIONS_PER_DEVICE 8
 #define PCIBUS_MAX_DEVICES 32
 


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [Qemu-devel] [PATCH 4/4] Rename PCI_FUNC_MAX to PCI_FUNCTIONS_PER_DEVICES in pci.[ch]
@ 2010-08-24 13:28   ` Ken CC
  0 siblings, 0 replies; 16+ messages in thread
From: Ken CC @ 2010-08-24 13:28 UTC (permalink / raw)
  To: yamahata, avi, kvm; +Cc: qemu-devel, mst

PCI_FUNC_MAX is introduced by
6eab3de16d36c48a983366b09d0a0029a5260bc3
and
6fa84913eccec4266a27c81ae88465f6790742b9
which should be safe to rename to PCI_FUNCTIONS_PER_DEVICES.

Signed-off-by: Ken CC <ken.ccao@gmail.com>
---
 hw/pci.c |    4 ++--
 hw/pci.h |    1 -
 2 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/hw/pci.c b/hw/pci.c
index fc4becd..3901455 100644
--- a/hw/pci.c
+++ b/hw/pci.c
@@ -711,7 +711,7 @@ static int pci_init_multifunction(PCIBus *bus, PCIDevice *dev)
         return 0;
     }
     /* function 0 indicates single function, so function > 0 must be NULL */
-    for (func = 1; func < PCI_FUNC_MAX; ++func) {
+    for (func = 1; func < PCI_FUNCTIONS_PER_DEVICE; ++func) {
         if (bus->devices[PCI_DEVFN(slot, func)]) {
             error_report("PCI: %x.0 indicates single function, "
                          "but %x.%x is already populated.",
@@ -750,7 +750,7 @@ static PCIDevice *do_pci_register_device(PCIDevice *pci_dev, PCIBus *bus,
     assert(devfn / PCI_FUNCTIONS_PER_DEVICE < PCIBUS_MAX_DEVICES);
     if (devfn < 0) {
         for(devfn = bus->devfn_min ; devfn < ARRAY_SIZE(bus->devices);
-            devfn += PCI_FUNC_MAX) {
+            devfn += PCI_FUNCTIONS_PER_DEVICE) {
             if (!bus->devices[devfn])
                 goto found;
         }
diff --git a/hw/pci.h b/hw/pci.h
index eb97b76..f6fb6d8 100644
--- a/hw/pci.h
+++ b/hw/pci.h
@@ -16,7 +16,6 @@ struct kvm_irq_routing_entry;
 #define PCI_DEVFN(slot, func)   ((((slot) & 0x1f) << 3) | ((func) & 0x07))
 #define PCI_SLOT(devfn)         (((devfn) >> 3) & 0x1f)
 #define PCI_FUNC(devfn)         ((devfn) & 0x07)
-#define PCI_FUNC_MAX            8
 #define PCI_FUNCTIONS_PER_DEVICE 8
 #define PCIBUS_MAX_DEVICES 32
 

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: [PATCH 1/4] PCI: define PCIBUS_MAX_DEVICES and PCI_FUNCTIONS_PER_DEVICE in pci.h
  2010-08-24 13:25 ` [Qemu-devel] " Ken CC
@ 2010-09-07 17:16   ` Michael S. Tsirkin
  -1 siblings, 0 replies; 16+ messages in thread
From: Michael S. Tsirkin @ 2010-09-07 17:16 UTC (permalink / raw)
  To: Ken CC; +Cc: avi, yamahata, kvm, qemu-devel

On Tue, Aug 24, 2010 at 09:25:26PM +0800, Ken CC wrote:
> And update the max function number used in struct PCIBus{} to
> PCIBUS_MAX_FUNCTIONS = PCI_FUNCTIONS_PER_DEVICE * PCIBUS_MAX_DEVICES
> 
> TODO:
>     according to Avi Kivity, PCIBus.devices[] should be renamed to functions[]
> 
> Signed-off-by: Ken CC <ken.ccao@gmail.com>
> ---
>  hw/pci.c |    2 +-
>  hw/pci.h |    2 ++
>  2 files changed, 3 insertions(+), 1 deletions(-)
> 
> diff --git a/hw/pci.c b/hw/pci.c
> index 70dbace..9234fe3 100644
> --- a/hw/pci.c
> +++ b/hw/pci.c
> @@ -47,7 +47,7 @@ struct PCIBus {
>      pci_hotplug_fn hotplug;
>      DeviceState *hotplug_qdev;
>      void *irq_opaque;
> -    PCIDevice *devices[256];
> +    PCIDevice *devices[PCIBUS_MAX_DEVICES * PCI_FUNCTIONS_PER_DEVICE];
>      PCIDevice *parent_dev;
>      target_phys_addr_t mem_base;
>  
> diff --git a/hw/pci.h b/hw/pci.h
> index ccb99d0..eb97b76 100644
> --- a/hw/pci.h
> +++ b/hw/pci.h
> @@ -17,6 +17,8 @@ struct kvm_irq_routing_entry;
>  #define PCI_SLOT(devfn)         (((devfn) >> 3) & 0x1f)
>  #define PCI_FUNC(devfn)         ((devfn) & 0x07)
>  #define PCI_FUNC_MAX            8
> +#define PCI_FUNCTIONS_PER_DEVICE 8
> +#define PCIBUS_MAX_DEVICES 32

PCI_FUNCTIONS_PER_DEVICE is same as PCI_FUNC_MAX. Why do we need another
macro?

>  /* Class, Vendor and Device IDs from Linux's pci_ids.h */
>  #include "pci_ids.h"

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Qemu-devel] Re: [PATCH 1/4] PCI: define PCIBUS_MAX_DEVICES and PCI_FUNCTIONS_PER_DEVICE in pci.h
@ 2010-09-07 17:16   ` Michael S. Tsirkin
  0 siblings, 0 replies; 16+ messages in thread
From: Michael S. Tsirkin @ 2010-09-07 17:16 UTC (permalink / raw)
  To: Ken CC; +Cc: yamahata, avi, kvm, qemu-devel

On Tue, Aug 24, 2010 at 09:25:26PM +0800, Ken CC wrote:
> And update the max function number used in struct PCIBus{} to
> PCIBUS_MAX_FUNCTIONS = PCI_FUNCTIONS_PER_DEVICE * PCIBUS_MAX_DEVICES
> 
> TODO:
>     according to Avi Kivity, PCIBus.devices[] should be renamed to functions[]
> 
> Signed-off-by: Ken CC <ken.ccao@gmail.com>
> ---
>  hw/pci.c |    2 +-
>  hw/pci.h |    2 ++
>  2 files changed, 3 insertions(+), 1 deletions(-)
> 
> diff --git a/hw/pci.c b/hw/pci.c
> index 70dbace..9234fe3 100644
> --- a/hw/pci.c
> +++ b/hw/pci.c
> @@ -47,7 +47,7 @@ struct PCIBus {
>      pci_hotplug_fn hotplug;
>      DeviceState *hotplug_qdev;
>      void *irq_opaque;
> -    PCIDevice *devices[256];
> +    PCIDevice *devices[PCIBUS_MAX_DEVICES * PCI_FUNCTIONS_PER_DEVICE];
>      PCIDevice *parent_dev;
>      target_phys_addr_t mem_base;
>  
> diff --git a/hw/pci.h b/hw/pci.h
> index ccb99d0..eb97b76 100644
> --- a/hw/pci.h
> +++ b/hw/pci.h
> @@ -17,6 +17,8 @@ struct kvm_irq_routing_entry;
>  #define PCI_SLOT(devfn)         (((devfn) >> 3) & 0x1f)
>  #define PCI_FUNC(devfn)         ((devfn) & 0x07)
>  #define PCI_FUNC_MAX            8
> +#define PCI_FUNCTIONS_PER_DEVICE 8
> +#define PCIBUS_MAX_DEVICES 32

PCI_FUNCTIONS_PER_DEVICE is same as PCI_FUNC_MAX. Why do we need another
macro?

>  /* Class, Vendor and Device IDs from Linux's pci_ids.h */
>  #include "pci_ids.h"

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 2/4] pci init: fail qemu if devfn exceeding the max function number supported on bus
  2010-08-24 13:27   ` [Qemu-devel] " Ken CC
@ 2010-09-07 17:19     ` Michael S. Tsirkin
  -1 siblings, 0 replies; 16+ messages in thread
From: Michael S. Tsirkin @ 2010-09-07 17:19 UTC (permalink / raw)
  To: Ken CC; +Cc: yamahata, avi, kvm, qemu-devel

On Tue, Aug 24, 2010 at 09:27:10PM +0800, Ken CC wrote:
> Check if devfn < PCIBUS_MAX_DEVICES * PCI_FUNCTIONS_PER_DEVICE
> 
> Signed-off-by: Ken CC <ken.ccao@gmail.com>
> ---
>  hw/pci.c |    1 +
>  1 files changed, 1 insertions(+), 0 deletions(-)
> 
> diff --git a/hw/pci.c b/hw/pci.c
> index 9234fe3..fc4becd 100644
> --- a/hw/pci.c
> +++ b/hw/pci.c
> @@ -747,6 +747,7 @@ static PCIDevice *do_pci_register_device(PCIDevice *pci_dev, PCIBus *bus,
>                                           PCIConfigWriteFunc *config_write,
>                                           bool is_bridge)
>  {
> +    assert(devfn / PCI_FUNCTIONS_PER_DEVICE < PCIBUS_MAX_DEVICES);

I guess it'll happen to work even for < 0, but it might be obvious
to only do this in >= 0 case.
Just remove the 'else' and stick the assert there.


>      if (devfn < 0) {
>          for(devfn = bus->devfn_min ; devfn < ARRAY_SIZE(bus->devices);
>              devfn += PCI_FUNC_MAX) {

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Qemu-devel] Re: [PATCH 2/4] pci init: fail qemu if devfn exceeding the max function number supported on bus
@ 2010-09-07 17:19     ` Michael S. Tsirkin
  0 siblings, 0 replies; 16+ messages in thread
From: Michael S. Tsirkin @ 2010-09-07 17:19 UTC (permalink / raw)
  To: Ken CC; +Cc: yamahata, avi, kvm, qemu-devel

On Tue, Aug 24, 2010 at 09:27:10PM +0800, Ken CC wrote:
> Check if devfn < PCIBUS_MAX_DEVICES * PCI_FUNCTIONS_PER_DEVICE
> 
> Signed-off-by: Ken CC <ken.ccao@gmail.com>
> ---
>  hw/pci.c |    1 +
>  1 files changed, 1 insertions(+), 0 deletions(-)
> 
> diff --git a/hw/pci.c b/hw/pci.c
> index 9234fe3..fc4becd 100644
> --- a/hw/pci.c
> +++ b/hw/pci.c
> @@ -747,6 +747,7 @@ static PCIDevice *do_pci_register_device(PCIDevice *pci_dev, PCIBus *bus,
>                                           PCIConfigWriteFunc *config_write,
>                                           bool is_bridge)
>  {
> +    assert(devfn / PCI_FUNCTIONS_PER_DEVICE < PCIBUS_MAX_DEVICES);

I guess it'll happen to work even for < 0, but it might be obvious
to only do this in >= 0 case.
Just remove the 'else' and stick the assert there.


>      if (devfn < 0) {
>          for(devfn = bus->devfn_min ; devfn < ARRAY_SIZE(bus->devices);
>              devfn += PCI_FUNC_MAX) {

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 3/4] Check pci slot number against PCIBUS_MAX_DEVICES in parse_pci_devfn
  2010-08-24 13:27   ` [Qemu-devel] " Ken CC
@ 2010-09-07 17:20     ` Michael S. Tsirkin
  -1 siblings, 0 replies; 16+ messages in thread
From: Michael S. Tsirkin @ 2010-09-07 17:20 UTC (permalink / raw)
  To: Ken CC; +Cc: yamahata, avi, kvm, qemu-devel

On Tue, Aug 24, 2010 at 09:27:41PM +0800, Ken CC wrote:
> If pci addr provided from command line is bigger than 32,
> PCIBUS_MAX_DEVICES, return error -EINVAL.
> 
> 32 << 3 | 7 == 256 (PCIBUS_MAX_FUNCTIONS)
> PCIBUS_MAX_FUNCTIONS = PCIBUS_MAX_DEVICES * PCI_FUNCTIONS_PER_DEVICE

Not really sure what these equations mean, the patch makes sense though,
we should validate input.

> Signed-off-by: Ken CC <ken.ccao@gmail.com>
> ---
>  hw/qdev-properties.c |    4 +++-
>  1 files changed, 3 insertions(+), 1 deletions(-)
> 
> diff --git a/hw/qdev-properties.c b/hw/qdev-properties.c
> index 9219cd7..565fd08 100644
> --- a/hw/qdev-properties.c
> +++ b/hw/qdev-properties.c
> @@ -1,5 +1,5 @@
>  #include "net.h"
> -#include "qdev.h"
> +#include "pci.h"
>  #include "qerror.h"
>  
>  void *qdev_get_prop_ptr(DeviceState *dev, Property *prop)
> @@ -514,6 +514,8 @@ static int parse_pci_devfn(DeviceState *dev, Property *prop, const char *str)
>              return -EINVAL;
>          }
>      }
> +    if (slot >= PCIBUS_MAX_DEVICES)
> +        return -EINVAL;
>      if (str[n] != '\0')
>          return -EINVAL;
>      if (fn > 7)

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Qemu-devel] Re: [PATCH 3/4] Check pci slot number against PCIBUS_MAX_DEVICES in parse_pci_devfn
@ 2010-09-07 17:20     ` Michael S. Tsirkin
  0 siblings, 0 replies; 16+ messages in thread
From: Michael S. Tsirkin @ 2010-09-07 17:20 UTC (permalink / raw)
  To: Ken CC; +Cc: yamahata, avi, kvm, qemu-devel

On Tue, Aug 24, 2010 at 09:27:41PM +0800, Ken CC wrote:
> If pci addr provided from command line is bigger than 32,
> PCIBUS_MAX_DEVICES, return error -EINVAL.
> 
> 32 << 3 | 7 == 256 (PCIBUS_MAX_FUNCTIONS)
> PCIBUS_MAX_FUNCTIONS = PCIBUS_MAX_DEVICES * PCI_FUNCTIONS_PER_DEVICE

Not really sure what these equations mean, the patch makes sense though,
we should validate input.

> Signed-off-by: Ken CC <ken.ccao@gmail.com>
> ---
>  hw/qdev-properties.c |    4 +++-
>  1 files changed, 3 insertions(+), 1 deletions(-)
> 
> diff --git a/hw/qdev-properties.c b/hw/qdev-properties.c
> index 9219cd7..565fd08 100644
> --- a/hw/qdev-properties.c
> +++ b/hw/qdev-properties.c
> @@ -1,5 +1,5 @@
>  #include "net.h"
> -#include "qdev.h"
> +#include "pci.h"
>  #include "qerror.h"
>  
>  void *qdev_get_prop_ptr(DeviceState *dev, Property *prop)
> @@ -514,6 +514,8 @@ static int parse_pci_devfn(DeviceState *dev, Property *prop, const char *str)
>              return -EINVAL;
>          }
>      }
> +    if (slot >= PCIBUS_MAX_DEVICES)
> +        return -EINVAL;
>      if (str[n] != '\0')
>          return -EINVAL;
>      if (fn > 7)

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH 4/4] Rename PCI_FUNC_MAX to PCI_FUNCTIONS_PER_DEVICES in pci.[ch]
  2010-08-24 13:28   ` [Qemu-devel] " Ken CC
@ 2010-09-07 17:22     ` Michael S. Tsirkin
  -1 siblings, 0 replies; 16+ messages in thread
From: Michael S. Tsirkin @ 2010-09-07 17:22 UTC (permalink / raw)
  To: Ken CC; +Cc: yamahata, avi, kvm, qemu-devel

On Tue, Aug 24, 2010 at 09:28:11PM +0800, Ken CC wrote:
> PCI_FUNC_MAX is introduced by
> 6eab3de16d36c48a983366b09d0a0029a5260bc3
> and
> 6fa84913eccec4266a27c81ae88465f6790742b9
> which should be safe to rename to PCI_FUNCTIONS_PER_DEVICES.
> 
> Signed-off-by: Ken CC <ken.ccao@gmail.com>

I liked the shorter name better ...

> ---
>  hw/pci.c |    4 ++--
>  hw/pci.h |    1 -
>  2 files changed, 2 insertions(+), 3 deletions(-)
> 
> diff --git a/hw/pci.c b/hw/pci.c
> index fc4becd..3901455 100644
> --- a/hw/pci.c
> +++ b/hw/pci.c
> @@ -711,7 +711,7 @@ static int pci_init_multifunction(PCIBus *bus, PCIDevice *dev)
>          return 0;
>      }
>      /* function 0 indicates single function, so function > 0 must be NULL */
> -    for (func = 1; func < PCI_FUNC_MAX; ++func) {
> +    for (func = 1; func < PCI_FUNCTIONS_PER_DEVICE; ++func) {
>          if (bus->devices[PCI_DEVFN(slot, func)]) {
>              error_report("PCI: %x.0 indicates single function, "
>                           "but %x.%x is already populated.",
> @@ -750,7 +750,7 @@ static PCIDevice *do_pci_register_device(PCIDevice *pci_dev, PCIBus *bus,
>      assert(devfn / PCI_FUNCTIONS_PER_DEVICE < PCIBUS_MAX_DEVICES);
>      if (devfn < 0) {
>          for(devfn = bus->devfn_min ; devfn < ARRAY_SIZE(bus->devices);
> -            devfn += PCI_FUNC_MAX) {
> +            devfn += PCI_FUNCTIONS_PER_DEVICE) {
>              if (!bus->devices[devfn])
>                  goto found;
>          }
> diff --git a/hw/pci.h b/hw/pci.h
> index eb97b76..f6fb6d8 100644
> --- a/hw/pci.h
> +++ b/hw/pci.h
> @@ -16,7 +16,6 @@ struct kvm_irq_routing_entry;
>  #define PCI_DEVFN(slot, func)   ((((slot) & 0x1f) << 3) | ((func) & 0x07))
>  #define PCI_SLOT(devfn)         (((devfn) >> 3) & 0x1f)
>  #define PCI_FUNC(devfn)         ((devfn) & 0x07)
> -#define PCI_FUNC_MAX            8
>  #define PCI_FUNCTIONS_PER_DEVICE 8
>  #define PCIBUS_MAX_DEVICES 32
>  

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Qemu-devel] Re: [PATCH 4/4] Rename PCI_FUNC_MAX to PCI_FUNCTIONS_PER_DEVICES in pci.[ch]
@ 2010-09-07 17:22     ` Michael S. Tsirkin
  0 siblings, 0 replies; 16+ messages in thread
From: Michael S. Tsirkin @ 2010-09-07 17:22 UTC (permalink / raw)
  To: Ken CC; +Cc: yamahata, avi, kvm, qemu-devel

On Tue, Aug 24, 2010 at 09:28:11PM +0800, Ken CC wrote:
> PCI_FUNC_MAX is introduced by
> 6eab3de16d36c48a983366b09d0a0029a5260bc3
> and
> 6fa84913eccec4266a27c81ae88465f6790742b9
> which should be safe to rename to PCI_FUNCTIONS_PER_DEVICES.
> 
> Signed-off-by: Ken CC <ken.ccao@gmail.com>

I liked the shorter name better ...

> ---
>  hw/pci.c |    4 ++--
>  hw/pci.h |    1 -
>  2 files changed, 2 insertions(+), 3 deletions(-)
> 
> diff --git a/hw/pci.c b/hw/pci.c
> index fc4becd..3901455 100644
> --- a/hw/pci.c
> +++ b/hw/pci.c
> @@ -711,7 +711,7 @@ static int pci_init_multifunction(PCIBus *bus, PCIDevice *dev)
>          return 0;
>      }
>      /* function 0 indicates single function, so function > 0 must be NULL */
> -    for (func = 1; func < PCI_FUNC_MAX; ++func) {
> +    for (func = 1; func < PCI_FUNCTIONS_PER_DEVICE; ++func) {
>          if (bus->devices[PCI_DEVFN(slot, func)]) {
>              error_report("PCI: %x.0 indicates single function, "
>                           "but %x.%x is already populated.",
> @@ -750,7 +750,7 @@ static PCIDevice *do_pci_register_device(PCIDevice *pci_dev, PCIBus *bus,
>      assert(devfn / PCI_FUNCTIONS_PER_DEVICE < PCIBUS_MAX_DEVICES);
>      if (devfn < 0) {
>          for(devfn = bus->devfn_min ; devfn < ARRAY_SIZE(bus->devices);
> -            devfn += PCI_FUNC_MAX) {
> +            devfn += PCI_FUNCTIONS_PER_DEVICE) {
>              if (!bus->devices[devfn])
>                  goto found;
>          }
> diff --git a/hw/pci.h b/hw/pci.h
> index eb97b76..f6fb6d8 100644
> --- a/hw/pci.h
> +++ b/hw/pci.h
> @@ -16,7 +16,6 @@ struct kvm_irq_routing_entry;
>  #define PCI_DEVFN(slot, func)   ((((slot) & 0x1f) << 3) | ((func) & 0x07))
>  #define PCI_SLOT(devfn)         (((devfn) >> 3) & 0x1f)
>  #define PCI_FUNC(devfn)         ((devfn) & 0x07)
> -#define PCI_FUNC_MAX            8
>  #define PCI_FUNCTIONS_PER_DEVICE 8
>  #define PCIBUS_MAX_DEVICES 32
>  

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2010-09-07 17:28 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-08-24 13:25 [PATCH 1/4] PCI: define PCIBUS_MAX_DEVICES and PCI_FUNCTIONS_PER_DEVICE in pci.h Ken CC
2010-08-24 13:25 ` [Qemu-devel] " Ken CC
2010-08-24 13:27 ` [PATCH 2/4] pci init: fail qemu if devfn exceeding the max function number supported on bus Ken CC
2010-08-24 13:27   ` [Qemu-devel] " Ken CC
2010-09-07 17:19   ` Michael S. Tsirkin
2010-09-07 17:19     ` [Qemu-devel] " Michael S. Tsirkin
2010-08-24 13:27 ` [PATCH 3/4] Check pci slot number against PCIBUS_MAX_DEVICES in parse_pci_devfn Ken CC
2010-08-24 13:27   ` [Qemu-devel] " Ken CC
2010-09-07 17:20   ` Michael S. Tsirkin
2010-09-07 17:20     ` [Qemu-devel] " Michael S. Tsirkin
2010-08-24 13:28 ` [PATCH 4/4] Rename PCI_FUNC_MAX to PCI_FUNCTIONS_PER_DEVICES in pci.[ch] Ken CC
2010-08-24 13:28   ` [Qemu-devel] " Ken CC
2010-09-07 17:22   ` Michael S. Tsirkin
2010-09-07 17:22     ` [Qemu-devel] " Michael S. Tsirkin
2010-09-07 17:16 ` [PATCH 1/4] PCI: define PCIBUS_MAX_DEVICES and PCI_FUNCTIONS_PER_DEVICE in pci.h Michael S. Tsirkin
2010-09-07 17:16   ` [Qemu-devel] " Michael S. Tsirkin

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.