xref: /linux/Documentation/translations/sp_SP/process/maintainer-kvm-x86.rst (revision 62597edf6340191511bdf9a7f64fa315ddc58805)
1.. include:: ../disclaimer-sp.rst
2
3:Original: Documentation/process/maintainer-kvm-x86.rst
4:Translator: Juan Embid <jembid@ucm.es>
5
6KVM x86
7=======
8
9Prólogo
10--------
11KVM se esfuerza por ser una comunidad acogedora; las contribuciones de los
12recién llegados son valoradas e incentivadas. Por favor, no se desanime ni
13se sienta intimidado por la extensión de este documento y las numerosas
14normas/directrices que contiene. Todos cometemos errores y todos hemos sido
15principiantes en algún momento. Mientras haga un esfuerzo honesto por
16seguir las directrices de KVM x86, sea receptivo a los comentarios, y
17aprenda de los errores que cometa, será recibido con los brazos abiertos,
18no con antorchas y horcas.
19
20TL;DR
21-----
22Las pruebas son obligatorias. Sea coherente con los estilos y patrones
23establecidos.
24
25Árboles
26-------
27KVM x86 se encuentra actualmente en un período de transición de ser parte
28del árbol principal de KVM, a ser "sólo otra rama de KVM". Como tal, KVM
29x86 está dividido entre el árbol principal de KVM,
30``git.kernel.org/pub/scm/virt/kvm/kvm.git``, y un árbol específico de KVM
31x86, ``github.com/kvm-x86/linux.git``.
32
33Por lo general, las correcciones para el ciclo en curso se aplican
34directamente al árbol principal de KVM, mientras que todo el desarrollo
35para el siguiente ciclo se dirige a través del árbol de KVM x86. En el
36improbable caso de que una corrección para el ciclo actual se dirija a
37través del árbol KVM x86, se aplicará a la rama ``fixes`` antes de llegar
38al árbol KVM principal.
39
40Tenga en cuenta que se espera que este periodo de transición dure bastante
41tiempo, es decir, que será el statu quo en un futuro previsible.
42
43Ramas
44~~~~~
45El árbol de KVM x86 está organizado en múltiples ramas por temas. El
46propósito de utilizar ramas temáticas más específicas es facilitar el
47control de un área de desarrollo, y para limitar los daños colaterales de
48errores humanos y/o commits con errores, por ejemplo, borrar el commit HEAD
49de una rama temática no tiene impacto en los hashes SHA1 de otros commit
50en en camino, y tener que rechazar una solicitud de pull debido a errores
51retrasa sólo esa rama temática.
52
53Todas las ramas temáticas, excepto ``next`` y ``fixes``, se agrupan en
54``next`` a través de un Cthulhu merge en función de las necesidades, es
55decir, cuando se actualiza una rama temática. Como resultado, los push
56forzados a ``next`` son comunes.
57
58Ciclo de Vida
59~~~~~~~~~~~~~
60Las correcciones dirigidas a la versión actual, también conocida como
61mainline, suelen aplicarse directamente al árbol principal de KVM, es
62decir, no pasan por el árbol x86 de KVM.
63
64Los cambios dirigidos a la siguiente versión se dirigen a través del árbol
65KVM x86. Se envían pull requests (de KVM x86 a KVM main) para cada rama
66temática de KVM x86, normalmente la semana antes de que Linus abra la
67ventana de fusión, por ejemplo, la semana siguiente a rc7 para las
68versiones "normales". Si todo va bien, las ramas temáticas son subidas en
69el pull request principal de KVM enviado durante la ventana de fusión de
70Linus.
71
72El árbol de KVM x86 no tiene su propia ventana de fusión oficial, pero hay
73un cierre suave alrededor de rc5 para nuevas características, y un cierre
74suave alrededor de rc6 para correcciones (para la próxima versión; fíjese
75más arriba para las correcciones dirigidas a la versión actual).
76
77Cronología
78~~~~~~~~~~
79Normalmente, los envíos se revisan y aplican en orden FIFO, con cierto
80margen de maniobra en función del tamaño de la serie, los parches que están
81"calientes en caché", etc. Correcciones, especialmente para la versión
82actual y/o árboles estables, consiguen saltar la cola. Los parches que se
83lleven a través de un árbol que no sea KVM (la mayoría de las veces a
84través del árbol de consejos) y/o que tengan otros acks/revisiones también
85saltan la cola hasta cierto punto.
86
87Tenga en cuenta que la mayor parte de la revisión se realiza entre rc1 y
88rc6, más o menos. El periodo entre la rc6 y la siguiente rc1 se utiliza
89para ponerse al día en otras tareas, es decir, la falta de envíos durante
90este periodo no es inusual.
91
92Los pings para obtener una actualización del estado son bienvenidos, pero
93tenga en cuenta el calendario del ciclo de publicación actual y tenga
94expectativas realistas. Si está haciendo ping para la aceptación, es decir,
95no sólo para obtener comentarios o una actualización, por favor haga todo
96lo posible, dentro de lo razonable, para asegurarse de que sus parches
97están listos para ser fusionados. Los pings sobre series que rompen la
98compilación o fallan en las pruebas provocan el descontento de los
99mantenedores.
100
101Desarrollo
102-----------
103
104Árbol base/Rama
105~~~~~~~~~~~~~~~
106Las correcciones dirigidas a la versión actual, también conocida como
107mainline, deben basarse en
108``git://git.kernel.org/pub/scm/virt/kvm/kvm.git master``. Tenga en cuenta
109que las correcciones no garantizan automáticamente la inclusión en la
110versión actual. No hay una regla única, pero normalmente sólo las
111correcciones de errores urgentes, críticos y/o introducidos en la versión
112actual deberían incluirse en la versión actual.
113
114Todo lo demás debería basarse en ``kvm-x86/next``, es decir, no hay
115necesidad de seleccionar una rama temática específica como base. Si hay
116conflictos y/o dependencias entre ramas, es trabajo del mantenedor
117resolverlos.
118
119La única excepción al uso de ``kvm-x86/next`` como base es si un
120parche/serie es una serie multi-arquitectura, es decir, tiene
121modificaciones no triviales en el código común de KVM y/o tiene cambios más
122que superficiales en el código de otras arquitecturas. Los parches/series
123multi-arquitectura deberían basarse en un punto común y estable en la
124historia de KVM, por ejemplo, la versión candidata en la que se basa
125``kvm-x86 next``. Si no está seguro de si un parche/serie es realmente
126multiarquitectura, sea precavido y trátelo como multiarquitectura, es
127decir, utilice una base común.
128
129Estilo del codigo
130~~~~~~~~~~~~~~~~~~~~~~
131Cuando se trata de estilo, nomenclatura, patrones, etc., la coherencia es
132la prioridad número uno en KVM x86. Si todo lo demás falla, haga coincidir
133lo que ya existe.
134
135Con algunas advertencias que se enumeran a continuación, siga las
136recomendaciones de los responsables del árbol de consejos
137:ref:`maintainer-tip-coding-style`, ya que los parches/series a menudo
138tocan tanto archivos x86 KVM como no KVM, es decir, llaman la atención de
139los mantenedores de KVM *y* del árbol de consejos.
140
141El uso del abeto inverso, también conocido como árbol de Navidad inverso o
142árbol XMAS inverso, para las declaraciones de variables no es estrictamente
143necesario, aunque es preferible.
144
145Excepto para unos pocos apuntes especiales, no utilice comentarios
146kernel-doc para las funciones. La gran mayoría de las funciones "públicas"
147de KVM no son realmente públicas, ya que están destinadas únicamente al
148consumo interno de KVM (hay planes para privatizar las cabeceras y
149exportaciones de KVM para reforzar esto).
150
151Comentarios
152~~~~~~~~~~~
153Escriba los comentarios en modo imperativo y evite los pronombres. Utilice
154los comentarios para ofrecer una visión general de alto nivel del código
155y/o para explicar por qué el código hace lo que hace. No reitere lo que el
156código hace literalmente; deje que el código hable por sí mismo. Si el
157propio código es inescrutable, los comentarios no servirán de nada.
158
159Referencias SDM y APM
160~~~~~~~~~~~~~~~~~~~~~~
161Gran parte de la base de código de KVM está directamente vinculada al
162comportamiento de la arquitectura definido en El Manual de Desarrollo de
163Software (SDM) de Intel y el Manual del Programador de Arquitectura (APM)
164de AMD. El uso de "SDM de Intel" y "APM de AMD", o incluso sólo "SDM" o
165"APM", sin contexto adicional es correcto.
166
167No haga referencia a secciones específicas, tablas, figuras, etc. por su
168número, especialmente en los comentarios. En su lugar, si es necesario
169(véase más abajo), copie y pegue el fragmento correspondiente y haga
170referencia a las secciones/tablas/figuras por su nombre. Los diseños del
171SDM y el APM cambian constantemente, por lo que los números/etiquetas no
172son estables.
173
174En general, no haga referencia explícita ni copie-pegue del SDM o APM en
175los comentarios. Con pocas excepciones, KVM *debe* respetar el
176comportamiento de la arquitectura, por lo que está implícito que el
177comportamiento de KVM está emulando el comportamiento de SDM y/o APM. Tenga
178en cuenta que hacer referencia al SDM/APM en los registros de cambios para
179justificar el cambio y proporcionar contexto es perfectamente correcto y
180recomendable.
181
182Shortlog
183~~~~~~~~
184El formato de prefijo más recomendable es ``KVM: <topic>:``, donde
185``<topic>`` es uno de los siguientes::
186
187- x86
188- x86/mmu
189- x86/pmu
190- x86/xen
191- autocomprobaciones
192- SVM
193- nSVM
194- VMX
195- nVMX
196
197**¡NO use x86/kvm!** ``x86/kvm`` se usa exclusivamente para cambios de
198Linux virtualizado por KVM, es decir, para arch/x86/kernel/kvm.c. No use
199nombres de archivos o archivos completos como prefijo de asunto/shortlog.
200
201Tenga en cuenta que esto no coincide con las ramas temáticas (las ramas
202temáticas se preocupan mucho más por los conflictos de código).
203
204Todos los nombres distinguen entre mayúsculas y minúsculas. ``KVM: x86:``
205es correcto, ``kvm: vmx:`` no lo es.
206
207Escriba en mayúsculas la primera palabra de la descripción condensada del
208parche, pero omita la puntuación final. Por ejemplo::
209
210	KVM: x86: Corregir una desviación de puntero nulo en function_xyz()
211
212no::
213
214	kvm: x86: corregir una desviación de puntero nulo en function_xyz.
215
216Si un parche afecta a varios temas, recorra el árbol conceptual hasta
217encontrar el primer padre común (que suele ser simplemente ``x86``). En
218caso de duda, ``git log path/to/file`` debería proporcionar una pista
219razonable.
220
221De vez en cuando surgen nuevos temas, pero le rogamos que inicie un debate
222en la lista si desea proponer la introducción de un nuevo tema, es decir,
223no se ande con rodeos.
224
225Consulte :ref:`the_canonical_patch_format` para obtener más información,
226con una enmienda: no trate el límite de 70-75 caracteres como un límite
227absoluto y duro. En su lugar, utilice 75 caracteres como límite firme, pero
228no duro, y 80 caracteres como límite duro. Es decir, deje que el registro
229corto sobrepase en algunos caracteres el límite estándar si tiene una buena
230razón para hacerlo.
231
232Registro de cambios
233~~~~~~~~~~~~~~~~~~~
234Y lo que es más importante, escriba los registros de cambios en modo
235imperativo y evite los pronombres.
236
237Consulte :ref:`describe_changes` para obtener más información, con una
238recomendación: comience con un breve resumen de los cambios reales y
239continúe con el contexto y los antecedentes. Nota. Este orden entra en
240conflicto directo con el enfoque preferido del árbol de sugerencias. Por
241favor, siga el estilo preferido del árbol de sugerencias cuando envíe
242parches. que se dirigen principalmente a código arch/x86 que _NO_ es código
243KVM.
244
245KVM x86 prefiere indicar lo que hace un parche antes de entrar en detalles
246por varias razones. En primer lugar, el código que realmente se está
247cambiando es posiblemente la información más importante, por lo que esa
248información debe ser fácil de encontrar. Changelogs que entierran el "qué
249está cambiando realmente" en una sola línea después de 3+ párrafos de fondo
250hacen muy difícil encontrar esa información.
251
252Para la revisión inicial, se podría argumentar que "lo que está roto" es
253más importante, pero para hojear los registros y la arqueología git, los
254detalles escabrosos importan cada vez menos. Por ejemplo, al hacer una
255serie de "git blame", los detalles de cada cambio a lo largo del camino son
256inútiles, los detalles sólo importan para el culpable. Proporcionar el "qué
257ha cambiado" facilita determinar rápidamente si una confirmación puede ser
258de interés o no.
259
260Otra ventaja de decir primero "qué cambia" es que casi siempre es posible
261decir "qué cambia" en una sola frase. A la inversa, todo menos los errores
262más simples requieren varias frases o párrafos para describir el problema.
263Si tanto "qué está cambiando" como "cuál es el fallo" son muy breves, el
264orden no importa. Pero si uno es más corto (casi siempre el "qué está
265cambiando"), entonces cubrir el más corto primero es ventajoso porque es
266menos inconveniente para los lectores/revisores que tienen una preferencia
267estricta de orden. Por ejemplo, tener que saltarse una frase para llegar al
268contexto es menos doloroso que tener que saltarse tres párrafos para llegar
269a "lo que cambia".
270
271Arreglos
272~~~~~~~~
273Si un cambio corrige un error de KVM/kernel, añada una etiqueta Fixes:
274incluso si el cambio no necesita ser retroportado a kernels estables, e
275incluso si el cambio corrige un error en una versión anterior.
276
277Por el contrario, si es necesario hacer una corrección, etiquete
278explícitamente el parche con "Cc: stable@vger.kernel" (aunque no es
279necesario que el correo electrónico incluya Cc: stable); KVM x86 opta por
280excluirse del backporting Correcciones: por defecto. Algunos parches
281seleccionados automáticamente se retroportan, pero requieren la aprobación
282explícita de los mantenedores (busque MANUALSEL).
283
284Referencias a Funciones
285~~~~~~~~~~~~~~~~~~~~~~~
286Cuando se mencione una función en un comentario, registro de cambios o
287registro abreviado (o en cualquier otro lugar), utilice el formato
288``nombre_de_la_función()``. Los paréntesis proporcionan contexto y
289desambiguan la referencia.
290
291Pruebas
292~~~~~~~
293Como mínimo, *todos* los parches de una serie deben construirse limpiamente
294para KVM_INTEL=m KVM_AMD=m, y KVM_WERROR=y. Construir todas las
295combinaciones posibles de Kconfigs no es factible, pero cuantas más mejor.
296KVM_SMM, KVM_XEN, PROVE_LOCKING, y X86_64 son particularmente interesantes.
297
298También es obligatorio ejecutar las autopruebas y las pruebas unitarias de
299KVM (y, como es obvio, las pruebas deben pasar). La única excepción es para
300los cambios que tienen una probabilidad insignificante de afectar al
301comportamiento en tiempo de ejecución, por ejemplo, parches que sólo
302modificar los comentarios. Siempre que sea posible y pertinente, se
303recomienda encarecidamente realizar pruebas tanto en Intel como en AMD. Se
304recomienda arrancar una máquina virtual real, pero no es obligatorio.
305
306Para cambios que afecten al código de paginación en la sombra de KVM, es
307obligatorio ejecutar con TDP (EPT/NPT) deshabilitado. Para cambios que
308afecten al código MMU común de KVM, se recomienda encarecidamente ejecutar
309con TDP deshabilitado. Para todos los demás cambios, si el código que se
310está modificando depende de y/o interactúa con un parámetro del módulo, es
311obligatorio realizar pruebas con la configuración correspondiente.
312
313Tenga en cuenta que las autopruebas de KVM y las pruebas de unidad de KVM
314tienen fallos conocidos. Si sospecha que un fallo no se debe a sus cambios,
315verifique que el *exactamente el mismo* fallo se produce con y sin sus
316cambios.
317
318Los cambios que afecten a la documentación de texto reestructurado, es
319decir, a los archivos .rst, deben generar htmldocs de forma limpia, es
320decir, sin advertencias ni errores.
321
322Si no puede probar completamente un cambio, por ejemplo, por falta de
323hardware, indique claramente qué nivel de pruebas ha podido realizar, por
324ejemplo, en la carta de presentación.
325
326Novedades
327~~~~~~~~~
328Con una excepción, las nuevas características *deben* venir con cobertura
329de pruebas. Las pruebas específicas de KVM no son estrictamente necesarias,
330por ejemplo, si la cobertura se proporciona mediante la ejecución de una
331prueba de VM huésped suficientemente habilitada, o ejecutando una
332autoprueba de kernel relacionada en una VM, pero en todos los casos se
333prefieren las pruebas KVM dedicadas. Los casos de prueba negativos en
334particular son obligatorios para la habilitación de nuevas características
335de hardware, ya que los flujos de errores y excepciones rara vez se
336ejercitan simplemente ejecutando una VM.
337
338La única excepción a esta regla es si KVM está simplemente anunciando
339soporte para un a través de KVM_GET_SUPPORTED_CPUID, es decir, para
340instrucciones/funciones que KVM no puede impedir que utilice una VM y
341para las que no existe una verdadera habilitación.
342
343Tenga en cuenta que "nuevas características" no significa sólo "nuevas
344características de hardware". Las nuevas funcionalidades que no puedan ser
345validadas usando las pruebas existentes de KVM y/o las pruebas unitarias de
346KVM deben venir con pruebas.
347
348Es más que bienvenido el envío de nuevos desarrollos de características sin
349pruebas para obtener un feedback temprano, pero tales envíos deben ser
350etiquetados como RFC, y la carta de presentación debe indicar claramente
351qué tipo de feedback se solicita/espera. No abuse del proceso de RFC; las
352RFC no suelen recibir una revisión en profundidad.
353
354Corrección de Errores
355~~~~~~~~~~~~~~~~~~~~~
356Salvo en el caso de fallos "obvios" detectados por inspección, las
357correcciones deben ir acompañadas de un reproductor del fallo corregido. En
358muchos casos, el reproductor está implícito, por ejemplo, para errores de
359compilación y fallos de prueba, pero debe quedar claro para lectores qué es
360lo que no funciona y cómo verificar la solución. Se concede cierto margen a
361los errores detectados mediante cargas de trabajo/pruebas no públicas, pero
362se recomienda encarecidamente que se faciliten pruebas de regresión para
363dichos errores.
364
365En general, las pruebas de regresión son preferibles para cualquier fallo
366que no sea trivial de encontrar. Por ejemplo, incluso si el error fue
367encontrado originalmente por un fuzzer como syzkaller, una prueba de
368regresión dirigida puede estar justificada si el error requiere golpear una
369condición de carrera de tipo uno en un millón.
370
371Recuerde que los fallos de KVM rara vez son urgentes *y* no triviales de
372reproducir. Pregúntate si un fallo es realmente el fin del mundo antes de
373publicar una corrección sin un reproductor.
374
375Publicación
376-----------
377
378Enlaces
379~~~~~~~
380No haga referencia explícita a informes de errores, versiones anteriores de
381un parche/serie, etc. mediante cabeceras ``In-Reply-To:``. Usar
382``In-Reply-To:`` se convierte en un lío para grandes series y/o cuando el
383número de versiones es alto, y ``In-Reply-To:`` es inútil para cualquiera
384que no tenga el mensaje original, por ejemplo, si alguien no recibió un Cc
385en el informe de error o si la lista de destinatarios cambia entre
386versiones.
387
388Para enlazar con un informe de error, una versión anterior o cualquier cosa
389de interés, utiliza enlaces lore. Para hacer referencia a versiones
390anteriores, en general no incluya un Enlace: en el registro de cambios, ya
391que no hay necesidad de registrar la historia en git, es decir, ponga el
392enlace en la carta de presentación o en la sección que git ignora.
393Proporcione un Enlace: formal para los informes de errores y/o discusiones
394que condujeron al parche. El contexto de por qué se hizo un cambio es muy
395valioso para futuros lectores.
396
397Basado en Git
398~~~~~~~~~~~~~
399Si utilizas la versión 2.9.0 o posterior de git (Googlers, ¡os incluimos a
400todos!), utilice ``git format-patch`` con el indicador ``--base`` para
401incluir automáticamente la información del árbol base en los parches
402generados.
403
404Tenga en cuenta que ``--base=auto`` funciona como se espera si y sólo si el
405upstream de una rama se establece en la rama temática base, por ejemplo,
406hará lo incorrecto si su upstream se establece en su repositorio personal
407con fines de copia de seguridad. Una solución "automática" alternativa es
408derivar los nombres de tus ramas de desarrollo basándose en su KVM x86, e
409introdúzcalo en ``--base``. Por ejemplo, ``x86/pmu/mi_nombre_de_rama``, y
410luego escribir un pequeño wrapper para extraer ``pmu`` del nombre de la
411rama actual para obtener ``--base=x/pmu``, donde ``x`` es el nombre que su
412repositorio utiliza para rastrear el remoto KVM x86.
413
414Tests de Co-Publicación
415~~~~~~~~~~~~~~~~~~~~~~~
416Las autopruebas de KVM asociadas a cambios de KVM, por ejemplo, pruebas de
417regresión para correcciones de errores, deben publicarse junto con los
418cambios de KVM como una única serie. Se aplicarán las reglas estándar del
419núcleo para la bisección, es decir, los cambios de KVM que provoquen fallos
420en las pruebas se ordenarán después de las actualizaciones de las
421autopruebas, y viceversa. Las pruebas que fallan debido a errores de KVM
422deben ordenarse después de las correcciones de KVM.
423
424KVM-unit-tests debería *siempre* publicarse por separado. Las herramientas,
425por ejemplo b4 am, no saben que KVM-unit-tests es un repositorio separado y
426se confunden cuando los parches de una serie se aplican en diferentes
427árboles. Para vincular los parches de KVM-unit-tests a Parches KVM, primero
428publique los cambios KVM y luego proporcione un enlace lore Link: al
429parche/serie KVM en el parche(s) KVM-unit-tests.
430
431Notificaciones
432~~~~~~~~~~~~~~
433Cuando se acepte oficialmente un parche/serie, se enviará un correo
434electrónico de notificación en respuesta a la publicación original (carta
435de presentación para series de varios parches). La notificación incluirá el
436árbol y la rama temática, junto con los SHA1 de los commits de los parches
437aplicados.
438
439Si se aplica un subconjunto de parches, se indicará claramente en la
440notificación. A menos que se indique lo contrario, se sobreentiende que
441todos los parches del Las series que no han sido aceptadas necesitan más
442trabajo y deben presentarse en una nueva versión.
443
444Si por alguna razón se retira un parche después de haber sido aceptado
445oficialmente, se enviará una respuesta al correo electrónico de
446notificación explicando por qué se ha retirado el parche, así como los
447pasos siguientes.
448
449Estabilidad SHA1
450~~~~~~~~~~~~~~~~
451Los SHA1 no son 100% estables hasta que llegan al árbol de Linus. Un SHA1
452es *normalmente* estable una vez que se ha enviado una notificación, pero
453ocurren cosas. En la mayoría de los casos, se proporcionará una
454actualización del correo electrónico de notificación si se aplica un SHA1
455del parche. Sin embargo, en algunos escenarios, por ejemplo, si todas las
456ramas de KVM x86 necesitan ser rebasadas, no se darán notificaciones
457individuales.
458
459Vulnerabilidades
460~~~~~~~~~~~~~~~~
461Los fallos que pueden ser explotados por la VM (el "guest") para atacar al
462host (kernel o espacio de usuario), o que pueden ser explotados por una VM
463anidada a *su* host (L2 atacando a L1), son de particular interés para KVM.
464Por favor, siga el protocolo para :ref:`securitybugs` si sospecha que un
465fallo puede provocar una filtración de datos, etc.
466