Como recompilar nuevo kernel con un parche.

Buenas tardes, soy un pesado, lo sé.

Actualmente tengo un hilo abierto por problemas que tengo al hacer pass-through de una gráfica en KVM, después de probar varias posibles soluciones, creo que he dado con el problema (que tenía visto desde el principio, pero por miedo a hacerlo no lo quise admitir, sinceramente).

Se ve que para usar una VGA integrada de intel en la máquina host, hay que aplicar un parche al kernel, ACS override patch y i915 VGA arbiter patch, el problema es que yo de recompilar el kernel ni mu, me miro guias y digo, vale, no parece tan complicado, pero entonces en la parte de los parches en las guías, dicen "mirar las notas del parche", me voy a ver el parche i915 y me encuentro con esto:
drivers/gpu/drm/i915/i915_dma.c | 9 ++++++---
drivers/gpu/drm/i915/intel_display.c | 25 +++++++++++++++++++++++++
2 files changed, 31 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
index f466980..d9cf216 100644
--- a/drivers/gpu/drm/i915/i915_dma.c
+++ b/drivers/gpu/drm/i915/i915_dma.c
@@ -1287,9 +1287,12 @@ static int i915_load_modeset_init(struct drm_device *dev)
* then we do not take part in VGA arbitration and the
* vga_client_register() fails with -ENODEV.
*/
- ret = vga_client_register(dev->pdev, dev, NULL, i915_vga_set_decode);
- if (ret && ret != -ENODEV)
- goto out;
+ if (!HAS_PCH_SPLIT(dev)) {
+ ret = vga_client_register(dev->pdev, dev, NULL,
+ i915_vga_set_decode);
+ if (ret && ret != -ENODEV)
+ goto out;
+ }

intel_register_dsm_handler();

diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 5fb3058..2807760 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -9519,6 +9519,15 @@ static void i915_disable_vga(struct drm_device *dev)
outb(SR01, VGA_SR_INDEX);
sr1 = inb(VGA_SR_DATA);
outb(sr1 | 1<<5, VGA_SR_DATA);
+
+ /* Disable VGA memory on Intel HD */
+ if (HAS_PCH_SPLIT(dev)) {
+ outb(inb(VGA_MSR_READ) & ~VGA_MSR_MEM_EN, VGA_MSR_WRITE);
+ vga_set_legacy_decoding(dev->pdev, VGA_RSRC_LEGACY_IO |
+ VGA_RSRC_NORMAL_IO |
+ VGA_RSRC_NORMAL_MEM);
+ }
+
vga_put(dev->pdev, VGA_RSRC_LEGACY_IO);
udelay(300);

@@ -9526,6 +9535,20 @@ static void i915_disable_vga(struct drm_device *dev)
POSTING_READ(vga_reg);
}

