Mageia Bugzilla – Attachment 1229 Details for
Bug 3711
black screen with fglrx
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
New Account
|
Forgot Password
[patch]
suggestion
poc2.diff (text/plain), 4.58 KB, created by
Thierry Vignaud
on 2011-12-13 11:22:43 CET
(
hide
)
Description:
suggestion
Filename:
MIME Type:
Creator:
Thierry Vignaud
Created:
2011-12-13 11:22:43 CET
Size:
4.58 KB
patch
obsolete
>(get_xorg_driver) move it from service_harddrake > >(is_proprietary_driver) split it out of pkgs_for_Driver2() > >(check_very_bad_card) detect testing untestable cases > >(test) use check_very_bad_card() in order to prevent testing untestable cases > >diff --git a/lib/Xconfig/xfree.pm b/lib/Xconfig/xfree.pm >index 6b284aa..d836152 100644 >--- a/lib/Xconfig/xfree.pm >+++ b/lib/Xconfig/xfree.pm >@@ -18,6 +18,15 @@ sub _conf_file() { > "$::prefix/etc/X11/xorg.conf"; > } > >+# moved from harddrake service: >+sub get_xorg_driver() { >+ my $x = Xconfig::xfree->read; >+ if ($x) { >+ my ($dev_section) = grep { $_->{name} eq 'Device' } @{$x->{raw}}; >+ $dev_section && $dev_section->{l}{Driver}{val}; >+ } >+} >+ > ################################################################################ > # I/O ########################################################################## > ################################################################################ >diff --git a/lib/Xconfig/proprietary.pm b/lib/Xconfig/proprietary.pm >index 350a116..a49cc72 100644 >--- a/lib/Xconfig/proprietary.pm >+++ b/lib/Xconfig/proprietary.pm >@@ -46,11 +46,15 @@ sub handle_DRIVER2_NO_SSE { > } > } > >+sub is_proprietary_driver { >+ my ($driver) = @_; >+ $driver =~ /^fglrx|^nvidia/; >+} > > sub pkgs_for_Driver2 { > my ($Driver2, $do_pkgs) = @_; > >- my ($pkg, $base_name) = $Driver2 =~ /^fglrx|^nvidia/ ? >+ my ($pkg, $base_name) = is_proprietary_driver($Driver2) ? > ("x11-driver-video-$Driver2", $Driver2) : () or return; > > $do_pkgs->is_installed($pkg) || $do_pkgs->is_available($pkg) or >diff --git a/lib/Xconfig/card.pm b/lib/Xconfig/card.pm >index 133dd08..6eefe36 100644 >--- a/lib/Xconfig/card.pm >+++ b/lib/Xconfig/card.pm >@@ -466,9 +466,56 @@ sub check_bad_card { > > log::explanations("the graphics card does not like X in framebuffer") if $bad_card; > >+ !$bad_card; >+} >+ >+sub is_driver_KMS { >+ my ($driver) = @_; >+ member($driver, qw(ati intel nouveau)); >+} >+ >+#- needed for bad cards where KMS driver cannot be tested upon FB or proprietary vs proprietary,... >+sub check_very_bad_card { >+ my ($card) = @_; >+ >+ my $old_driver = Xconfig::xfree::get_xorg_driver(); >+ return if $old_driver eq $card->{Driver}; >+ >+ my $is_new_driver_KMS = is_driver_KMS($card->{Driver}); >+ my $is_old_driver_KMS = is_driver_KMS($old_driver); >+ >+ my $bad_card; >+ >+ if ($is_new_driver_KMS) { >+ $bad_card = 1; >+ log::explanations("the graphics card does not like switching to KMS driver"); >+ } >+ >+ if ($is_old_driver_KMS) { >+ $bad_card = 1; >+ log::explanations("the graphics card does not like switching out of KMS driver"); >+ } >+ >+ require Xconfig::proprietary; >+ my $is_old_driver_proprietary = Xconfig::proprietary::is_proprietary_driver($old_driver); >+ my $is_new_driver_proprietary = Xconfig::proprietary::is_proprietary_driver($card->{Driver}); >+ >+ if ($is_new_driver_proprietary && $is_old_driver_proprietary) { >+ $bad_card = 1; >+ log::explanations("the graphics card does not like switching from one prioprietary driver to another one"); >+ } >+ >+ if (($is_new_driver_proprietary || $is_old_driver_proprietary) && >+ ($is_new_driver_KMS || $is_old_driver_KMS)) { >+ $bad_card = 1; >+ log::explanations("the graphics card does not like switching from one prioprietary driver to a KMS one (or vice-versa)"); >+ } >+ >+ #log::explanations("the graphics card does not like X in framebuffer") if $bad_card; >+ > #- avoid testing during install at any price: > if (!$bad_card && !$::isStandalone) { >- $bad_card = member($card->{Driver}, qw(ati intel nouveau)); >+ $bad_card = $is_new_driver_KMS; > log::explanations("the graphics card does not like using KMS in framebuffer") if $bad_card; > } > >diff --git a/lib/Xconfig/test.pm b/lib/Xconfig/test.pm >index f29a07f..97a9378 100644 >--- a/lib/Xconfig/test.pm >+++ b/lib/Xconfig/test.pm >@@ -24,7 +24,15 @@ sub test { > my ($in, $raw_X, $card, $auto, $skip_badcard) = @_; > > my $bad_card = !Xconfig::card::check_bad_card($card); >- return 1 if $skip_badcard && $bad_card; >+ my $very_bad_card = !Xconfig::card::check_very_bad_card($card); >+ return 1 if $skip_badcard && ($bad_card || $very_bad_card); >+ >+ if ($very_bad_card || !$auto) { >+ $in->ask_warn(N("Warning"), >+ N("This configuration cannot be tested since:") . >+ N("Testing this graphic card with this driver will break the display")); >+ return 1; >+ } > > if ($bad_card || !$auto) { > $in->ask_yesorno(N("Test of the configuration"),
(get_xorg_driver) move it from service_harddrake (is_proprietary_driver) split it out of pkgs_for_Driver2() (check_very_bad_card) detect testing untestable cases (test) use check_very_bad_card() in order to prevent testing untestable cases diff --git a/lib/Xconfig/xfree.pm b/lib/Xconfig/xfree.pm index 6b284aa..d836152 100644 --- a/lib/Xconfig/xfree.pm +++ b/lib/Xconfig/xfree.pm @@ -18,6 +18,15 @@ sub _conf_file() { "$::prefix/etc/X11/xorg.conf"; } +# moved from harddrake service: +sub get_xorg_driver() { + my $x = Xconfig::xfree->read; + if ($x) { + my ($dev_section) = grep { $_->{name} eq 'Device' } @{$x->{raw}}; + $dev_section && $dev_section->{l}{Driver}{val}; + } +} + ################################################################################ # I/O ########################################################################## ################################################################################ diff --git a/lib/Xconfig/proprietary.pm b/lib/Xconfig/proprietary.pm index 350a116..a49cc72 100644 --- a/lib/Xconfig/proprietary.pm +++ b/lib/Xconfig/proprietary.pm @@ -46,11 +46,15 @@ sub handle_DRIVER2_NO_SSE { } } +sub is_proprietary_driver { + my ($driver) = @_; + $driver =~ /^fglrx|^nvidia/; +} sub pkgs_for_Driver2 { my ($Driver2, $do_pkgs) = @_; - my ($pkg, $base_name) = $Driver2 =~ /^fglrx|^nvidia/ ? + my ($pkg, $base_name) = is_proprietary_driver($Driver2) ? ("x11-driver-video-$Driver2", $Driver2) : () or return; $do_pkgs->is_installed($pkg) || $do_pkgs->is_available($pkg) or diff --git a/lib/Xconfig/card.pm b/lib/Xconfig/card.pm index 133dd08..6eefe36 100644 --- a/lib/Xconfig/card.pm +++ b/lib/Xconfig/card.pm @@ -466,9 +466,56 @@ sub check_bad_card { log::explanations("the graphics card does not like X in framebuffer") if $bad_card; + !$bad_card; +} + +sub is_driver_KMS { + my ($driver) = @_; + member($driver, qw(ati intel nouveau)); +} + +#- needed for bad cards where KMS driver cannot be tested upon FB or proprietary vs proprietary,... +sub check_very_bad_card { + my ($card) = @_; + + my $old_driver = Xconfig::xfree::get_xorg_driver(); + return if $old_driver eq $card->{Driver}; + + my $is_new_driver_KMS = is_driver_KMS($card->{Driver}); + my $is_old_driver_KMS = is_driver_KMS($old_driver); + + my $bad_card; + + if ($is_new_driver_KMS) { + $bad_card = 1; + log::explanations("the graphics card does not like switching to KMS driver"); + } + + if ($is_old_driver_KMS) { + $bad_card = 1; + log::explanations("the graphics card does not like switching out of KMS driver"); + } + + require Xconfig::proprietary; + my $is_old_driver_proprietary = Xconfig::proprietary::is_proprietary_driver($old_driver); + my $is_new_driver_proprietary = Xconfig::proprietary::is_proprietary_driver($card->{Driver}); + + if ($is_new_driver_proprietary && $is_old_driver_proprietary) { + $bad_card = 1; + log::explanations("the graphics card does not like switching from one prioprietary driver to another one"); + } + + if (($is_new_driver_proprietary || $is_old_driver_proprietary) && + ($is_new_driver_KMS || $is_old_driver_KMS)) { + $bad_card = 1; + log::explanations("the graphics card does not like switching from one prioprietary driver to a KMS one (or vice-versa)"); + } + + #log::explanations("the graphics card does not like X in framebuffer") if $bad_card; + #- avoid testing during install at any price: if (!$bad_card && !$::isStandalone) { - $bad_card = member($card->{Driver}, qw(ati intel nouveau)); + $bad_card = $is_new_driver_KMS; log::explanations("the graphics card does not like using KMS in framebuffer") if $bad_card; } diff --git a/lib/Xconfig/test.pm b/lib/Xconfig/test.pm index f29a07f..97a9378 100644 --- a/lib/Xconfig/test.pm +++ b/lib/Xconfig/test.pm @@ -24,7 +24,15 @@ sub test { my ($in, $raw_X, $card, $auto, $skip_badcard) = @_; my $bad_card = !Xconfig::card::check_bad_card($card); - return 1 if $skip_badcard && $bad_card; + my $very_bad_card = !Xconfig::card::check_very_bad_card($card); + return 1 if $skip_badcard && ($bad_card || $very_bad_card); + + if ($very_bad_card || !$auto) { + $in->ask_warn(N("Warning"), + N("This configuration cannot be tested since:") . + N("Testing this graphic card with this driver will break the display")); + return 1; + } if ($bad_card || !$auto) { $in->ask_yesorno(N("Test of the configuration"),
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 3711
: 1229 |
1230
|
1231
|
1232
|
1233