diff mbox

[v4,23/53] xen/arch/x86/x86_64/mmconfig-shared.c: let custom parameter parsing routines return errno

Message ID 20170823173446.24801-24-jgross@suse.com (mailing list archive)
State New, archived
Headers show

Commit Message

Jürgen Groß Aug. 23, 2017, 5:34 p.m. UTC
Modify the custom parameter parsing routines in:

xen/arch/x86/x86_64/mmconfig-shared.c

to indicate whether the parameter value was parsed successfully.

Cc: Jan Beulich <jbeulich@suse.com>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>
Signed-off-by: Juergen Gross <jgross@suse.com>
---
V4:
- correct parse_bool() call
- style correction (Jan Beulich)

V3:
- dont return out of loop (Jan Beulich)
- dont modify option value in parsing function
---
 xen/arch/x86/x86_64/mmconfig-shared.c | 30 ++++++++++++++++++++++--------
 1 file changed, 22 insertions(+), 8 deletions(-)

Comments

Jan Beulich Aug. 25, 2017, 8:41 a.m. UTC | #1
>>> On 23.08.17 at 19:34, <jgross@suse.com> wrote:
> Modify the custom parameter parsing routines in:
> 
> xen/arch/x86/x86_64/mmconfig-shared.c
> 
> to indicate whether the parameter value was parsed successfully.

Reviewed-by: Jan Beulich <jbeulich@suse.com>
diff mbox

Patch

diff --git a/xen/arch/x86/x86_64/mmconfig-shared.c b/xen/arch/x86/x86_64/mmconfig-shared.c
index dbf9ff07fa..7c3b7fd30b 100644
--- a/xen/arch/x86/x86_64/mmconfig-shared.c
+++ b/xen/arch/x86/x86_64/mmconfig-shared.c
@@ -28,22 +28,36 @@ 
 
 unsigned int pci_probe = PCI_PROBE_CONF1 | PCI_PROBE_MMCONF;
 
-static void __init parse_mmcfg(char *s)
+static int __init parse_mmcfg(const char *s)
 {
-    char *ss;
+    const char *ss;
+    int rc = 0;
 
     do {
         ss = strchr(s, ',');
-        if ( ss )
-            *ss = '\0';
+        if ( !ss )
+            ss = strchr(s, '\0');
 
-        if ( !parse_bool(s, NULL) )
+        switch ( parse_bool(s, ss) )
+        {
+        case 0:
             pci_probe &= ~PCI_PROBE_MMCONF;
-        else if ( !strcmp(s, "amd_fam10") || !strcmp(s, "amd-fam10") )
-            pci_probe |= PCI_CHECK_ENABLE_AMD_MMCONF;
+            break;
+        case 1:
+            break;
+        default:
+            if ( !strncmp(s, "amd_fam10", ss - s) ||
+                 !strncmp(s, "amd-fam10", ss - s) )
+                pci_probe |= PCI_CHECK_ENABLE_AMD_MMCONF;
+            else
+                rc = -EINVAL;
+            break;
+        }
 
         s = ss + 1;
-    } while ( ss );
+    } while ( *ss );
+
+    return rc;
 }
 custom_param("mmcfg", parse_mmcfg);