fix bug 4191 [FVT on Power 8 DFM]mkvm won't create a partition according to the definition
This commit is contained in:
		@@ -878,7 +878,11 @@ sub do_op_extra_cmds {
 | 
			
		||||
                    $memhash->{lpar_used_regions} = 0;
 | 
			
		||||
                    my $ret = &deal_with_avail_mem($request, $name, $d, $memhash);
 | 
			
		||||
                    if (ref($ret) eq "ARRAY") {
 | 
			
		||||
                        return ([[@$ret]]);
 | 
			
		||||
                        if (@$ret[2]) {
 | 
			
		||||
                            return ([[@$ret]]);
 | 
			
		||||
	                 } else {
 | 
			
		||||
                            push @values, $ret;
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    $param = $memhash->{memory};
 | 
			
		||||
                    $action = "part_set_lpar_pending_mem";
 | 
			
		||||
@@ -2060,9 +2064,12 @@ sub deal_with_avail_mem {
 | 
			
		||||
                my $cur_mem_in_G = $lparhash->{hyp_avail_mem} * $lparhash->{mem_region_size} * 1.0 / 1024;
 | 
			
		||||
                return([$name, "Parse reserverd regions failed, no enough memory, available:$cur_mem_in_G GB.", 1]);
 | 
			
		||||
            }           
 | 
			
		||||
            if ($cur > $cur_avail) {
 | 
			
		||||
                my $new_cur = $cur_avail;
 | 
			
		||||
                $lparhash->{memory} = "$min/$new_cur/$max";
 | 
			
		||||
            if (($cur_avail > 0) and ($cur > $cur_avail)) {
 | 
			
		||||
                my $cur_avail_in_G = $cur_avail * $lparhash->{mem_region_size} * 1.0 / 1024;
 | 
			
		||||
                $lparhash->{memory} = "$min/$cur_avail/$max";
 | 
			
		||||
		 unless ($lparhash->{full_par}) {
 | 
			
		||||
                     return([$name, "Available memory is less than required, allocate $cur_avail_in_G GB.", 0]);
 | 
			
		||||
		 }
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
            return ([$name, "Failed to get hypervisor reserved memory regions.", 1]);
 | 
			
		||||
@@ -2100,6 +2107,7 @@ sub create_lpar {
 | 
			
		||||
    my $name = shift;
 | 
			
		||||
    my $d = shift;
 | 
			
		||||
    my $lparhash = shift;
 | 
			
		||||
    my @ret = ();
 | 
			
		||||
    my $values;
 | 
			
		||||
    if (exists($request->{opt}->{vios})) {
 | 
			
		||||
        $values = xCAT::FSPUtils::fsp_api_action($request, $name, $d, "part_set_lpar_def_state", 0, 0x03);
 | 
			
		||||
@@ -2112,7 +2120,7 @@ sub create_lpar {
 | 
			
		||||
    $values = xCAT::FSPUtils::fsp_api_action($request, $name, $d, "set_lpar_name", 0, $name);
 | 
			
		||||
    if (@$values[2] ne 0) {
 | 
			
		||||
        &set_lpar_undefined($request, $name, $d);
 | 
			
		||||
        return ([$name, @$values[1], @$values[0]]);
 | 
			
		||||
        return ([[$name, @$values[1], @$values[0]]]);
 | 
			
		||||
    }
 | 
			
		||||
    xCAT::FSPUtils::fsp_api_action($request, $name, $d, "part_set_lpar_shared_pool_util_auth");
 | 
			
		||||
    xCAT::FSPUtils::fsp_api_action($request, $name, $d, "part_set_lpar_group_id");
 | 
			
		||||
@@ -2123,7 +2131,7 @@ sub create_lpar {
 | 
			
		||||
        #$values = xCAT::FSPUtils::fsp_api_action($request, $name, $d, "set_io_slot_owner", 0, join(",",@phy_io_array)); 
 | 
			
		||||
        if (@$values[2] ne 0) {
 | 
			
		||||
            &set_lpar_undefined($request, $name, $d);
 | 
			
		||||
            return ([$name, @$values[1], @$values[2]]);
 | 
			
		||||
            return ([[$name, @$values[1], @$values[2]]]);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    if (exists($lparhash->{nics})) {
 | 
			
		||||
@@ -2139,7 +2147,7 @@ sub create_lpar {
 | 
			
		||||
                $values = xCAT::FSPUtils::fsp_api_action($request,$name, $d, "part_set_veth_slot_config",0,"0,$vlanid,$mac");
 | 
			
		||||
                if (@$values[2] ne 0) {
 | 
			
		||||
                    &set_lpar_undefined($request, $name, $d);
 | 
			
		||||
                    return ([$name, @$values[1], @$values[2]]);
 | 
			
		||||
                    return ([[$name, @$values[1], @$values[2]]]);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
@@ -2149,7 +2157,7 @@ sub create_lpar {
 | 
			
		||||
            $values = xCAT::FSPUtils::fsp_api_action($request,$name, $d, "part_set_vscsi_slot_config",0,$v_info);
 | 
			
		||||
            if (@$values[2] ne 0) {
 | 
			
		||||
                &set_lpar_undefined($request, $name, $d);
 | 
			
		||||
                return ([$name, @$values[1], @$values[2]]);
 | 
			
		||||
                return ([[$name, @$values[1], @$values[2]]]);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
@@ -2180,19 +2188,23 @@ sub create_lpar {
 | 
			
		||||
    $values = xCAT::FSPUtils::fsp_api_action($request, $name, $d, "part_set_lpar_pending_proc", 0, $lparhash->{cpus});
 | 
			
		||||
    if (@$values[2] ne 0) {
 | 
			
		||||
        &set_lpar_undefined($request, $name, $d);
 | 
			
		||||
        return ([$name, @$values[1], @$values[2]]);
 | 
			
		||||
        return ([[$name, @$values[1], @$values[2]]]);
 | 
			
		||||
    }
 | 
			
		||||
    $values = &deal_with_avail_mem($request, $name, $d,$lparhash);
 | 
			
		||||
    if (ref($values) eq "ARRAY") {
 | 
			
		||||
        &set_lpar_undefined($request, $name, $d);
 | 
			
		||||
        return ([@$values]);
 | 
			
		||||
        if (@$values[2]) {
 | 
			
		||||
            &set_lpar_undefined($request, $name, $d);
 | 
			
		||||
            return ([[@$values]]);
 | 
			
		||||
	 } else {
 | 
			
		||||
            push @ret, $values;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #print "======>memory:$lparhash->{memory}.\n";
 | 
			
		||||
    $values = xCAT::FSPUtils::fsp_api_action($request, $name, $d, "part_set_lpar_pending_mem", 0, $lparhash->{memory});
 | 
			
		||||
    if (@$values[2] ne 0) {
 | 
			
		||||
        &set_lpar_undefined($request, $name, $d);
 | 
			
		||||
        return ([$name, @$values[1], @$values[2]]);
 | 
			
		||||
        return ([[$name, @$values[1], @$values[2]]]);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    xCAT::FSPUtils::fsp_api_action($request, $name, $d, "part_set_lpar_comp_modes"); 
 | 
			
		||||
@@ -2207,9 +2219,11 @@ sub create_lpar {
 | 
			
		||||
        $values = xCAT::FSPUtils::fsp_api_action($request, $name, $d, "part_set_lpar_def_state", 0, 0x02);
 | 
			
		||||
    }
 | 
			
		||||
    if (@$values[2] ne 0) {
 | 
			
		||||
        return ([$name, @$values[1], @$values[2]]);
 | 
			
		||||
        return ([[$name, @$values[1], @$values[2]]]);
 | 
			
		||||
    }
 | 
			
		||||
    return ([$name, "Done", 0]);
 | 
			
		||||
    push @ret, [$name, "Done", 0];
 | 
			
		||||
    #return ([$name, "Done", 0]);
 | 
			
		||||
    return \@ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub mkspeclpar {
 | 
			
		||||
@@ -2232,11 +2246,12 @@ sub mkspeclpar {
 | 
			
		||||
                push @result, [$name, "Node must be LPAR", 1];
 | 
			
		||||
                last;
 | 
			
		||||
            }
 | 
			
		||||
            if (!exists($memhash->{run})) {
 | 
			
		||||
            #if (!exists($memhash->{run})) 
 | 
			
		||||
            {
 | 
			
		||||
                my @td = @$d;
 | 
			
		||||
                @td[0] = 0;
 | 
			
		||||
                $memhash = &query_cec_info_actions($request, $name, \@td, 1, ["part_get_hyp_process_and_mem","lpar_lhea_mac","part_get_all_io_bus_info"]);
 | 
			
		||||
                $memhash->{run} = 1; 
 | 
			
		||||
                #$memhash->{run} = 1; 
 | 
			
		||||
            }
 | 
			
		||||
            my $tmp_ent = $ent->{$name}->[0];
 | 
			
		||||
            if (exists($opt->{vmcpus})) {
 | 
			
		||||
@@ -2272,11 +2287,23 @@ sub mkspeclpar {
 | 
			
		||||
	    if ($tmp_ent->{cpus} =~ /^(\d+)\/(\d+)\/(\d+)$/) {
 | 
			
		||||
                unless ($1 <= $2 and $2 <= $3) {
 | 
			
		||||
                    return([[$name, "Parameter for 'vmcpus' is invalid", 1]]);
 | 
			
		||||
	        } elsif ($memhash->{process_units_avail} eq '0') {
 | 
			
		||||
                    push @result, [$name, "No process available", 1];
 | 
			
		||||
                    next;
 | 
			
		||||
                } elsif ($2 > $memhash->{process_units_avail}) {
 | 
			
		||||
                    my $cur = $memhash->{process_units_avail};
 | 
			
		||||
                    my $min = $1 > $cur ? $cur : $1;
 | 
			
		||||
                    $tmp_ent->{cpus} = "$min/$cur/$3";
 | 
			
		||||
                    push @result, [$name, "Available processor is less than required, allocate $cur processors.", 0];
 | 
			
		||||
                }
 | 
			
		||||
            } else {
 | 
			
		||||
                return([[$name, "Parameter for 'vmcpus' is invalid", 1]]);
 | 
			
		||||
            }
 | 
			
		||||
            if ($tmp_ent->{memory} =~ /^([\d|.]+)([G|M]?)\/([\d|.]+)([G|M]?)\/([\d|.]+)([G|M]?)$/i) {
 | 
			
		||||
                if ($memhash->{hyp_avail_mem} eq '0') {
 | 
			
		||||
                    push @result, [$name, "No memory available", 1];
 | 
			
		||||
                    next;
 | 
			
		||||
                }
 | 
			
		||||
                my ($mmin, $mcur, $mmax);
 | 
			
		||||
                if ($2 == "G" or $2 == '') {
 | 
			
		||||
                    $mmin = $1 * 1024;
 | 
			
		||||
@@ -2383,7 +2410,7 @@ sub mkspeclpar {
 | 
			
		||||
            $tmp_ent->{phy_hea} = $memhash->{phy_drc_group_port};
 | 
			
		||||
            $tmp_ent->{logic_drc_phydrc} = $memhash->{logic_drc_phydrc};
 | 
			
		||||
            $values = &create_lpar($request, $name, $d, $tmp_ent); 
 | 
			
		||||
            push @result, $values;
 | 
			
		||||
            push @result, @$values;
 | 
			
		||||
            #need to add update db here
 | 
			
		||||
            my $rethash = query_cec_info_actions($request, $name, $d, 1, ["part_get_lpar_processing","part_get_lpar_memory","part_get_all_vio_info","part_get_all_io_bus_info","get_huge_page","get_cec_bsr"]);
 | 
			
		||||
            $lpar_hash{$name} = $rethash;     
 | 
			
		||||
@@ -2426,15 +2453,17 @@ sub mkfulllpar {
 | 
			
		||||
            $lpar_param{memory} = "1/".$rethash->{hyp_avail_mem}."/".$rethash->{hyp_config_mem};
 | 
			
		||||
            $lpar_param{hyp_config_mem} = $rethash->{hyp_config_mem};
 | 
			
		||||
            $lpar_param{hyp_avail_mem} = $rethash->{hyp_avail_mem};
 | 
			
		||||
            $lpar_param{mem_region_size} = $rethash->{mem_region_size};
 | 
			
		||||
            my @phy_io_array = keys(%{$rethash->{bus}});
 | 
			
		||||
            $lpar_param{physlots} = join(",", @phy_io_array);
 | 
			
		||||
            $lpar_param{huge_page} = "1/".$rethash->{huge_page_avail}."/".$rethash->{huge_page_avail};
 | 
			
		||||
            $lpar_param{bsr_num} = $rethash->{cec_bsr_avail};
 | 
			
		||||
            $lpar_param{phy_hea} = $rethash->{phy_drc_group_port};
 | 
			
		||||
            $lpar_param{logic_drc_phydrc} = $rethash->{logic_drc_phydrc}; 
 | 
			
		||||
            $lpar_param{full_par} = 1;
 | 
			
		||||
            $values = &create_lpar($request, $name, $d, \%lpar_param);
 | 
			
		||||
            $rethash->{logic_drc_phydrc} = $lpar_param{logic_drc_phydrc};
 | 
			
		||||
            push @result, $values;
 | 
			
		||||
            push @result, @$values;
 | 
			
		||||
            $name = undef;
 | 
			
		||||
            $d = undef;
 | 
			
		||||
        }    
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user