Няшная / Говнокод #19491 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
/*
 * mfi_tbolt_adp_reset - For controller reset
 * @regs: MFI register set
 */
int
mfi_tbolt_adp_reset(struct mfi_softc *sc)
{
	int retry = 0, i = 0;
	int HostDiag;

	MFI_WRITE4(sc, MFI_WSR, 0xF);
	MFI_WRITE4(sc, MFI_WSR, 4);
	MFI_WRITE4(sc, MFI_WSR, 0xB);
	MFI_WRITE4(sc, MFI_WSR, 2);
	MFI_WRITE4(sc, MFI_WSR, 7);
	MFI_WRITE4(sc, MFI_WSR, 0xD);

	for (i = 0; i < 10000; i++) ;

	HostDiag = (uint32_t)MFI_READ4(sc, MFI_HDR);

	while (!( HostDiag & DIAG_WRITE_ENABLE)) {
		for (i = 0; i < 1000; i++);
		HostDiag = (uint32_t)MFI_READ4(sc, MFI_HDR);
		device_printf(sc->mfi_dev, "ADP_RESET_TBOLT: retry time=%x, "
		    "hostdiag=%x\n", retry, HostDiag);

		if (retry++ >= 100)
			return 1;
	}

	device_printf(sc->mfi_dev, "ADP_RESET_TBOLT: HostDiag=%x\n", HostDiag);

	MFI_WRITE4(sc, MFI_HDR, (HostDiag | DIAG_RESET_ADAPTER));

	for (i=0; i < 10; i++) {
		for (i = 0; i < 10000; i++); // <--- двойной говнокод.
	}

	HostDiag = (uint32_t)MFI_READ4(sc, MFI_RSR);
	while (HostDiag & DIAG_RESET_ADAPTER) {
		for (i = 0; i < 1000; i++) ;
		HostDiag = (uint32_t)MFI_READ4(sc, MFI_RSR);
		device_printf(sc->mfi_dev, "ADP_RESET_TBOLT: retry time=%x, "
		    "hostdiag=%x\n", retry, HostDiag);

		if (retry++ >= 1000)
			return 1;
	}
	return 0;
}

https://svnweb.freebsd.org/base/head/sys/dev/mfi/mfi_tbolt.c?view=markup&pathrev=235016#l 145
Двойной говнокод. Мало того, что такие задержки на циклах попросту бесполезны, любой нормальный компилятор их выбросит при оптимизации, так там еще и ошибка с переиспользованием переменной i из внешнего цикла во внутреннем

Запостил: j123123 j123123, (Updated )

Комментарии (13) RSS

  • Это же с хабра! Там только вчера разбирали код ядра PVS-ом, этот кусок тоже там был найден.
    Ответить
    • Могу лишь сказать, что их хваленый анализатор не смог обнаружить сам факт бесполезности таких циклов для организации задержек, а обратил он внимания на них только тогда(и только оттого), когда такие циклы были друг в друга вложены
      Ответить
      • > бесполезности
        Да даже если компилятор не выкинет - один фиг непредсказуемая хуета, т.к. частота процессора неизвестна, а число итераций об таймер не откалибровано.
        Ответить
        • комментарий "for controller reset" может говорить как о том, что компилятор не выкинет, так и о том, что частота известна
          Ответить
          • Откуда известна частота? Каким образом компилятор это не выкинет? С каким уровнем оптимизации это собирают вообще? -O0 ? -O1 ?
            Ответить
            • ну так если пишем под конкретный контроллер, то знаем и частоту, и уровень оптимизации
              Ответить
              • По-вашему это такой особый код, который только на вполне конкретном контроллере должен уметь работать? А где вы видели контроллеры с ThunderBolt (чтобы был некий контроллер, на котором крутилась бы ОС FreeBSD и который бы умел в ThunderBolt )? А знаете что это вообще такое? А что такое mfi? Вот https://mfi.apple.com/MFiWeb/getFAQ.action#1-1 .
                Ответить
          • Да даже если код всё-таки был бы под контроллер - откуда ты знаешь, что компилятор его не выкинет?
            Ответить
              • Нельзя это тестами проверить... Сегодня луна была в знаке Девы, и компилятор решил не выбрасывать цикл...
                Ответить

Добавить комментарий

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8