+static void i915_enable_vga(struct drm_device *dev)
+{
+ /* Enable VGA memory on Intel HD */
+ if (HAS_PCH_SPLIT(dev)) {
+ vga_get_uninterruptible(dev->pdev, VGA_RSRC_LEGACY_IO);
+ outb(inb(VGA_MSR_READ) | VGA_MSR_MEM_EN, VGA_MSR_WRITE);
+ vga_set_legacy_decoding(dev->pdev, VGA_RSRC_LEGACY_IO |
+ VGA_RSRC_LEGACY_MEM |
+ VGA_RSRC_NORMAL_IO |
+ VGA_RSRC_NORMAL_MEM);
+ vga_put(dev->pdev, VGA_RSRC_LEGACY_IO);
+ }
+}
+
void intel_modeset_init_hw(struct drm_device *dev)
{
intel_init_power_well(dev);
@@ -9983,6 +10006,8 @@ void intel_modeset_cleanup(struct drm_device *dev)

intel_disable_fbc(dev);

+ i915_enable_vga(dev);
+
intel_disable_gt_powersave(dev);

ironlake_teardown_rc6(dev);


Igual a vosotros no, pero a mí, esto me asusta y me tira para atrás, no hay notas "para novatos" en el parche ( https://lkml.org/lkml/2014/5/9/517 ), me voy a ver el otro parche (ACS overdrive, https://lkml.org/lkml/2013/5/30/513) y me encuentro con más de lo mismo:
Documentation/kernel-parameters.txt | 10 +++
drivers/pci/quirks.c | 102 +++++++++++++++++++++++++++++++++++
2 files changed, 112 insertions(+)
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
index 47bb23c..a60e6ad 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -2349,6 +2349,16 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
nomsi Do not use MSI for native PCIe PME signaling (this makes
all PCIe root ports use INTx for all services).

+ pcie_acs_override =
+ [PCIE] Override missing PCIe ACS support for:
+ downstream
+ All downstream ports - full ACS capabilties
+ multifunction
+ All multifunction devices - multifunction ACS subset
+ id:nnnn:nnnn
+ Specfic device - full ACS capabilities
+ Specified as vid:did (vendor/device ID) in hex
+
pcmv= [HW,PCMCIA] BadgePAD 4

pd. [PARIDE]
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index 0369fb6..c7609f6 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -3292,11 +3292,113 @@ struct pci_dev *pci_get_dma_source(struct pci_dev *dev)
return pci_dev_get(dev);
}

+static bool acs_on_downstream;
+static bool acs_on_multifunction;
+
+#define NUM_ACS_IDS 16
+struct acs_on_id {
+ unsigned short vendor;
+ unsigned short device;
+};
+static struct acs_on_id acs_on_ids[NUM_ACS_IDS];
+static u8 max_acs_id;
+
+static __init int pcie_acs_override_setup(char *p)
+{
+ if (!p)
+ return -EINVAL;
+
+ while (*p) {
+ if (!strncmp(p, "downstream", 10))
+ acs_on_downstream = true;
+ if (!strncmp(p, "multifunction", 13))
+ acs_on_multifunction = true;
+ if (!strncmp(p, "id:", 3)) {
+ char opt[5];
+ int ret;
+ long val;
+
+ if (max_acs_id >= NUM_ACS_IDS - 1) {
+ pr_warn("Out of PCIe ACS override slots (%d)\n",
+ NUM_ACS_IDS);
+ goto next;
+ }
+
+ p += 3;
+ snprintf(opt, 5, "%s", p);
+ ret = kstrtol(opt, 16, &val);
+ if (ret) {
+ pr_warn("PCIe ACS ID parse error %d\n", ret);
+ goto next;
+ }
+ acs_on_ids[max_acs_id].vendor = val;
+
+ p += strcspn(p, ":");
+ if (*p != ':') {
+ pr_warn("PCIe ACS invalid ID\n");
+ goto next;
+ }
+
+ p++;
+ snprintf(opt, 5, "%s", p);
+ ret = kstrtol(opt, 16, &val);
+ if (ret) {
+ pr_warn("PCIe ACS ID parse error %d\n", ret);
+ goto next;
+ }
+ acs_on_ids[max_acs_id].device = val;
+ max_acs_id++;
+ }
+next:
+ p += strcspn(p, ",");
+ if (*p == ',')
+ p++;
+ }
+
+ if (acs_on_downstream || acs_on_multifunction || max_acs_id)
+ pr_warn("Warning: PCIe ACS overrides enabled; This may allow non-IOMMU protected peer-to-peer DMA\n");
+
+ return 0;
+}
+early_param("pcie_acs_override", pcie_acs_override_setup);
+
+static int pcie_acs_overrides(struct pci_dev *dev, u16 acs_flags)
+{
+ int i;
+
+ /* Never override ACS for legacy devices or devices with ACS caps */
+ if (!pci_is_pcie(dev) ||
+ pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ACS))
+ return -ENOTTY;
+
+ for (i = 0; i < max_acs_id; i++)
+ if (acs_on_ids[i].vendor == dev->vendor &&
+


¿Esto como se traga? ¿voy a por vaselina? Vaya a donde vaya, dan por asumido que se sabe recompilar kernel, que se sabe parchear el kernel antes de recompilarlo y que se sabe lo que se está tocando, y la verdad, se me está viniendo el mundo encima. Por eso os pido ayuda, me gustaría que todo fuera un comando y ya está, eso está claro, pero me gusta aprender, así que tras hacer mis deberes os pongo unas consultas, y os agradecería que si me vieráis muy perdido me aviséis para no liarla parda (no sé, igual es más complicado de lo que yo me creo).
- Bajar la sauce
- Instalar estos paquetes (ya que es el primer kernel que compilo):
sudo apt-get build-dep linux-image-$(uname -r)

- Aplicar os parches (https://www.kernel.org/doc/Documentatio ... atches.txt)
patch -p1 < ../archivo

- Ejecutar estos dos comandos:
fakeroot debian/rules clean
fakeroot debian/rules binary-headers binary-generic

- Instalar el kernel:
sudo dpkg -i linux*2.6.38-7.37*.deb

- Reinciar
sudo reboot


Y a tirar millas.
Fuente: https://wiki.ubuntu.com/Kernel/BuildYourOwnKernel y el archivo de kernel.org mencionado antes.

Si estoy en lo correcto, mis únicas dudas son si los archivos del parche pueden tener cualquier nombre y si sólo tengo que copiar y pegar lo que he puesto en los bloques de código al principio del post, o tal vez tenga que quitar los encabezados que dicen los archivos modificados o algo más.


Si has llegado hasta aquí, gracias por leerme, si además contestas, ¡gracias por ayudar!

EDITO: Soy gilipollas, a la izquierda en las webs de los parches están para descargar... entiendo que estos son los archivos que tengo que aplicar con "patch -p1 ./archivo", verdad?

EDITO2 : estoy siguiendo mis propios pasos descritos anteriormente a la desesperada, debo tener una copia de windows con tarjeta gráfica antes de las 19:30, o me veré forzado a instalar windows ( [mad] ) por una noche, para seguir mañana o en cuanto tenga más ayuda/documentación, aun así, cualquier cosa que respondáis será de utilidad por si fallo y tengo que retomar el tema mañana o cuando lo tenga que hacer, y también quedará en el foro como hilo de ayuda :)

EDITO3: Bueno, estaba en lo correcto, los parches se aplican como yo pensé, sólo que en vez de "-pl" (pe+ele) es "-p1" (pe+uno), aunque los parches me daban algunos errores, quizás estuvieran pensados para otra versión del Kernel o no sean del todo compatibles con ubuntu. Aunque ahora tengo un poblema un poco menos (?) gordo, compilando el kernel me da errores, al ejecutar:
make[2]: Leaving directory '/home/xavier/linux-3.19.0/debian/build/build-generic'
Makefile:145: recipe for target 'sub-make' failed
make[1]: *** [sub-make] Error 2
make[1]: Leaving directory '/home/xavier/linux-3.19.0'
debian/rules.d/2-binary-arch.mk:44: recipe for target '/home/xavier/linux-3.19.0/debian/stamps/stamp-build-generic' failed
make: *** [/home/xavier/linux-3.19.0/debian/stamps/stamp-build-generic] Error 2

Alguna idea?

EDIT4: Acabé sucumbiendo a windows, había un partido en la liga de primavera de League of legends en EOL al que no podía faltar, pero mañana me pongo otra vez después del curro, seguramente con ARCH al haber más guias sobre el VT-d para esta plataforma (desconozco el motivo, tenía entendido que debian y redhat dominaban el sector de servidores, y por ende entiendo que el de virtualización). También actualizo el EDIT3 con datos relevantes.
_______________________________________
Actualización:
Conseguido el passthrough (ver segunda respuesta al hilo), sigo teniendo problemas para instalar los drivers de AMD en windows, también me aventuré e instalé windows 8.1 que terminó por romperme la VM otra vez, así que esta vez instalé windows 7 en pruebas (de este no tengo licencia XD), lo actualizé a windows 8 (mi licencia es de actualización), y actualizé a windows 8.1 sin tener el pci puesto, es decir, como si fuera una VM normal, entonces apagué windows, coloqué las líneas que faltablan (las del pci-assign) al comando del qemu, inicié windows y voilá, windows 8.1 me detecta correctamente la gráfica, he de decir también que él solito me ha instalado drivers de AMD (no como windows 8, que te instala unos propios de windows), con el CCC incluido, pero sospeché que eran antiguos, así que me dirigí a la web de AMD, bajé los últimos y lo intenté instalar, no pude, el instalador peta al detectar los gráficos, sospecho que puede ser porqué al usar pci-assign y no vfiopci, no puedo/no sé quitar el VGA virtual a la BIOS, con lo cual windows detecta 2 gráficas, pese a que desactivé la pantalla en la gráfica virtual.

Me gustaría decir que el sistema invitado vuela, parece nativo, aunque apuntar que no hace correctamente la aceleración de vídeos, supongo que intentan usar la gráfica principal y por eso no pueden, pero no estoy seguro, y como para eso uso ubuntu, tampoco le voy a dar importancia. Por otro lado, ubuntu se vuelve muy lento en cuanto está encendida la VM, no entiendo porqué pues mi hadware tendría que ir sobrado para mover las dós máquinas a la vez con soltura (escritorio y ventas, claro) y tampoco comparten bus sata, ya que están en HD físicos diferentes. Pero bueno, esto va a medias, pero funciona lo que quería que funcionase, por lo tanto me doy por satisfecho.

A modo de resumen, y esperando a mañana a que me permita responder otra vez sobre mi mismo (la tontería de los 5 días me obliga a crear estas respuestas tan guarras con tantos edits), dejo los pasos que he seguido:
Hadware:
I5 Hashwell + intel hd 4600
8GB Ram
ATI HD 5750

Que es lo que quería conseguir:
Tener como sistema operativo principal linux, sin abandonar los juegos sin tener que depender del dual boot, y wine no daba el rendimiento deseado.

Como conseguirlo:
Con hadware que soporte VT-d o iommu, podemos pasar la gráfica dedicada a una máquina virtual, teniendo esta acceso completo al hadware y dando un rendimiento casi nativo, en internet se habla del 95%.

Pasos a seguir:
Dado que queremos usar la integrada, y en linux hay unos problemas con las integradas si se va a usar también la dedicada para hace el pass-through, deberemos tener un kernel parcheado, para ello, recomiendo lo siguiente (en ubuntu):
- Bajar el kernel y las herramientas de compilación
apt-get source linux-image-$(uname -r)
sudo apt-get build-dep linux-image-$(uname -r)

- Parchearlo manualmente (los parches son para unas versiones específicas del kernel, y lo más seguro es que en la vuestra no se puedan aplicar todos, y los tengáis que modificar, yo recomiendo hacerlo manualmente del todo, ya que se hace más rápido)
i915 VGA arbiter patch: https://lkml.org/lkml/2014/5/9/517
ACS Overdrive patch: https://lkml.org/lkml/2013/5/30/513
- compilarlo (yo seguí este tuto http://mogaal.com/articulos/kernel-a-la-debian.html pese a ser antiguo, va de perlas, ojo que compilando con mi confuguración tarda aproximadamente 1 hora)
- Instalarlo según el mismo tuto de compilación
A partir de aquí seguir este tuto: https://bbs.archlinux.org/viewtopic.php?id=162768
Que básicamente explica los siguientes pasos (ver el primer post del link para más información)
- Aplicar un parámetro en grub para usar el i915 VGA arbiter patch al iniciar
- Usar PCI stub, y si queremos usar la integrada en linux, también podemos añadir radeon y rlgfx a la blackist
- IMPORTANTE: Si váis a usar pci-assign, no hagáis el binding a vfio

Y listo, si seguimos ese tutorial, o el que nos dejó @d_d_d en https://drive.google.com/file/d/0BxPxIx ... view?pli=1, debemos tener en cuenta que si no nos funcionan (en mi caso tenía pantallazos azules después de instalar los drivers) estas líneas:
-device vfio-pci,host=01:00.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on \

-device vfio-pci,host=01:00.1,bus=root.1,addr=00.1 \

Deberemos usar pci-assign, en vez de vfio-pci:
-device pci-assign,host=01:00.0 \
-device pci-assign,host=01:00.1 \
Siento no poder ayudarte, paso para darte ánimos que te se ve con ganas [beer]
lwordl escribió:Siento no poder ayudarte, paso para darte ánimos que te se ve con ganas [beer]

Gracias!
---
Aprovecho para comentar que durante el parcheo del Kernel obtuve varios errores (creo que 3 de 11 o así), supongo que no debería afectar al momento de compilar el kernel pero sí al momento de hacer boot. de todas maneras lo quería probar pero no conseguía que compilase.

He leído que "AUTOBUILD=1" antes del segundo fakeroot puede hacer que compile, ¿es cierto? ahora mismo no dispongo de ubuntu instalado, y mañana seguramente me pase a ARCH ya que los tutoriales (sobre vt-d) me parecen más enfocados a éste, y además, tienen su versión del kernel ya compilada, así que lo veo dificil comprobarlo.

El problema es que hoy no tenía el disco SSD que me ha llegado bastante tarde y instalarlo sin dedicarle un disco entero (a arch) se me hacía complicado jajaja (no quiero cargarme mis datos en otras particiones de mi HDD de uso diario)

Recuerdo que antes arch tenía una GUI por CLI a lo clonezilla muy chula, que me facilitó un montón la instalación hace unos años, que le ha pasado :-? :-?


Bueno, sin más, mañana os sigo contando mi historia, para quien le interese. Por supuesto, se acepta ayuda.

EDIT1: Instalar Arch parece complicado, no he podido hacerlo desde una VM con una guia al lado, no me imagino sin tener el pc a mano. Procedo a crear una VM para instalar ubuntu y probar a recompilar el kernel con "AUTOBUILD=1", si no me da error, me lanzo del tirón a por ello en entorno real.

EDIT2: Ubuntu no compila ni para atrás, diferentes tutoriales, no consigo compilar el kernel ni a patadas, ahora mismo estoy bajando fedora 22 ya que he encontrado un tutorial para fedora 21 de hace un par de meses que con suerte me funcione, si no, me bajaré fedora 21 y a correr.

EDIT3: EUREKA! conseguí compilar el kernel de fedora (o eso parece, ya se han aplicado los parches correctamente y está compilando en lo que entiendo es un proceso largo, le quedará aun unos diez minutos supongo), la historia de los parches, para los que se pasen por aquí, viene a ser que básicamente los parches son diferentes según la versión de kernel, ya que los archivos que parche van cambiando, y los parches se guían de la siguiente forma (por lo que he entendido)
--- Archivo de input
+++ archivo de output
@@ -xxx,x +xxx,x (entiendo que son los bytes del archivo antes - y depues del parche +)@@ aquí si que no se que polladas van
LINEA QUE EXISTE EN EL ARCHIVO
LINEA QUE EXISTE EN EL ARCHIVO
+LINEA A AÑADIR EN EL ARCHIVO
LINEA QUE EXISTE EN EL ARCHIVO
LINEA QUE EXISTE EN EL ARCHIVO

Siendo el + o el - lo que dicta si se añade o se quita una línea.

Entonces, al momento de compilar en fedora (y al momento de parchear en ubuntu) se nos dice en que archivos ha fallado el parche (ya que un parche puede parchear múltiples archivos, simplemente dividiéndolos con --- y +++ por cada archivo a parchear), como decía, al parchear nos dice que archivos han fallado y por ejemplo, si nos falla (invento)
drivers/gpu/mem/etc/archivo.c
nos creará un archivo tal que:
drivers/gpu/mem/etc/archivo.c.rej

en el *.rej podemos ver que líneas no concordaban con el original, podremos abrir el original (el *.c) y buscal las líneas que no tengan "+" o "-" delante, que como expliqué antes son las líneas con las que "busca" en el archivo, y aquí ya, con cabeza, arreglamos el archivo del parche para que se pueda introducir en el archivo original.
Por ejemplo:
Si en el parche nos dice que vamos a encontrar un archivo tal que:
if(valor){
linea1
+linea_a_insertar
#endif

Y nos encontramos con esto:
if(valor){
linea1
linea2
#endif

pues usando la cabeza, deberíamos cambiar el parche tal que:
if(valor){
linea1
+linea_a_insertar
linea2
#endif

y probar suerte. Funcionará esto? al momento de parchear, sí, se parchea correctamente, al momento de ejecutar el kernel no tengo ni idea pues aún estoy compilándolo, pero espero que si, vamos. También hay que estar atento a los comentarios del propio parche, hay veces que nos indica que tiene que ir antes de que se cargue algo, o similar, entonces ya nos toca investigar más a cada uno, en el caso particular en el que nos encontremos.

mañana actualizo el post principal con información relevante para el hilo, así cualquiera que necesite esta ayuda como referencia la podrá usar, aunque no me esté leyendo ni mi abuela [+risas] , alguien podría llegar aquí por google y si se encuentra su solución, me alegraré de haber ayudado a alguien.

EDIT 4 (03/06/2015): Ya no sé que hacer, conseguí compilar el kernel en fedora después de apañármelas con los parches, pero luego resulta que el "tutorial" que estaba siguiendo para la virtualización no contemplaba algunas cosas, y al ejecutar el script del vfio para que el sistema dejara en paz la tarjeta PCI, se rompia el sistema, entiendo que porque la tarjeta si estaba iniciada con el sistema y me forzaba el reinicio...

Ahora estoy otra vez con ubuntu, esta vez sigo una guía para compilar el kernel "a la debian", y de momento lleva 15 minutos compilando sin errores, cuando antes no pasaba de 5... espero que funcione bien, ya que por suerte no me cargué sus particiones y aun tengo la máquina virtual, el vt-d, el pci-stub, y todas las polladas inimaginables instaladas y configuradas, así que será instalar el kernel parcheado y a tirar millas.

Seguiré actualizando, pero seguramente que si hoy no lo consigo ya me rinda y vuelva a windows, llevo desde el viernes, y no me aptece tirarme una semana sin PC, he probado con wine, pero el rendimiento no es ni siquiera bueno, la compatibilidad es horrible, y pese a que me gusta aprender y configurar cosas, últimamente no me sobra el tiempo, y no quiero pasarme todos los días de la semana con esto, además de tener que hacer vilguerías para que las cosas que en windows funcionan a doble clic, en linux se complica en demasía. (he aplicado los parches en el kernel de ubuntu a mano, ya que tras "parchear los parches", me daba otro error al usar patch, terminé añadiendo y eliminando las líneas a mano)

Edit5: recopilado el kernel me encontré el problema de que el grúa de fedora no arrancaba Ubuntu con el kernel instalado, si no con el antiguo, así que reinstale el grub en el disco de Ubuntu, y ahora si, inició por fin, tras tres días de pruebas, un Linux con el kernel parcheado, abro la máquina virtual con pass through y no se daña la máquina anfitrión, casi lloro de felicidad, miro el reloj y veo que no me da tiempo para instalar Windows en la VM y probar a ver si arranca con los drivers, pero las expectativas son buenas, aunque sólo he usado el parche del i915, ya que el del acs no había forma de usarlo, actualizaré el post con más información mañana y si me da por ahí y me funciona, igual me marco una guía para hacer el pass-through con una igd de Intel en el host.

EDIT 5 (04/06/2015) siento el tocho post, pero EOL no deja responder si nadie lo hace, así que tengo que seguir editando:
Con el kernel que compilé ayer inicio la VM, no se dañan los gráficos del host, entiendo que está funcionando, pero instalo windows, los drivers de amd, y aquí viene lo bueno, pantalla azul de la muerte, supongo que tengo el mismo error de antes o similar, ya que sucede lo mismo, justo antes de terminar la pantalla de carga de windows me peta. Ahora mismo estoy compilando otro kernel con el parche de ACS Overdrive, por probar ya, que no falte, después de esto, instalaré windows y ya me pasaré por este subforo si la cosa se pone interesante en el mundo opensource. Este edit es más bien una forma de decir "pruebo lo último", no vaya a ser que por una tontería no funcionara, y abandono si no lo hace, me jode, porque he leído, y mucho, he intentando echarle ganas y aún así no he podido, me siento derrotado por algo relativamente fácil (debido a la cantidad de documentación existente). Creo que mi problema ya estará documentado en el hilo de Arch, pero seamos honestos, no voy a leerme 200 páginas de un hilo en inglés buscando algo que puede no existir, ni yo ni nadie, al menos que sea a vida o muerte, pero yo tengo mi licencia de windows y ya no me sentiré culpable de usarla. En cuanto termine de compilar, instalar el kernel, botear y comprobar que el parche no arregla mi problema, vendré a poner una pequeña reflexión sobre mi experiencia y seguramente (porqué no) a poner un poco a parir a esto del opensource [hallow]

Último EDIT: Conseguido.
He perdido cuatro días de mi vida. La tontería más grande del mundo a veces complica lo más dificil. La tarjeta se asignaba con vfio, por suerte, me decidí a instalar windows 8.0 para probar por si acaso fuera cosa de la versión de windows, y al estar en 8 e instalar los drivers, me daba otra vez un pantallazo azúl, pero esta vez windows me hizo un favor y me dio un código de error, "VIDEO_TDR_FAILURE", con lo cual, aplicando una búsqueda en google "VIDEO_TDR_FAILURE inurl: https://bbs.archlinux.org/viewtopic.php?id=162768" (lo cual busca sobre el hilo más grande de todo internet sobre el PCI Passthrough de gráficas), me arrojó alguien con mi mismo problema (mismo código de error, tarjeta amd, host con intel integrada), y el chico comenta que si en vez de usar vfio-pci, se usa pci-assign, le funciona, lo pruebo y oh, puta casualidad, enciende como una seda.

No puedo instalar los drivers propietarios aun, pero esta vez me crashea el instalador, aún así, windows está usando los drivers avanzados, con lo cual consigo aceleración 3d nativa, ejecuto el LoL a 200fps+ con una ati 5750 a 1080p con todo a full, lo cual no está nada mal.

Me falta añadirle un hadware de sonido, y ver como se comportal, y ya será perfecto.
Cuando reinicie me dedico a ordenar el primer post, y el finde me dedico a documentar todo, que de momento quiero jugar que llevo una semana ya sin tocar nada de juegos.

Saludos.
Me alegro que lo hayas conseguido, por lo que veo pasar a +200fps en el LOL es prácticamente como nativo.
Sobre la instalación de drivers , pasando la rom(bios) de la vga se solucionan la mitad de los problemas pero veo que lo solucionaste usando otro módulo (pci-assign).

De todas formas tu hardware es diferente al que yo usé. Yo tenía un rendimiento tremendamente pobre con una hd7950, apenas levantaba 60fps estables con vsync y asignando 4 cores en el LOL. De vez en cuando pegaba tirones y juegos como csgo se volvían injugables, no me ocurría así con DarkSouls 2. Acabé por desistir, como experimento estuvo curioso pero no me valía. Creo que era un problema del paso de ancho de banda pci-express - pcie virtual porque la GPU ni se calentaba y el uso de las vcpu no llegaba a su límite.

Muy interesantes tus post, seguiré el hilo porque enfangarme en estos temas me mola mucho.
Un saludo
d_d_d escribió:Me alegro que lo hayas conseguido, por lo que veo pasar a +200fps en el LOL es prácticamente como nativo.
Sobre la instalación de drivers , pasando la rom(bios) de la vga se solucionan la mitad de los problemas pero veo que lo solucionaste usando otro módulo (pci-assign).

De todas formas tu hardware es diferente al que yo usé. Yo tenía un rendimiento tremendamente pobre con una hd7950, apenas levantaba 60fps estables con vsync y asignando 4 cores en el LOL. De vez en cuando pegaba tirones y juegos como csgo se volvían injugables, no me ocurría así con DarkSouls 2. Acabé por desistir, como experimento estuvo curioso pero no me valía. Creo que era un problema del paso de ancho de banda pci-express - pcie virtual porque la GPU ni se calentaba y el uso de las vcpu no llegaba a su límite.

Muy interesantes tus post, seguiré el hilo porque enfangarme en estos temas me mola mucho.
Un saludo


Ojo, con Vsync no vas a pasar de la velocidad de refresco de tu monitor, de eso se trata XD

Decirte también que si no recueldo mal los cores en AMD son un tanto diferentes, y 2 cores equivalen (así a groso modo) a 1 de intel, ya que realmente sólo es una parte del core la que está duplicada, no todo el core de por sí.

Yo estoy usando cpu=host, y a tirar millas, así uso todo el procesador, total, cuando estoy jugando no voy a estar haciendo otras cosas, como comenté, ubuntu me va lento cuando uso la VM, pero realmente cuando la apago, ubuntu vuelve a la normalidad, y no me entero (de hecho, uso sólo una pantalla con dos entradas, cuando acabo con la VM y la apago, el monitor vuelve automáticamente a ubuntu, osea que me viene de perlas)
Lo de VSync lo se. Fue para experimentar si pillaba el refresco la VM XD XD . Pero sin Vsync otros juegos iban mal.
Me gustaría hacer la prueba con Intel pero no tengo presupuesto, también espero a DX12 y probar con tarjetas virtuales + Física y ver si se suma rendimiento a base de virtualizar graficas [mad]
Si, se me va la olla pero por experimentar que no quede.
5 respuestas