fix bug 4191 [FVT on Power 8 DFM]mkvm won't create a partition according to the definition

This commit is contained in:
zhaoertao 2014-08-01 03:10:35 -07:00
parent b5fca17987
commit 46f1d9465e

View File

@ -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;
}