LINUX.ORG.RU
ФорумTalks

Быдлокод в ядре линукса (файл drivers/tty/serial/samsung.c)


1

3

Не каждый додумается до такого:

static struct s3c24xx_uart_port s3c24xx_serial_ports[CONFIG_SERIAL_SAMSUNG_UARTS] = {
	[0] = {
		.port = {
			.lock		= __SPIN_LOCK_UNLOCKED(s3c24xx_serial_ports[0].port.lock),
			.iotype		= UPIO_MEM,
			.uartclk	= 0,
			.fifosize	= 16,
			.ops		= &s3c24xx_serial_ops,
			.flags		= UPF_BOOT_AUTOCONF,
			.line		= 0,
		}
	},
	[1] = {
		.port = {
			.lock		= __SPIN_LOCK_UNLOCKED(s3c24xx_serial_ports[1].port.lock),
			.iotype		= UPIO_MEM,
			.uartclk	= 0,
			.fifosize	= 16,
			.ops		= &s3c24xx_serial_ops,
			.flags		= UPF_BOOT_AUTOCONF,
			.line		= 1,
		}
	},
#if CONFIG_SERIAL_SAMSUNG_UARTS > 2

	[2] = {
		.port = {
			.lock		= __SPIN_LOCK_UNLOCKED(s3c24xx_serial_ports[2].port.lock),
			.iotype		= UPIO_MEM,
			.uartclk	= 0,
			.fifosize	= 16,
			.ops		= &s3c24xx_serial_ops,
			.flags		= UPF_BOOT_AUTOCONF,
			.line		= 2,
		}
	},
#endif
#if CONFIG_SERIAL_SAMSUNG_UARTS > 3
	[3] = {
		.port = {
			.lock		= __SPIN_LOCK_UNLOCKED(s3c24xx_serial_ports[3].port.lock),
			.iotype		= UPIO_MEM,
			.uartclk	= 0,
			.fifosize	= 16,
			.ops		= &s3c24xx_serial_ops,
			.flags		= UPF_BOOT_AUTOCONF,
			.line		= 3,
		}
	}
#endif
};

★★★★★
Ответ на: комментарий от border-radius

А это самсунг писал, или другие люди для устройств samsung?

Ttt ☆☆☆☆☆
()

Я бы на Вашем месте подумал что-то вроде «а может быть есть некоторая причина, по которой ЭТО сделано именно ТАК»

Alve ★★★★★
()
Ответ на: комментарий от ttnl

Какой тебе вариант? Тут куча вариантов.
Ну хотя бы в #define завернуть

Сможете назвать ещё два варианта? Чтобы оправдать употребление слова «куча».

quiet_readonly ★★★★
()

вот что бывает когда язык не поддерживает метапрограммирование

на яве сабж потребовал бы всего одной фабрики

Deleted
()
Ответ на: комментарий от quiet_readonly

Сможете назвать ещё два варианта? Чтобы оправдать употребление слова «куча».

Я секунд 30 думал, ответить ли тебе резко или в первый раз спустить на тормозах.

На будущее советую: не следует пытаться прикапываться к словам людей, значительно более тебя разбирающихся в вопросе. Может статься, что после разговора с ними ты будешь себя не очень хорошо чувствовать.

ttnl ★★★★★
() автор топика
Ответ на: комментарий от sergej

Я слушаю и думаю: «чуваки, вы вообще с какой планеты прилетели?»

ARM — эталон быдлокодерства. Линус несколько раз публично порол Рассела Кинга за это.

ttnl ★★★★★
() автор топика
Ответ на: комментарий от ttnl

Может статься, что после разговора с ними ты будешь себя не очень хорошо чувствовать.

Звучит как угроза. Ушел за пропкорном, не расходитесь.

slackwarrior ★★★★★
()
Ответ на: комментарий от ttnl

публично порол

У них там своя атмосфера - публичные люди много чего порют. Меж тем варианты, о которых спрашивал собеседник имярек, они все за скобками... А может он искреннне интересуется.

slackwarrior ★★★★★
()
Ответ на: комментарий от ttnl

Блин, ну ты как маленький.
Тебе никогда не приходилось продолжать писать чужой код?
Приходилось. Если бы не приходилось, то ты бы в исходники не глядел.
А раз приходилось, то какого хрена ты цепляешься к костылям?
Тролль, да?
Тролль должен быть тонким, почти незаметным.
Иди худей.

Stahl ★★☆
()
Ответ на: комментарий от ttnl

Пообещал в три короба и в кусты?

Я вижу только два варианта: 1) статическое выделение памяти как сдесь. Я бы может даже if-ов не добавлял если известно что их всегда меньше четырёх 2) ядерный malloc+цикл для инициализации полей.

По-моему, все остальные варианты будут вариацией этих двух.

true_admin ★★★★★
()
Ответ на: комментарий от ttnl

Я секунд 30 думал, ответить ли тебе резко или в первый раз спустить на тормозах.

