gate_v0_1_patch/gate_patch/patches/gate_v0_1.patch

171 lines
4.1 KiB
Diff
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* KI-GENERIERTER EXPERIMENTELLER KERNEL-PATCH NUR DEMONSTRATIONS- UND
* LERNZWECKE
*
* Generiert von OpenAI im Rahmen eines Experiments auf https://donau2space.de
* Experiment-Key: gate_v0_1_patch
*
* WICHTIG:
* - Dieser Patch wurde in keiner Weise auf echten Systemen getestet
* - Es besteht erhebliche Absturz-, Datenverlust- und Sicherheitsgefahr
* - KEINESFALL auf produktiven oder wichtigen Systemen anwenden!
* - Nur für Forschung, Lernzwecke und Diskussion gedacht
* - Möglicherweise verursacht der Patch Kernel-Panics, Dateisystem-Korruption
* oder andere schwerwiegende Probleme
*/
--- /dev/null
+++ b/drivers/mika/gate_eval.c
@@
+#include <linux/export.h>
+#include <linux/kernel.h>
+#include <linux/limits.h>
+#include <linux/printk.h>
+#include <linux/types.h>
+
+#define GATE_V0_1_MAX_SAMPLES 6
+#define GATE_V0_1_DEFAULT_K 5
+#define GATE_V0_1_WARN_MARGIN_DEFAULT 4
+
+enum gate_decision_state {
+ GATE_DECISION_PASS = 0,
+ GATE_DECISION_WARN,
+ GATE_DECISION_FAIL,
+};
+
+struct gate_evaluation_data {
+ u32 mischfenster_p95[GATE_V0_1_MAX_SAMPLES];
+ u8 sample_count;
+ u8 required_k;
+ u32 fail_threshold;
+ u32 warn_margin_limit;
+};
+
+struct decision_result {
+ enum gate_decision_state decision;
+ s32 margin;
+ bool flaky_flag;
+ u8 subset_flip_count;
+ u8 used_k;
+};
+
+static u8 gate_resolve_k(const struct gate_evaluation_data *data, u8 n)
+{
+ if (!n)
+ return 0;
+
+ if (data->required_k && data->required_k <= n)
+ return data->required_k;
+
+ return min_t(u8, GATE_V0_1_DEFAULT_K, n);
+}
+
+static u8 gate_count_fail_samples(const struct gate_evaluation_data *data,
+ u8 n)
+{
+ u8 i, fails = 0;
+
+ for (i = 0; i < n; i++) {
+ if (data->mischfenster_p95[i] >= data->fail_threshold)
+ fails++;
+ }
+
+ return fails;
+}
+
+static s32 gate_margin_to_threshold(const struct gate_evaluation_data *data,
+ u8 n)
+{
+ u8 i;
+ s32 tightest = INT_MAX;
+
+ for (i = 0; i < n; i++) {
+ s32 delta = (s32)data->fail_threshold -
+ (s32)data->mischfenster_p95[i];
+
+ if (delta < tightest)
+ tightest = delta;
+ }
+
+ return tightest == INT_MAX ? 0 : tightest;
+}
+
+static u8 gate_subset_flip_count(const struct gate_evaluation_data *data,
+ u8 n, u8 k, u8 fail_count)
+{
+ u8 i, flips = 0;
+ bool base_fail = fail_count >= k;
+
+ for (i = 0; i < n; i++) {
+ bool sample_fail = data->mischfenster_p95[i] >=
+ data->fail_threshold;
+ u8 subset_fail = fail_count - sample_fail;
+ bool subset_state = subset_fail >= k;
+
+ if (subset_state != base_fail)
+ flips++;
+ }
+
+ return flips;
+}
+
+struct decision_result evaluate_gate(const struct gate_evaluation_data *data)
+{
+ struct decision_result result = {
+ .decision = GATE_DECISION_WARN,
+ .margin = INT_MAX,
+ .flaky_flag = true,
+ .subset_flip_count = 0,
+ .used_k = 0,
+ };
+ u8 n, k, fail_count;
+ s32 margin;
+ u32 warn_margin;
+ bool hard_fail;
+
+ if (WARN_ONCE(!data, "gate_v0_1: NULL data\n"))
+ return result;
+
+ n = clamp_t(u8, data->sample_count, 0, GATE_V0_1_MAX_SAMPLES);
+ if (!n) {
+ pr_warn_once("gate_v0_1: no samples, defaulting to WARN\n");
+ return result;
+ }
+
+ if (!data->fail_threshold) {
+ pr_warn_once("gate_v0_1: fail threshold missing\n");
+ return result;
+ }
+
+ k = gate_resolve_k(data, n);
+ if (!k) {
+ pr_warn_once("gate_v0_1: invalid k-of-n parameters\n");
+ return result;
+ }
+
+ result.used_k = k;
+
+ fail_count = gate_count_fail_samples(data, n);
+ margin = gate_margin_to_threshold(data, n);
+ result.margin = margin;
+
+ hard_fail = fail_count >= k;
+ result.decision = hard_fail ? GATE_DECISION_FAIL : GATE_DECISION_PASS;
+
+ result.subset_flip_count =
+ gate_subset_flip_count(data, n, k, fail_count);
+ result.flaky_flag = result.subset_flip_count;
+
+ warn_margin = data->warn_margin_limit ?
+ data->warn_margin_limit :
+ GATE_V0_1_WARN_MARGIN_DEFAULT;
+
+ if (result.decision == GATE_DECISION_FAIL &&
+ margin >= -(s32)warn_margin)
+ result.decision = GATE_DECISION_WARN;
+
+ if (result.decision == GATE_DECISION_PASS && result.flaky_flag)
+ result.decision = GATE_DECISION_WARN;
+
+ return result;
+}
+EXPORT_SYMBOL_GPL(evaluate_gate);