А вы отвечайте резко, не раздумывайте. Марку элитарности ядерных разработчиков надо же поддерживать.

quiet_readonly ★★★★
()
Ответ на: комментарий от true_admin

«Ну какой же вы тупой» (Ирония судьбы или с легким паром)

#define S3C24_INITIALIZER(num)                                                                          \
        [num] = {                                                                                       \
                .port = {                                                                               \
                        .lock           = __SPIN_LOCK_UNLOCKED(s3c24xx_serial_ports[num].port.lock),    \
                        .iotype         = UPIO_MEM,                                                     \
                        .uartclk        = 0,                                                            \
                        .fifosize       = 16,                                                           \
                        .ops            = &s3c24xx_serial_ops,                                          \
                        .flags          = UPF_BOOT_AUTOCONF,                                            \
                        .line           = num,                                                          \
                }                                                                                       \
        }
static struct s3c24xx_uart_port s3c24xx_serial_ports[CONFIG_SERIAL_SAMSUNG_UARTS] = {
        S3C24_INITIALIZER(0),
        S3C24_INITIALIZER(1),
        S3C24_INITIALIZER(2),
        S3C24_INITIALIZER(3)
}
ttnl ★★★★★
() автор топика
Ответ на: комментарий от Deleted

вообще по идее можно было бы сразу 4 элемента всегда объявлять, без всяких #if-ов. Если в железке меньше UART-ов, будет просто первые N элементов массива юзать

Harald ★★★★★
()

Ядро большое, а вы прикопались к какому-то кусочку кода. Напишите «патч», если вам не все равно.

Spoofing ★★★★★
()
Ответ на: комментарий от ttnl

Пошлите им кто-нибудь патч для пятого и шестого com-порта!

А что, в модельном ряду s3c24xx их бывает больше четырёх?

Harald ★★★★★
()
Ответ на: комментарий от true_admin

этот вариант уже был озвучен, где ещё два?

Два варианта уже озвучены. Третим может быть заполнение в цикле (не 100%, что применимо, но скорее всего).

tailgunner ★★★★★
()
Ответ на: комментарий от Deleted

В Яндексе (в гугле, наверно, тоже) этот файл вторым результатом.

CYB3R ★★★★★
()
Ответ на: комментарий от tailgunner

Два варианта уже озвучены. Третим может быть заполнение в цикле (не 100%, что применимо, но скорее всего)

ТС озвучил один вариант, при этом ненавязчиво упустив #if. К заполнению в цикле в ядре просто ради красоты следует относится с опаской. Итого засчитан 1 вариант.

quiet_readonly ★★★★
()
Ответ на: комментарий от quiet_readonly

К заполнению в цикле в ядре просто ради красоты следует относится с опаской

И у тебя есть веские доводы?

Итого засчитан 1 вариант.

«А судьи кто?» (ц)

tailgunner ★★★★★
()
Ответ на: комментарий от Dirty_Diana

Похоже на код, сгенерированный автоматом. Ничего особенного.

Такому коду не место в ядре! Только теплый, ламповый и написанный руками.

devl547 ★★★★★
()
Ответ на: комментарий от winddos

Похоже на код, сгенерированный типичном разработчиком линукса. Ничего особенного.

cipher ★★★★★
()
Ответ на: комментарий от tailgunner

Для заполнения в цикле нужно сначала память выделить. И там __БОЛЬШИМИ_БУКВАМИ скорее всего макрос обозначается.

PolarFox ★★★★★
()
Ответ на: комментарий от tailgunner

И у тебя есть веские доводы?

Это уже не будет статической инициализацией.

baka-kun ★★★★★
()

Циклы нельзя использовать. Нельзя. Это плохо. Это как goto, только хуже.

IPR ★★★★★
()
Ответ на: комментарий от tailgunner

Третим может быть заполнение в цикле

С циклом тяжело, это же статическая переменная, инициализироваться должна один раз, т.ч. инициализацию нужно писать отдельно в другом месте и еще надо не налажать чтобы не проинициализировать несколько раз на всяких крайних случаях (ядро же реентерабильно вроде). Так что только статическая инициализация на макросах кмк.

theos ★★★
()
Ответ на: комментарий от theos

С циклом тяжело, это же статическая переменная, инициализироваться должна один раз

Для случая драйвера я не вижу проблемы - есть процедура инициализации, она вызывается ровно один раз (при загрузке модуля или инициализации ядра) и на одной нити.

tailgunner ★★★★★
()

Быдлокод

samsung

А пацаны-то не знали...

buddhist ★★★★★
()
Ответ на: комментарий от tailgunner

Для случая драйвера я не вижу проблемы

Ладно, уговорил. Хотя лично мне эстетически нравится когда инциализация констант происходит максимально близко к самой константе.

theos ★★★
()
Ответ на: комментарий от theos

Ну я же только ради полноты картины. Мне самому больше нравится вариант «заполнить таблицу по максимуму и использовать только то, что есть» - в рассматриваемом случае оверхед копеечный, несколько спинлоков.

tailgunner ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.